From: Sebastian Luther <sebastianlut...@gmx.de>

---
 bin/repoman | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/bin/repoman b/bin/repoman
index d1542e9..2a332a7 100755
--- a/bin/repoman
+++ b/bin/repoman
@@ -78,7 +78,7 @@ from portage.output import ConsoleStyleFile, StyleWriter
 from portage.util import writemsg_level
 from portage.util._argparse import ArgumentParser
 from portage.package.ebuild.digestgen import digestgen
-from portage.eapi import eapi_has_iuse_defaults, eapi_has_required_use
+from portage.eapi import eapi_has_iuse_defaults, eapi_has_required_use, 
eapi_has_slot_operator
 
 if sys.hexversion >= 0x3000000:
        basestring = str
@@ -354,6 +354,7 @@ qahelp = {
        "portage.internal": "The ebuild uses an internal Portage function or 
variable",
        "repo.eapi.banned": "The ebuild uses an EAPI which is banned by the 
repository's metadata/layout.conf settings",
        "repo.eapi.deprecated": "The ebuild uses an EAPI which is deprecated by 
the repository's metadata/layout.conf settings",
+       "slot.operator.missing": "The ebuild depends on package with several 
slots and/or sub slots without specifying a slot operator",
        "virtual.oldstyle": "The ebuild PROVIDEs an old-style virtual (see GLEP 
37)",
        "virtual.suspect": "Ebuild contains a package that usually should be 
pulled via virtual/, not directly.",
        "usage.obsolete": "The ebuild makes use of an obsolete construct",
@@ -399,6 +400,7 @@ qawarnings = set((
 "metadata.warning",
 "portage.internal",
 "repo.eapi.deprecated",
+"slot.operator.missing",
 "usage.obsolete",
 "upstream.workaround",
 "LIVEVCS.stable",
@@ -2070,6 +2072,14 @@ for x in effective_scanlist:
                                                         " with a non-zero 
revision:" + \
                                                         " '%s'") % (mytype, 
atom))
 
+                                       if not (atom.blocker or atom.slot or 
atom.slot_operator) and \
+                                               eapi_has_slot_operator(eapi):
+                                               child_slots = set((child.slot, 
child.sub_slot) for child in portdb.xmatch("match-all", atom))
+                                               if len(child_slots) > 1:
+                                                       
stats['slot.operator.missing'] += 1
+                                                       
fails['slot.operator.missing'].append(relative_path + \
+                                                               ": '%s' missing 
slot or slot operator" % atom)
+
                        type_list.extend([mytype] * (len(badsyntax) - 
len(type_list)))
 
                for m, b in zip(type_list, badsyntax):
-- 
1.8.3.2


Reply via email to