Add a LIVEVCS.unmasked category for ebuilds that have non-empty KEYWORDS and
authorZac Medico <zmedico@gentoo.org>
Sun, 23 Aug 2009 16:38:24 +0000 (16:38 -0000)
committerZac Medico <zmedico@gentoo.org>
Sun, 23 Aug 2009 16:38:24 +0000 (16:38 -0000)
are not masked in the global package.mask. Thanks to Diego E. Pettenò for
the suggestion.

svn path=/main/trunk/; revision=14132

bin/repoman
man/repoman.1

index aecd45ca07a4cbd31629a168a329c2e7a0b19f4a..8e670f118478ebd29b38f739497cce8a29865777 100755 (executable)
@@ -302,6 +302,7 @@ qahelp={
        "variable.invalidchar":"A variable contains an invalid character that is not part of the ASCII character set",
        "variable.readonly":"Assigning a readonly variable",
        "LIVEVCS.stable":"This ebuild is a live checkout from a VCS but has stable keywords.",
+       "LIVEVCS.unmasked":"This ebuild is a live checkout from a VCS but has keywords and is not masked in the global package.mask.",
        "IUSE.invalid":"This ebuild has a variable in IUSE that is not in the use.desc or use.local.desc file",
        "IUSE.undefined":"This ebuild does not define IUSE (style guideline says to define IUSE even when empty)",
        "LICENSE.invalid":"This ebuild is listing a license that doesnt exist in portages license/ dir.",
@@ -362,7 +363,8 @@ qawarnings = set((
 "virtual.unavailable",
 "usage.obsolete",
 "upstream.workaround",
-"LIVEVCS.stable"
+"LIVEVCS.stable",
+"LIVEVCS.unmasked",
 ))
 
 non_ascii_re = re.compile(r'[^\x00-\x7f]')
@@ -570,6 +572,7 @@ valid_profile_types = frozenset(['dev', 'exp', 'stable'])
 kwlist = set()
 liclist = set()
 uselist = set()
+global_pmasklines = []
 
 for path in portdb.porttrees:
        try:
@@ -600,6 +603,9 @@ for path in portdb.porttrees:
                                if x:
                                        uselist.add(use_prefix + x[0])
 
+       global_pmasklines.append(portage.util.grabfile_package(
+               os.path.join(path, 'profiles', 'package.mask'), recursive=1))
+
        desc_path = os.path.join(path, 'profiles', 'profiles.desc')
        try:
                desc_file = codecs.open(_unicode_encode(desc_path,
@@ -635,6 +641,21 @@ for path in portdb.porttrees:
 repoman_settings['PORTAGE_ARCHLIST'] = ' '.join(sorted(kwlist))
 repoman_settings.backup_changes('PORTAGE_ARCHLIST')
 
+global_pmasklines = portage.util.stack_lists(global_pmasklines, incremental=1)
+global_pmaskdict = {}
+for x in global_pmasklines:
+       global_pmaskdict.setdefault(portage.dep_getkey(x), []).append(x)
+del global_pmasklines
+
+def has_global_mask(pkg):
+       mask_atoms = global_pmaskdict.get(pkg.cp)
+       if mask_atoms:
+               pkg_list = [pkg]
+               for x in mask_atoms:
+                       if portage.dep.match_from_list(x, pkg_list):
+                               return x
+       return None
+
 # Ensure that profile sub_path attributes are unique. Process in reverse order
 # so that profiles with duplicate sub_path from overlays will override
 # profiles with the same sub_path from parent repos.
@@ -1347,6 +1368,10 @@ for x in scanlist:
                                                bad_stable_keywords)
                        del bad_stable_keywords
 
+                       if keywords and not has_global_mask(pkg):
+                               stats["LIVEVCS.unmasked"] += 1
+                               fails["LIVEVCS.unmasked"].append(relative_path)
+
                if options.ignore_arches:
                        arches = [[repoman_settings["ARCH"], repoman_settings["ARCH"],
                                repoman_settings["ACCEPT_KEYWORDS"].split()]]
index 13383a4237133e7f0038df00876515e556156527..52ef02a1e3d6c10b21584b4e1efd465353338a06 100644 (file)
@@ -149,6 +149,10 @@ Syntax error in LICENSE (usually an extra/missing space/parenthesis)
 .B LIVEVCS.stable
 Ebuild is a live ebuild (cvs, git, darcs, svn, etc) checkout with stable keywords.
 .TP
+.B LIVEVCS.unmasked
+Ebuild is a live ebuild (cvs, git, darcs, svn, etc) checkout but has keywords
+and is not masked in the global package.mask.
+.TP
 .B PDEPEND.bad
 User-visible ebuilds with bad PDEPEND settings (matched against *visible* ebuilds)
 .TP