summaryrefslogtreecommitdiff
path: root/bin
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2008-03-27 23:31:28 +0000
committerZac Medico <zmedico@gentoo.org>2008-03-27 23:31:28 +0000
commitc70f27915f70b125790fb1d67c5d1c9cc7d8ee1b (patch)
tree8a7fbd712a053640b6094def094ad124dd970217 /bin
parentBug #212509 - Display a note about the --without-mask option when there (diff)
downloadportage-multirepo-c70f27915f70b125790fb1d67c5d1c9cc7d8ee1b.tar.gz
portage-multirepo-c70f27915f70b125790fb1d67c5d1c9cc7d8ee1b.tar.bz2
portage-multirepo-c70f27915f70b125790fb1d67c5d1c9cc7d8ee1b.zip
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
Diffstat (limited to 'bin')
-rwxr-xr-xbin/repoman32
1 files changed, 31 insertions, 1 deletions
diff --git a/bin/repoman b/bin/repoman
index 4ed1a34b..85556147 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