From 9915319b594ce940893a7449fec755b24ea73d50 Mon Sep 17 00:00:00 2001 From: Zac Medico Date: Fri, 26 Oct 2007 18:06:07 +0000 Subject: Optimize repoman to share portdbapi.cp_list() results between all profiles since those results never change. The cached results also propagate to the xmatch match-all when appropriate (old-style virtuals are excluded since they are profile dependent). svn path=/main/trunk/; revision=8313 --- pym/portage/dbapi/porttree.py | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) (limited to 'pym') 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 -- cgit v1.2.3-1-g7c22