Cache IUSE in bindbapi to optimize --newuse calculations.
authorZac Medico <zmedico@gentoo.org>
Wed, 10 Oct 2007 06:33:28 +0000 (06:33 -0000)
committerZac Medico <zmedico@gentoo.org>
Wed, 10 Oct 2007 06:33:28 +0000 (06:33 -0000)
Also, fix filtering code for reading/writing USE and IUSE
from/to the metadata index.

svn path=/main/trunk/; revision=8036

pym/portage/dbapi/bintree.py
pym/portage/getbinpkg.py

index c2218cd0978487820284941c0db26b4413a8d205..e62bfee1525360e5077f2854afb534a74b12c52c 100644 (file)
@@ -26,7 +26,7 @@ class bindbapi(fakedbapi):
                self.cpdict={}
                # Selectively cache metadata in order to optimize dep matching.
                self._aux_cache_keys = set(
-                       ["CHOST", "EAPI", "KEYWORDS", "LICENSE", "SLOT", "USE"])
+                       ["CHOST", "EAPI", "IUSE", "KEYWORDS", "LICENSE", "SLOT", "USE"])
                self._aux_cache = {}
 
        def match(self, *pargs, **kwargs):
@@ -502,6 +502,12 @@ class binarytree(object):
                                        d.update(izip(aux_keys,
                                                self.dbapi.aux_get(mycpv, aux_keys)))
 
+                                       use = d["USE"].split()
+                                       iuse = set(d["IUSE"].split())
+                                       use = [f for f in use if f in iuse]
+                                       use.sort()
+                                       d["USE"] = " ".join(use)
+
                                        # record location if it's non-default
                                        if mypath != mycpv + ".tbz2":
                                                d["PATH"] = mypath
index 977693c6defe675a7ce12845656903ef14ec54fd..61042fde7c9b2258abd43a1515debd2efad24a77 100644 (file)
@@ -686,7 +686,9 @@ class PackageIndex(object):
                        if not mycpv:
                                continue
                        d.setdefault("EAPI", "0")
+                       d.setdefault("IUSE", "")
                        d.setdefault("SLOT", "0")
+                       d.setdefault("USE", "")
                        if header_chost:
                                d.setdefault("CHOST", header_chost)
                        self.packages[mycpv] = d
@@ -707,6 +709,8 @@ class PackageIndex(object):
                                del metadata["CHOST"]
                        if metadata.get("EAPI") == "0":
                                del metadata["EAPI"]
+                       if metadata.get("IUSE") == "":
+                               del metadata["IUSE"]
                        if metadata.get("SLOT") == "0":
                                del metadata["SLOT"]
                        if metadata.get("USE") == "":