Don't repeatedly invoke the depend phase for ebuilds that are already known to be...
authorZac Medico <zmedico@gentoo.org>
Fri, 1 Jun 2007 15:44:53 +0000 (15:44 -0000)
committerZac Medico <zmedico@gentoo.org>
Fri, 1 Jun 2007 15:44:53 +0000 (15:44 -0000)
svn path=/main/trunk/; revision=6707

pym/portage/dbapi/porttree.py

index 5bf1e30a64f2d9ea8f7a44992e2eff331ac34ee9..5488251e648907d1615023c9cd02cf6c00c3eaf8 100644 (file)
@@ -111,6 +111,7 @@ class portdbapi(dbapi):
                # Selectively cache metadata in order to optimize dep matching.
                self._aux_cache_keys = set(["EAPI", "KEYWORDS", "LICENSE", "SLOT"])
                self._aux_cache = {}
+               self._broken_ebuilds = set()
 
        def _init_cache_dirs(self):
                """Create /var/cache/edb/dep and adjust permissions for the portage
@@ -301,6 +302,8 @@ class portdbapi(dbapi):
                writemsg("auxdb is valid: "+str(not doregen)+" "+str(pkg)+"\n", 2)
 
                if doregen:
+                       if myebuild in self._broken_ebuilds:
+                               raise KeyError(mycpv)
                        writemsg("doregen: %s %s\n" % (doregen, mycpv), 2)
                        writemsg("Generating cache entry(0) for: "+str(myebuild)+"\n", 1)
 
@@ -310,6 +313,7 @@ class portdbapi(dbapi):
                                self.doebuild_settings["ROOT"], self.doebuild_settings,
                                dbkey=mydata, tree="porttree", mydbapi=self)
                        if myret != os.EX_OK:
+                               self._broken_ebuilds.add(myebuild)
                                raise KeyError(mycpv)
 
                        if "EAPI" not in mydata or not mydata["EAPI"].strip():