commit: 5ac2a8f08101501d0416ad9d79e277c363cea85e
Author: Kenneth Raplee <kenrap <AT> kennethraplee <DOT> com>
AuthorDate: Sat Apr 2 01:29:10 2022 +0000
Commit: Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Mon Apr 4 19:04:43 2022 +0000
URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=5ac2a8f0
Enhance the update hash methods for simplification
Signed-off-by: Kenneth Raplee <kenrap <AT> kennethraplee.com>
Signed-off-by: Sam James <sam <AT> gentoo.org>
lib/portage/manifest.py | 85 +++++++++++++++++++++++++++----------------------
1 file changed, 47 insertions(+), 38 deletions(-)
diff --git a/lib/portage/manifest.py b/lib/portage/manifest.py
index 4dca536e4..655eabf68 100644
--- a/lib/portage/manifest.py
+++ b/lib/portage/manifest.py
@@ -718,63 +718,72 @@ class Manifest:
total_bytes = sum(int(self.fhashdict["DIST"][f]["size"]) for f in
fetchlist)
return total_bytes
- def updateFileHashes(
- self, ftype, fname, checkExisting=True, ignoreMissing=True,
reuseExisting=False
+ def updateAllFileHashes(
+ self, ftype, fnames, checkExisting=True, ignoreMissing=True,
reuseExisting=False
):
- """Regenerate hashes for the given file"""
- if checkExisting:
- self.checkFileHashes(ftype, fname, ignoreMissing=ignoreMissing)
- if not ignoreMissing and fname not in self.fhashdict[ftype]:
- raise FileNotInManifestException(fname)
- if fname not in self.fhashdict[ftype]:
- self.fhashdict[ftype][fname] = {}
- myhashkeys = list(self.hashes)
- if reuseExisting:
- for k in [h for h in self.fhashdict[ftype][fname] if h in
myhashkeys]:
- myhashkeys.remove(k)
- myhashes = perform_multiple_checksums(
- self._getAbsname(ftype, fname), myhashkeys
- )
- self.fhashdict[ftype][fname].update(myhashes)
+ """Regenerate hashes from a list of files"""
+ for fname in fnames:
+ if checkExisting:
+ self.checkFileHashes(ftype, fname, ignoreMissing=ignoreMissing)
+ if not ignoreMissing and fname not in self.fhashdict[ftype]:
+ raise FileNotInManifestException(fname)
+ if fname not in self.fhashdict[ftype]:
+ self.fhashdict[ftype][fname] = {}
+ myhashkeys = self.hashes
+ if reuseExisting:
+ myhashkeys =
myhashkeys.difference(self.fhashdict[ftype][fname])
+ myhashes = perform_multiple_checksums(
+ self._getAbsname(ftype, fname), myhashkeys
+ )
+ self.fhashdict[ftype][fname].update(myhashes)
- def updateTypeHashes(self, idtype, checkExisting=False,
ignoreMissingFiles=True):
- """Regenerate all hashes for all files of the given type"""
- for fname in self.fhashdict[idtype]:
- self.updateFileHashes(idtype, fname, checkExisting)
+ def updateAllTypeHashes(
+ self, idtypes, checkExisting=False, ignoreMissingFiles=True
+ ):
+ """Regenerate all hashes for all files from a list of types"""
+ for idtype in idtypes:
+ self.updateAllFileHashes(
+ ftype=idtype, fnames=self.fhashdict[idtype],
checkExisting=checkExisting
+ )
def updateAllHashes(self, checkExisting=False, ignoreMissingFiles=True):
"""Regenerate all hashes for all files in this Manifest."""
- for idtype in MANIFEST2_IDENTIFIERS:
- self.updateTypeHashes(
- idtype,
- checkExisting=checkExisting,
- ignoreMissingFiles=ignoreMissingFiles,
- )
+ self.updateTypeHashes(
+ idtypes=MANIFEST2_IDENTIFIERS,
+ checkExisting=checkExisting,
+ ignoreMissingFiles=ignoreMissingFiles,
+ )
def updateCpvHashes(self, cpv, ignoreMissingFiles=True):
"""Regenerate all hashes associated to the given cpv (includes all AUX
and MISC
files)."""
- self.updateTypeHashes("AUX", ignoreMissingFiles=ignoreMissingFiles)
- self.updateTypeHashes("MISC", ignoreMissingFiles=ignoreMissingFiles)
- ebuildname = "%s.ebuild" % self._catsplit(cpv)[1]
- self.updateFileHashes(
- "EBUILD", ebuildname, ignoreMissingFiles=ignoreMissingFiles
+ self.updateAllTypeHashes(
+ idtypes=("AUX", "MISC"),
+ ignoreMissingFiles=ignoreMissingFiles,
+ )
+ self.updateAllFileHashes(
+ ftype="EBUILD",
+ fnames=(f"{self._catsplit(cpv)[1]}.ebuild",),
+ ignoreMissingFiles=ignoreMissingFiles,
+ )
+ self.updateAllFileHashes(
+ ftype="DIST",
+ fnames=self._getCpvDistfiles(cpv),
+ ignoreMissingFiles=ignoreMissingFiles,
)
- for f in self._getCpvDistfiles(cpv):
- self.updateFileHashes("DIST", f,
ignoreMissingFiles=ignoreMissingFiles)
def updateHashesGuessType(self, fname, *args, **kwargs):
"""Regenerate hashes for the given file (guesses the type and then
calls updateFileHashes)."""
mytype = self.guessType(fname)
- if mytype == "AUX":
- fname = fname[len("files" + os.sep) :]
- elif mytype is None:
+ if mytype is None:
return
+ elif mytype == "AUX":
+ fname = fname[len(f"files{os.sep}") :]
myrealtype = self.findFile(fname)
if myrealtype is not None:
mytype = myrealtype
- return self.updateFileHashes(mytype, fname, *args, **kwargs)
+ return self.updateAllFileHashes(ftype=mytype, fnames=(fname,), *args,
**kwargs)
def getFileData(self, ftype, fname, key):
"""Return the value of a specific (type,filename,key) triple, mainly
useful