From c70f27915f70b125790fb1d67c5d1c9cc7d8ee1b Mon Sep 17 00:00:00 2001 From: Zac Medico Date: Thu, 27 Mar 2008 23:31:28 +0000 Subject: Bug #209418 - Add a new KEYWORDS.dropped check that compares keywords against the keywords of earlier ebuild versions within a slot. svn path=/main/trunk/; revision=9522 --- bin/repoman | 32 +++++++++++++++++++++++++++++++- man/repoman.1 | 3 +++ 2 files changed, 34 insertions(+), 1 deletion(-) 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 -- cgit v1.2.3-1-g7c22