summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xbin/repoman3
-rw-r--r--pym/portage/dbapi/porttree.py23
2 files changed, 19 insertions, 7 deletions
diff --git a/bin/repoman b/bin/repoman
index a57c30052..fec17e138 100755
--- a/bin/repoman
+++ b/bin/repoman
@@ -810,6 +810,8 @@ if isCvs:
dofail = 0
arch_caches={}
arch_xmatch_caches = {}
+shared_xmatch_caches = {"cp-list":{}}
+
for x in scanlist:
#ebuilds and digests added to cvs respectively.
logging.info("checking package %s" % x)
@@ -1430,6 +1432,7 @@ for x in scanlist:
portdb.melt()
portdb.freeze()
xcache = portdb.xcache
+ xcache.update(shared_xmatch_caches)
arch_xmatch_caches[xmatch_cache_key] = xcache
trees["/"]["porttree"].settings = dep_settings
diff --git a/pym/portage/dbapi/porttree.py b/pym/portage/dbapi/porttree.py
index f0cc49ac2..4f9b1cbbe 100644
--- a/pym/portage/dbapi/porttree.py
+++ b/pym/portage/dbapi/porttree.py
@@ -494,10 +494,15 @@ class portdbapi(dbapi):
def cp_list(self, mycp, use_cache=1, mytree=None):
if self.frozen and mytree is None:
- mylist = self.xcache["match-all"].get(mycp)
- # cp_list() doesn't expand old-style virtuals
- if mylist and mylist[0].startswith(mycp):
- return mylist[:]
+ cachelist = self.xcache["cp-list"].get(mycp)
+ if cachelist is not None:
+ # Try to propagate this to the match-all cache here for
+ # repoman since he uses separate match-all caches for each
+ # profile (due to old-style virtuals). Do not propagate
+ # old-style virtuals since cp_list() doesn't expand them.
+ if not (not cachelist and mycp.startswith("virtual/")):
+ self.xcache["match-all"][mycp] = cachelist
+ return cachelist[:]
mysplit = mycp.split("/")
invalid_category = mysplit[0] not in self._categories
d={}
@@ -535,12 +540,16 @@ class portdbapi(dbapi):
cpv = cat + "/" + pn + "-" + ver + "-" + rev
mylist[i] = cpv
if self.frozen and mytree is None:
- if not (not mylist and mycp.startswith("virtual/")):
- self.xcache["match-all"][mycp] = mylist[:]
+ cachelist = mylist[:]
+ self.xcache["cp-list"][mycp] = cachelist
+ # Do not propagate old-style virtuals since
+ # cp_list() doesn't expand them.
+ if not (not cachelist and mycp.startswith("virtual/")):
+ self.xcache["match-all"][mycp] = cachelist
return mylist
def freeze(self):
- for x in "bestmatch-visible", "list-visible", "match-all", \
+ for x in "bestmatch-visible", "cp-list", "list-visible", "match-all", \
"match-visible", "minimum-all", "minimum-visible":
self.xcache[x]={}
self.frozen=1