Bug #215308 - Cache the paths of known bad manifests to ensure that the
authorZac Medico <zmedico@gentoo.org>
Tue, 1 Apr 2008 00:36:52 +0000 (00:36 -0000)
committerZac Medico <zmedico@gentoo.org>
Tue, 1 Apr 2008 00:36:52 +0000 (00:36 -0000)
same broken manifest is never checked twice. (trunk r9658)

svn path=/main/branches/2.1.2/; revision=9659

pym/portage.py

index 1b00a91fdc28e62e2e948044d802bfdc1ea80801..7b7ffb349bd196d0dc733541e42b6efdcd2bf765 100644 (file)
@@ -4280,6 +4280,7 @@ def _doebuild_exit_status_unlink(exit_status_file):
 
 _doebuild_manifest_exempt_depend = 0
 _doebuild_manifest_checked = None
+_doebuild_broken_manifests = set()
 
 def doebuild(myebuild, mydo, myroot, mysettings, debug=0, listonly=0,
        fetchonly=0, cleanup=0, dbkey=None, use_cache=1, fetchall=0, tree=None,
@@ -4388,13 +4389,16 @@ def doebuild(myebuild, mydo, myroot, mysettings, debug=0, listonly=0,
                # Always verify the ebuild checksums before executing it.
                pkgdir = os.path.dirname(myebuild)
                manifest_path = os.path.join(pkgdir, "Manifest")
-               global _doebuild_manifest_checked
+               global _doebuild_manifest_checked, _doebuild_broken_manifests
+               if manifest_path in _doebuild_broken_manifests:
+                       return 1
                # Avoid checking the same Manifest several times in a row during a
                # regen with an empty cache.
                if _doebuild_manifest_checked != manifest_path:
                        if not os.path.exists(manifest_path):
                                writemsg("!!! Manifest file not found: '%s'\n" % manifest_path,
                                        noiselevel=-1)
+                               _doebuild_broken_manifests.add(manifest_path)
                                return 1
                        mf = Manifest(pkgdir, mysettings["DISTDIR"])
                        try:
@@ -4402,6 +4406,7 @@ def doebuild(myebuild, mydo, myroot, mysettings, debug=0, listonly=0,
                        except portage_exception.FileNotFound, e:
                                writemsg("!!! A file listed in the Manifest " + \
                                        "could not be found: %s\n" % str(e), noiselevel=-1)
+                               _doebuild_broken_manifests.add(manifest_path)
                                return 1
                        except portage_exception.DigestException, e:
                                writemsg("!!! Digest verification failed:\n", noiselevel=-1)
@@ -4409,6 +4414,7 @@ def doebuild(myebuild, mydo, myroot, mysettings, debug=0, listonly=0,
                                writemsg("!!! Reason: %s\n" % e.value[1], noiselevel=-1)
                                writemsg("!!! Got: %s\n" % e.value[2], noiselevel=-1)
                                writemsg("!!! Expected: %s\n" % e.value[3], noiselevel=-1)
+                               _doebuild_broken_manifests.add(manifest_path)
                                return 1
                        # Make sure that all of the ebuilds are actually listed in the
                        # Manifest.
@@ -4417,6 +4423,7 @@ def doebuild(myebuild, mydo, myroot, mysettings, debug=0, listonly=0,
                                        writemsg("!!! A file is not listed in the " + \
                                        "Manifest: '%s'\n" % os.path.join(pkgdir, f),
                                        noiselevel=-1)
+                                       _doebuild_broken_manifests.add(manifest_path)
                                        return 1
                        _doebuild_manifest_checked = manifest_path