Bug #198398 - Enable Manifest generation when there are no hash
authorZac Medico <zmedico@gentoo.org>
Sun, 18 Nov 2007 02:50:49 +0000 (02:50 -0000)
committerZac Medico <zmedico@gentoo.org>
Sun, 18 Nov 2007 02:50:49 +0000 (02:50 -0000)
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).

svn path=/main/trunk/; revision=8521

pym/portage/const.py
pym/portage/manifest.py

index de17634b499b9de7bd519bce65f3f143cb7bc3bc..733029fa46e4a988cf709fba98ad02b8be208416 100644 (file)
@@ -62,6 +62,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"]
index 93182f7648c544183192fa99bc8b954d1cc95c76..82ca37efbe75d344e6bdee8c235cc996511b190f 100644 (file)
@@ -107,11 +107,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 = 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
@@ -327,11 +332,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: