From 995096e4fb050028f985a620ef648ab948e22b35 Mon Sep 17 00:00:00 2001 From: Kito Date: Sat, 25 Mar 2006 18:36:19 +0000 Subject: [PATCH] merge -r 3000:3004 from trunk svn path=/main/branches/prefix/; revision=3005 --- bin/repoman | 23 +++++++++++++++-------- man/repoman.1 | 2 +- pym/portage.py | 24 ++++++++++++++++++++++-- pym/portage_manifest.py | 11 ++++++++++- 4 files changed, 48 insertions(+), 12 deletions(-) diff --git a/bin/repoman b/bin/repoman index c2fe77cae..b1babde77 100755 --- a/bin/repoman +++ b/bin/repoman @@ -31,6 +31,8 @@ import cvstree import time import codecs +from portage_manifest import Manifest + from output import * #bold, darkgreen, darkred, green, red, turquoise, yellow @@ -102,7 +104,7 @@ qahelp={ "CVS/Entries.IO_error":"Attempting to commit, and an IO error was encountered access the Entries file", "digest.partial":"Digest files do not contain all corresponding URI elements", "digest.assumed":"Existing digest must be assumed correct (Package level only)", - "digest.unused":"Digest entry has no matching SRC_URI entry", + "digestentry.unused":"Digest/Manifest entry has no matching SRC_URI entry", "digest.fail":"Digest does not match the specified local file", "digest.stray":"Digest files that do not have a corresponding ebuild", "digest.missing":"Digest files that are missing (ebuild exists, digest doesn't)", @@ -177,7 +179,7 @@ qawarnings=[ "digest.notadded", "digest.disjointed", "digest.missing", -"digest.unused", +"digestentry.unused", "DEPEND.badmasked","RDEPEND.badmasked","PDEPEND.badmasked", "DEPEND.badindev","RDEPEND.badindev","PDEPEND.badindev", "DEPEND.badmaskedindev","RDEPEND.badmaskedindev","PDEPEND.badmaskedindev", @@ -862,6 +864,10 @@ for x in scanlist: fails["svn.IO_error"].append(checkdir+"/files svn info") continue + mf=Manifest(checkdir, db=portage.db["/"]["porttree"].dbapi, mysettings=repoman_settings) + mydigests=mf.getTypeDigests("DIST") + myfiles_all = [] + if os.path.exists(checkdir+"/files"): filesdirlist=os.listdir(checkdir+"/files") for y in filesdirlist: @@ -878,8 +884,6 @@ for x in scanlist: stats["file.executable"] += 1 fails["file.executable"].append(x+"/files/"+y) - mydigests=portage.digestParseFile(checkdir+"/files/"+y) - mykey = catdir + "/" + y[7:] if y[7:] not in ebuildlist: #stray digest @@ -899,10 +903,8 @@ for x in scanlist: else: # We have an ebuild myuris,myfiles = portage.db["/"]["porttree"].dbapi.getfetchlist(mykey,all=True) - for entry in mydigests.keys(): - if entry not in myfiles: - stats["digest.unused"] += 1 - fails["digest.unused"].append(y+"::"+entry) + myfiles_all.extend(myfiles) + uri_dict = {} for myu in myuris: myubn = os.path.basename(myu) @@ -962,6 +964,11 @@ for x in scanlist: fails["file.name"].append("%s/files/%s: char '%s'" % (checkdir, y, c)) break + for entry in mydigests.keys(): + if entry not in myfiles_all: + stats["digestentry.unused"] += 1 + fails["digestentry.unused"].append(checkdir+"::"+entry) + if "ChangeLog" not in checkdirlist: stats["changelog.missing"]+=1 diff --git a/man/repoman.1 b/man/repoman.1 index 66994edf9..7a70245f8 100644 --- a/man/repoman.1 +++ b/man/repoman.1 @@ -178,7 +178,7 @@ Digest files that do not have a corresponding ebuild Digests which are incomplete (please check if your USE/ARCH includes all files) .TP .B digest.unused -Digest entry has no matching SRC_URI entry +Digest/Manifest entry has no matching SRC_URI entry .TP .B ebuild.allmasked All ebuilds are masked for this package (Package level only) diff --git a/pym/portage.py b/pym/portage.py index aff6af34c..f7341ce86 100644 --- a/pym/portage.py +++ b/pym/portage.py @@ -6602,9 +6602,29 @@ def getvirtuals(myroot): return settings.getvirtuals(myroot) def do_vartree(mysettings): - db["/"] = {"vartree":vartree("/")} + class LazyVirtualsDict(dict): + def __init__(self, myroot): + super(LazyVirtualsDict, self).__init__() + self.myroot = myroot + self["virtuals"] = None + def __getitem__(self, key): + if "virtuals" == key: + if "virtuals" in self: + virtuals = super(LazyVirtualsDict, self).__getitem__("virtuals") + if virtuals is not None: + return virtuals + else: + global settings + virtuals = settings.getvirtuals(self.myroot) + self["virtuals"] = virtuals + return virtuals + return super(LazyVirtualsDict, self).__getitem__(key) + global db, root + db["/"] = LazyVirtualsDict("/") + db["/"]["vartree"] = vartree("/") if root!="/": - db[root] = {"vartree":vartree(root)} + db[root] = LazyVirtualsDict(root) + db[root]["vartree"] = vartree(root) #We need to create the vartree first, then load our settings, and then set up our other trees usedefaults=settings.use_defs diff --git a/pym/portage_manifest.py b/pym/portage_manifest.py index 962dbb447..a9f521ef0 100644 --- a/pym/portage_manifest.py +++ b/pym/portage_manifest.py @@ -63,6 +63,10 @@ class Manifest(object): rval.update(self.fhashdict[t]) return rval + def getTypeDigests(self, ftype): + """ Similar to getDigests(), but restricted to files of the given type. """ + return self.fhashdict[ftype] + def _readDigests(self): """ Parse old style digest files for this Manifest instance """ mycontent = "" @@ -140,6 +144,11 @@ class Manifest(object): mylines = [] for t in self.fhashdict.keys(): for f in self.fhashdict[t].keys(): + # compat hack for v1 manifests + if t == "AUX": + f2 = os.path.join("files", f) + else: + f2 = f myline = " ".join([t, f, str(self.fhashdict[t][f]["size"])]) myhashes = self.fhashdict[t][f] for h in myhashes.keys(): @@ -151,7 +160,7 @@ class Manifest(object): for h in myhashes.keys(): if h not in portage_const.MANIFEST1_HASH_FUNCTIONS: continue - mylines.append((" ".join([h, str(myhashes[h]), f, str(myhashes["size"])]))) + mylines.append((" ".join([h, str(myhashes[h]), f2, str(myhashes["size"])]))) fd.write("\n".join(mylines)) fd.write("\n") -- 2.26.2