diff options
author | Zac Medico <zmedico@gentoo.org> | 2018-07-15 22:07:10 -0700 |
---|---|---|
committer | Zac Medico <zmedico@gentoo.org> | 2018-07-15 22:18:51 -0700 |
commit | 84431fe188ed1b3e2e7b52918329bd696d8304b1 (patch) | |
tree | 79c06e388ff70dba9caf836af254867e2bcc181c | |
parent | config: cache profile.bashrc stat results (bug 649806) (diff) | |
download | portage-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.py | 25 |
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 |