diff options
author | Zac Medico <zmedico@gentoo.org> | 2012-04-20 23:38:17 -0700 |
---|---|---|
committer | Zac Medico <zmedico@gentoo.org> | 2012-04-20 23:45:31 -0700 |
commit | d603f1440c814377fbc1965729fd9b6b008cf76d (patch) | |
tree | 83ba90cc2bb3a37768cc6263fd8db5d39b5b7e4a /pym/_emerge | |
parent | 92a8357ca98d4a42e7747abd2cf4b390381fc6bc (diff) | |
download | portage-d603f1440c814377fbc1965729fd9b6b008cf76d.tar.gz portage-d603f1440c814377fbc1965729fd9b6b008cf76d.tar.bz2 portage-d603f1440c814377fbc1965729fd9b6b008cf76d.zip |
dbapi: account for unevaluated_atom in caches
This will fix bug 412391. This is analogous to the bug fixed in
commit 5438bb29c996d777b6343515995176912a7c137f.
Diffstat (limited to 'pym/_emerge')
-rw-r--r-- | pym/_emerge/PackageVirtualDbapi.py | 16 | ||||
-rw-r--r-- | pym/_emerge/depgraph.py | 5 |
2 files changed, 13 insertions, 8 deletions
diff --git a/pym/_emerge/PackageVirtualDbapi.py b/pym/_emerge/PackageVirtualDbapi.py index a692bb602..a34d21c83 100644 --- a/pym/_emerge/PackageVirtualDbapi.py +++ b/pym/_emerge/PackageVirtualDbapi.py @@ -1,8 +1,9 @@ -# Copyright 1999-2011 Gentoo Foundation +# Copyright 1999-2012 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 import sys from portage.dbapi import dbapi +from portage.dbapi.dep_expand import dep_expand class PackageVirtualDbapi(dbapi): """ @@ -76,18 +77,21 @@ class PackageVirtualDbapi(dbapi): self._match_cache = {} def match(self, origdep, use_cache=1): - result = self._match_cache.get(origdep) + atom = dep_expand(origdep, mydb=self, settings=self.settings) + cache_key = (atom, atom.unevaluated_atom) + result = self._match_cache.get(cache_key) if result is not None: return result[:] - result = dbapi.match(self, origdep, use_cache=use_cache) - self._match_cache[origdep] = result + result = list(self._iter_match(atom, self.cp_list(atom.cp))) + self._match_cache[cache_key] = result return result[:] def cpv_exists(self, cpv, myrepo=None): return cpv in self._cpv_map def cp_list(self, mycp, use_cache=1): - cachelist = self._match_cache.get(mycp) + cache_key = (mycp, mycp) + cachelist = self._match_cache.get(cache_key) # cp_list() doesn't expand old-style virtuals if cachelist and cachelist[0].startswith(mycp): return cachelist[:] @@ -98,7 +102,7 @@ class PackageVirtualDbapi(dbapi): cpv_list = [pkg.cpv for pkg in cpv_list] self._cpv_sort_ascending(cpv_list) if not (not cpv_list and mycp.startswith("virtual/")): - self._match_cache[mycp] = cpv_list + self._match_cache[cache_key] = cpv_list return cpv_list[:] def cp_all(self): diff --git a/pym/_emerge/depgraph.py b/pym/_emerge/depgraph.py index e77c0e82f..e6245598f 100644 --- a/pym/_emerge/depgraph.py +++ b/pym/_emerge/depgraph.py @@ -6753,7 +6753,8 @@ class _dep_check_composite_db(dbapi): return ret def match(self, atom): - ret = self._match_cache.get(atom) + cache_key = (atom, atom.unevaluated_atom) + ret = self._match_cache.get(cache_key) if ret is not None: return ret[:] @@ -6801,7 +6802,7 @@ class _dep_check_composite_db(dbapi): if len(ret) > 1: self._cpv_sort_ascending(ret) - self._match_cache[atom] = ret + self._match_cache[cache_key] = ret return ret[:] def _visible(self, pkg): |