summaryrefslogtreecommitdiffstats
path: root/pym/portage/package/ebuild/_parallel_manifest/ManifestScheduler.py
diff options
context:
space:
mode:
Diffstat (limited to 'pym/portage/package/ebuild/_parallel_manifest/ManifestScheduler.py')
-rw-r--r--pym/portage/package/ebuild/_parallel_manifest/ManifestScheduler.py17
1 files changed, 10 insertions, 7 deletions
diff --git a/pym/portage/package/ebuild/_parallel_manifest/ManifestScheduler.py b/pym/portage/package/ebuild/_parallel_manifest/ManifestScheduler.py
index 50c9c7404..8839989a1 100644
--- a/pym/portage/package/ebuild/_parallel_manifest/ManifestScheduler.py
+++ b/pym/portage/package/ebuild/_parallel_manifest/ManifestScheduler.py
@@ -30,13 +30,16 @@ class ManifestScheduler(AsyncScheduler):
return next(self._task_iter)
def _iter_every_cp(self):
- every_cp = self._portdb.cp_all()
- every_cp.reverse()
- try:
- while not self._terminated_tasks:
- yield every_cp.pop()
- except IndexError:
- pass
+ # List categories individually, in order to start yielding quicker,
+ # and in order to reduce latency in case of a signal interrupt.
+ categories = sorted(self._portdb.settings.categories, reverse=True)
+ cp_all = self._portdb.cp_all
+
+ while categories:
+ category = categories.pop()
+ category_cps = cp_all(categories=(category,), reverse=True)
+ while category_cps:
+ yield category_cps.pop()
def _iter_tasks(self):
portdb = self._portdb