Fix digestcheck logic for bug #129839.
authorZac Medico <zmedico@gentoo.org>
Thu, 13 Apr 2006 21:59:18 +0000 (21:59 -0000)
committerZac Medico <zmedico@gentoo.org>
Thu, 13 Apr 2006 21:59:18 +0000 (21:59 -0000)
svn path=/main/trunk/; revision=3142

pym/portage.py
pym/portage_manifest.py

index 413bd4cd95dbb0302f5f3f9999ccc25f0593652b..4f8c9423c17bd6dcc49a5fe071ab6819f98b1653 100644 (file)
@@ -2163,33 +2163,31 @@ def digestcheck(myfiles, mysettings, strict=0, justmanifest=0):
        """Verifies checksums.  Assumes all files have been downloaded.
        DEPRECATED: this is now only a compability wrapper for 
                    portage_manifest.Manifest()."""
-       
+       if not strict:
+               return 1
        pkgdir = mysettings["O"]
+       manifest_path = os.path.join(pkgdir, "Manifest")
+       if not os.path.exists(manifest_path):
+               writemsg("!!! Manifest file not found: '%s'\n" % manifest_path)
+               if strict:
+                       return 0
        mf = Manifest(pkgdir, FetchlistDict(pkgdir, mysettings), mysettings["DISTDIR"])
        try:
-               if strict:
-                       print ">>> checking ebuild checksums",
-                       mf.checkTypeHashes("EBUILD")
-                       print ":-)"
-                       print ">>> checking auxfile checksums",
-                       mf.checkTypeHashes("AUX")
-                       print ":-)"
-                       print ">>> checking miscfile checksums",
-                       mf.checkTypeHashes("MISC", ignoreMissingFiles=True)
-                       print ":-)"
+               writemsg_stdout(">>> checking ebuild checksums\n")
+               mf.checkTypeHashes("EBUILD")
+               writemsg_stdout(">>> checking auxfile checksums\n")
+               mf.checkTypeHashes("AUX")
+               writemsg_stdout(">>> checking miscfile checksums\n")
+               mf.checkTypeHashes("MISC", ignoreMissingFiles=True)
+               writemsg_stdout(">>> checking distfiles checksums\n")
                for f in myfiles:
-                       if f.startswith("files/"):
-                               f = f[5:]
-                       print ">>> checking %s checksums" % f,
-                       mf.checkFileHashes(mf.findFile(f), f)   
-                       print ":-)"
+                       mf.checkFileHashes(mf.findFile(f), f)
        except portage_exception.DigestException, e:
-               print e.value
-               print red("!!! ")+"Digest verification failed:"
-               print red("!!! ")+"    "+e.value[0]
-               print red("!!! ")+"Reason: "+e.value[1]
-               print red("!!! ")+"Got: "+str(e.value[2])
-               print red("!!! ")+"Expected: "+str(e.value[3])
+               writemsg("!!! Digest verification failed:\n")
+               writemsg("!!! %s\n" % e.value[0])
+               writemsg("!!! Reason: %s\n" % e.value[1])
+               writemsg("!!! Got: %s\n" % e.value[2])
+               writemsg("!!! Expected: %s\n" % e.value[3])
                return 0
        return 1
 
index 491074da9a5af38d2fbadc453e745a46a32e1b2d..50d061ecc2dead1b349174a5fe08a3a4dce3c89c 100644 (file)
@@ -86,11 +86,16 @@ class Manifest(object):
                
        def _read(self):
                """ Parse Manifest file for this instance """
-               if not os.path.exists(self.getFullname()):
-                       return
-               fd = open(self.getFullname(), "r")
-               mylines = fd.readlines()
-               fd.close()
+               mylines = []
+               try:
+                       fd = open(self.getFullname(), "r")
+                       mylines.extend(fd.readlines())
+                       fd.close()
+               except (OSError, IOError), e:
+                       if e.errno == errno.ENOENT:
+                               pass
+                       else:
+                               raise
                mylines.extend(self._readDigests().split("\n"))
                self._parseDigests(mylines, myhashdict=self.fhashdict)