commit:     84431fe188ed1b3e2e7b52918329bd696d8304b1
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Mon Jul 16 05:07:10 2018 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Mon Jul 16 05:18:51 2018 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=84431fe1

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

 pym/portage/dbapi/porttree.py | 25 +++++++++++++++++++++++--
 1 file 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

Reply via email to