diff options
author | Zac Medico <zmedico@gentoo.org> | 2007-11-21 03:55:53 +0000 |
---|---|---|
committer | Zac Medico <zmedico@gentoo.org> | 2007-11-21 03:55:53 +0000 |
commit | 9840d8125688eced5527d4d61c0cbe1793641f25 (patch) | |
tree | 9d49aa7e8d8cb0e10421387a9249670e23856c41 | |
parent | 2b1f99725a13622916f3c1d3b6c04d7cae59cd2f (diff) | |
download | portage-9840d8125688eced5527d4d61c0cbe1793641f25.tar.gz portage-9840d8125688eced5527d4d61c0cbe1793641f25.tar.bz2 portage-9840d8125688eced5527d4d61c0cbe1793641f25.zip |
Bug #198398 - Enable Manifest generation when there are no hash
functions available for types such as RMD160. Now it's possible
to generate a Manifest when python-2.5 is built without ssl
support. MANIFEST1_REQUIRED_HASH and MANIFEST2_REQUIRED_HASH
are the only two functions that are strictly required now (MD5
and SHA1). (trunk r8521)
svn path=/main/branches/2.1.2/; revision=8566
-rw-r--r-- | pym/portage_const.py | 2 | ||||
-rw-r--r-- | pym/portage_manifest.py | 20 |
2 files changed, 17 insertions, 5 deletions
diff --git a/pym/portage_const.py b/pym/portage_const.py index c27764e46..42c5dfae6 100644 --- a/pym/portage_const.py +++ b/pym/portage_const.py @@ -60,6 +60,8 @@ EAPI = 1 HASHING_BLOCKSIZE = 32768 MANIFEST1_HASH_FUNCTIONS = ["MD5","SHA256","RMD160"] MANIFEST2_HASH_FUNCTIONS = ["SHA1","SHA256","RMD160"] + +MANIFEST1_REQUIRED_HASH = "MD5" MANIFEST2_REQUIRED_HASH = "SHA1" MANIFEST2_IDENTIFIERS = ["AUX","MISC","DIST","EBUILD"] diff --git a/pym/portage_manifest.py b/pym/portage_manifest.py index 59818adaf..502cc06a1 100644 --- a/pym/portage_manifest.py +++ b/pym/portage_manifest.py @@ -109,11 +109,16 @@ class Manifest(object): a Manifest (not needed for parsing and checking sums).""" self.pkgdir = pkgdir.rstrip(os.sep) + os.sep self.fhashdict = {} - self.hashes = portage_const.MANIFEST2_HASH_FUNCTIONS[:] - self.hashes.append("size") + self.hashes = set() + self.hashes.update(portage_const.MANIFEST2_HASH_FUNCTIONS) if manifest1_compat: - self.hashes.extend(portage_const.MANIFEST1_HASH_FUNCTIONS) - self.hashes = sets.Set(self.hashes) + self.hashes.update(portage_const.MANIFEST1_HASH_FUNCTIONS) + self.hashes.difference_update(hashname for hashname in \ + list(self.hashes) if hashname not in hashfunc_map) + self.hashes.add("size") + if manifest1_compat: + self.hashes.add(portage_const.MANIFEST1_REQUIRED_HASH) + self.hashes.add(portage_const.MANIFEST2_REQUIRED_HASH) for t in portage_const.MANIFEST2_IDENTIFIERS: self.fhashdict[t] = {} self.compat = manifest1_compat @@ -329,11 +334,16 @@ class Manifest(object): if self.compat: cvp_list = self.fetchlist_dict.keys() cvp_list.sort() + manifest1_hashes = set(hashname for hashname in \ + portage_const.MANIFEST1_HASH_FUNCTIONS \ + if hashname in hashfunc_map) + manifest1_hashes.add(portage_const.MANIFEST1_REQUIRED_HASH) + manifest1_hashes.add("size") for cpv in cvp_list: digest_path = os.path.join("files", "digest-%s" % self._catsplit(cpv)[1]) dname = os.path.join(self.pkgdir, digest_path) try: - myhashes = perform_multiple_checksums(dname, portage_const.MANIFEST1_HASH_FUNCTIONS+["size"]) + myhashes = perform_multiple_checksums(dname, manifest1_hashes) myhashkeys = myhashes.keys() myhashkeys.sort() for h in myhashkeys: |