| # -*- coding:utf-8 -*- |
| # repoman: missing slot check |
| # Copyright 2014 Gentoo Foundation |
| # Distributed under the terms of the GNU General Public License v2 |
| |
| """This module contains the check used to find missing slot values |
| in dependencies.""" |
| |
| from portage.eapi import eapi_has_slot_operator |
| |
| |
| def check_missingslot(atom, mytype, eapi, portdb, qatracker, relative_path, my_aux): |
| # If no slot or slot operator is specified in RDEP... |
| if ( |
| not atom.blocker |
| and not atom.slot |
| and not atom.slot_operator |
| and mytype == "RDEPEND" |
| and eapi_has_slot_operator(eapi) |
| ): |
| # Check whether it doesn't match more than one. |
| atom_matches = portdb.xmatch("match-all", atom) |
| dep_slots = frozenset( |
| portdb.aux_get(cpv, ["SLOT"])[0].split("/")[0] for cpv in atom_matches |
| ) |
| |
| if len(dep_slots) > 1: |
| # See if it is a DEPEND as well. It's a very simple & dumb |
| # check but should suffice for catching it. |
| depend = my_aux["DEPEND"].split() |
| if atom not in depend: |
| return |
| |
| qatracker.add_error( |
| "dependency.missingslot", |
| relative_path |
| + ": %s: '%s' matches more than one slot, please specify an explicit slot and/or use the := or :* slot operator" |
| % (mytype, atom), |
| ) |