diff options
author | Zac Medico <zmedico@gentoo.org> | 2008-03-28 13:02:47 +0000 |
---|---|---|
committer | Zac Medico <zmedico@gentoo.org> | 2008-03-28 13:02:47 +0000 |
commit | c192360e121c3b652d25f907b29d5174842a253d (patch) | |
tree | 3704214331a1ff94797a168b6a4ffb13ed915f0e /bin | |
parent | 20e1130aea9e5ed261f9a3a7be40efdb1805559c (diff) | |
download | portage-c192360e121c3b652d25f907b29d5174842a253d.tar.gz portage-c192360e121c3b652d25f907b29d5174842a253d.tar.bz2 portage-c192360e121c3b652d25f907b29d5174842a253d.zip |
Bug #209418 - Add a new KEYWORDS.dropped check that compares keywords
against the keywords of earlier ebuild versions within a slot. (trunk r9522)
svn path=/main/branches/2.1.2/; revision=9575
Diffstat (limited to 'bin')
-rwxr-xr-x | bin/repoman | 32 |
1 files changed, 31 insertions, 1 deletions
diff --git a/bin/repoman b/bin/repoman index f1cb3016e..cb6c7efc9 100755 --- a/bin/repoman +++ b/bin/repoman @@ -166,6 +166,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", @@ -234,6 +235,7 @@ qawarnings=[ "DEPEND.badindev","RDEPEND.badindev","PDEPEND.badindev", "DEPEND.badmaskedindev","RDEPEND.badmaskedindev","PDEPEND.badmaskedindev", "DESCRIPTION.toolong", +"KEYWORDS.dropped", "KEYWORDS.stupid", "KEYWORDS.missing", "RESTRICT.invalid", @@ -1157,7 +1159,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 = tuple(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 @@ -1508,6 +1522,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 + ": %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 |