aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2018-07-15 22:07:10 -0700
committerZac Medico <zmedico@gentoo.org>2018-07-15 22:18:51 -0700
commit84431fe188ed1b3e2e7b52918329bd696d8304b1 (patch)
tree79c06e388ff70dba9caf836af254867e2bcc181c
parentconfig: cache profile.bashrc stat results (bug 649806) (diff)
downloadportage-84431fe188ed1b3e2e7b52918329bd696d8304b1.tar.gz
portage-84431fe188ed1b3e2e7b52918329bd696d8304b1.tar.bz2
portage-84431fe188ed1b3e2e7b52918329bd696d8304b1.zip
portdbapi.cp_list: honor porttrees modifications (bug 650814)
Consumers, such as repoman and emirrordist, may modify the porttrees attribute in order to modify the effective set of repositories for all portdbapi operations. Fixes: 27eeeb6e4fc8 ("portdbapi.cp_list: cache repo associations (bug 650814)") Bug: https://bugs.gentoo.org/650814
-rw-r--r--pym/portage/dbapi/porttree.py25
1 files changed, 23 insertions, 2 deletions
diff --git a/pym/portage/dbapi/porttree.py b/pym/portage/dbapi/porttree.py
index 2e271ea76..677452273 100644
--- a/pym/portage/dbapi/porttree.py
+++ b/pym/portage/dbapi/porttree.py
@@ -322,6 +322,26 @@ class portdbapi(dbapi):
self._better_cache = None
self._broken_ebuilds = set()
+ def _set_porttrees(self, porttrees):
+ """
+ Consumers, such as repoman and emirrordist, may modify the porttrees
+ attribute in order to modify the effective set of repositories for
+ all portdbapi operations.
+
+ @param porttrees: list of repo locations, in ascending order by
+ repo priority
+ @type porttrees: list
+ """
+ self._porttrees_repos = portage.OrderedDict((repo.name, repo)
+ for repo in (self.repositories.get_repo_for_location(location)
+ for location in porttrees))
+ self._porttrees = tuple(porttrees)
+
+ def _get_porttrees(self):
+ return self._porttrees
+
+ porttrees = property(_get_porttrees, _set_porttrees)
+
@property
def _event_loop(self):
if portage._internal_caller:
@@ -972,9 +992,10 @@ class portdbapi(dbapi):
repos = [self.repositories.get_repo_for_location(location)
for location in mytree]
elif self._better_cache is None:
- repos = list(self.repositories)
+ repos = self._porttrees_repos.values()
else:
- repos = reversed(self._better_cache[mycp])
+ repos = [repo for repo in reversed(self._better_cache[mycp])
+ if repo.name in self._porttrees_repos]
mylist = []
for repo in repos:
oroot = repo.location