From: Zac Medico Date: Tue, 1 Apr 2008 00:36:52 +0000 (-0000) Subject: Bug #215308 - Cache the paths of known bad manifests to ensure that the X-Git-Tag: v2.1.5~268 X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=96a24368cf878724aa40139ac78a3164d03e8be9;p=portage.git Bug #215308 - Cache the paths of known bad manifests to ensure that the same broken manifest is never checked twice. (trunk r9658) svn path=/main/branches/2.1.2/; revision=9659 --- diff --git a/pym/portage.py b/pym/portage.py index 1b00a91fd..7b7ffb349 100644 --- a/pym/portage.py +++ b/pym/portage.py @@ -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