summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2011-09-24 13:58:16 -0700
committerZac Medico <zmedico@gentoo.org>2011-09-24 13:58:16 -0700
commit75907929be736e2d4cf088d8d9861f2666e59557 (patch)
treeef83dad5a0c00691596f2ecef7b695e5dcbe337f
parent5e587e1db10e38f003462f8171bd4d838cc095be (diff)
downloadportage-75907929be736e2d4cf088d8d9861f2666e59557.tar.gz
portage-75907929be736e2d4cf088d8d9861f2666e59557.tar.bz2
portage-75907929be736e2d4cf088d8d9861f2666e59557.zip
portdbapi.xmatch: optimize minimum-visible
Also, make repoman cache IUSE, since that's required for _match_use to work effciently. This will eliminate lots of redundant aux_get calls for repoman, triggered by USE deps.
-rwxr-xr-xbin/repoman2
-rw-r--r--pym/portage/dbapi/porttree.py14
2 files changed, 5 insertions, 11 deletions
diff --git a/bin/repoman b/bin/repoman
index 85c9c1785..184c5ef2c 100755
--- a/bin/repoman
+++ b/bin/repoman
@@ -627,7 +627,7 @@ root_config = RootConfig(repoman_settings, trees[root], None)
# We really only need to cache the metadata that's necessary for visibility
# filtering. Anything else can be discarded to reduce memory consumption.
portdb._aux_cache_keys.clear()
-portdb._aux_cache_keys.update(["EAPI", "KEYWORDS", "SLOT"])
+portdb._aux_cache_keys.update(["EAPI", "IUSE", "KEYWORDS", "SLOT"])
reposplit = myreporoot.split(os.path.sep)
repolevel = len(reposplit)
diff --git a/pym/portage/dbapi/porttree.py b/pym/portage/dbapi/porttree.py
index 42e5ca168..782cecccc 100644
--- a/pym/portage/dbapi/porttree.py
+++ b/pym/portage/dbapi/porttree.py
@@ -957,16 +957,10 @@ class portdbapi(dbapi):
mydep.slot != metadata["SLOT"]:
continue
- if mydep.use is not None:
- mydep_with_repo = mydep
- if repo is not None and mydep.repo is None:
- mydep_with_repo = mydep.with_repo(repo)
- has_iuse = False
- for has_iuse in self._iter_match_use(
- mydep_with_repo, [cpv]):
- break
- if has_iuse is False:
- continue
+ if mydep.unevaluated_atom.use is not None and \
+ not self._match_use(mydep, cpv, metadata):
+ continue
+
myval = cpv
break
if myval: