summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xbin/repoman32
-rw-r--r--man/repoman.13
2 files changed, 34 insertions, 1 deletions
diff --git a/bin/repoman b/bin/repoman
index 4ed1a34b7..855561478 100755
--- a/bin/repoman
+++ b/bin/repoman
@@ -250,6 +250,7 @@ qahelp={
"file.size":"Files in the files directory must be under 20k",
"file.name":"File/dir name must be composed of only the following chars: %s " % allowed_filename_chars,
"file.UTF8":"File is not UTF8 compliant",
+ "KEYWORDS.dropped":"Ebuilds that appear to have dropped KEYWORDS for some arch",
"KEYWORDS.missing":"Ebuilds that have a missing or empty KEYWORDS variable",
"KEYWORDS.stable":"Ebuilds that have been added directly with stable KEYWORDS",
"KEYWORDS.stupid":"Ebuilds that use KEYWORDS=-* instead of package.mask",
@@ -317,6 +318,7 @@ qawarnings=[
"DEPEND.badindev","RDEPEND.badindev","PDEPEND.badindev",
"DEPEND.badmaskedindev","RDEPEND.badmaskedindev","PDEPEND.badmaskedindev",
"DESCRIPTION.toolong",
+"KEYWORDS.dropped",
"KEYWORDS.stupid",
"KEYWORDS.missing",
"RESTRICT.invalid",
@@ -748,7 +750,19 @@ for x in scanlist:
fails["EAPI.unsupported"].append(os.path.join(x, y))
continue
ebuild_metadata[pf] = myaux
- ebuildlist.sort()
+
+ # Sort ebuilds in ascending order for the KEYWORDS.dropped check.
+ pkgsplits = {}
+ for i in xrange(len(ebuildlist)):
+ ebuild_split = portage.pkgsplit(ebuildlist[i])
+ pkgsplits[ebuild_split] = ebuildlist[i]
+ ebuildlist[i] = ebuild_split
+ ebuildlist.sort(portage.pkgcmp)
+ for i in xrange(len(ebuildlist)):
+ ebuildlist[i] = pkgsplits[ebuildlist[i]]
+ del pkgsplits
+
+ slot_keywords = {}
if len(ebuild_metadata) != len(ebuildlist):
# If we can't access all the metadata then it's totally unsafe to
@@ -1021,6 +1035,22 @@ for x in scanlist:
x + "/" + y + ".ebuild added with stable keywords: %s" % \
" ".join(stable_keywords))
+ ebuild_archs = set(kw.lstrip("~") for kw in keywords \
+ if not kw.startswith("-"))
+
+ previous_keywords = slot_keywords.get(myaux["SLOT"])
+ if previous_keywords is None:
+ slot_keywords[myaux["SLOT"]] = set()
+ else:
+ dropped_keywords = previous_keywords.difference(ebuild_archs)
+ if dropped_keywords:
+ stats["KEYWORDS.dropped"] += 1
+ fails["KEYWORDS.dropped"].append(
+ relative_path + " dropped keywords: %s" % \
+ " ".join(sorted(dropped_keywords)))
+
+ slot_keywords[myaux["SLOT"]].update(ebuild_archs)
+
# KEYWORDS="-*" is a stupid replacement for package.mask and screws general KEYWORDS semantics
if "-*" in keywords:
haskeyword = False
diff --git a/man/repoman.1 b/man/repoman.1
index 6a0f43878..7956ab446 100644
--- a/man/repoman.1
+++ b/man/repoman.1
@@ -111,6 +111,9 @@ Ebuilds that have a missing or empty HOMEPAGE variable
.B IUSE.invalid
This build has a variable in IUSE that is not in the use.desc or use.local.desc file
.TP
+.B KEYWORDS.dropped
+Ebuilds that appear to have dropped KEYWORDS for some arch
+.TP
.B KEYWORDS.invalid
This ebuild contains KEYWORDS that are not listed in profiles/arch.list or for which no valid profile was found
.TP