* Optimize config.setcpv() to return early if IUSE has not changed since
authorZac Medico <zmedico@gentoo.org>
Sat, 12 Apr 2008 19:40:28 +0000 (19:40 -0000)
committerZac Medico <zmedico@gentoo.org>
Sat, 12 Apr 2008 19:40:28 +0000 (19:40 -0000)
  the previous setcpv() call.

* Add EBUILD_PHASE to the blacklisted variables list.

(trunk r9854)

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

pym/portage.py

index b7c1db52b5392fcd2032a8ded147f1b76068958f..b4c200bf5e3cbe1d3421a0123cfd275f56efa967 100644 (file)
@@ -1451,7 +1451,8 @@ class config:
                        self.lookuplist.reverse()
 
                        # Blacklist vars that could interfere with portage internals.
-                       for blacklisted in "CATEGORY", "PKGUSE", "PORTAGE_CONFIGROOT", \
+                       for blacklisted in "CATEGORY", "EBUILD_PHASE", \
+                               "PKGUSE", "PORTAGE_CONFIGROOT", \
                                "PORTAGE_IUSE", "PORTAGE_USE", "ROOT":
                                for cfg in self.lookuplist:
                                        cfg.pop(blacklisted, None)
@@ -2003,6 +2004,7 @@ class config:
                        has_changed = True
                self.configdict["pkg"]["PKGUSE"] = self.puse[:] # For saving to PUSE file
                self.configdict["pkg"]["USE"]    = self.puse[:] # this gets appended to USE
+               previous_iuse = self.configdict["pkg"].get("IUSE")
                self.configdict["pkg"]["IUSE"] = iuse
 
                # Always set known good values for these variables, since
@@ -2014,6 +2016,12 @@ class config:
                if has_changed:
                        self.reset(keeping_pkg=1,use_cache=use_cache)
 
+               # If this is not an ebuild phase and reset() has not been called,
+               # it's safe to return early here if IUSE has not changed.
+               if not (has_changed or ebuild_phase) and \
+                       previous_iuse == iuse:
+                       return
+
                # Filter out USE flags that aren't part of IUSE. This has to
                # be done for every setcpv() call since practically every
                # package has different IUSE. Some flags are considered to