diff options
Diffstat (limited to 'pym/portage/package/ebuild/_parallel_manifest/ManifestScheduler.py')
-rw-r--r-- | pym/portage/package/ebuild/_parallel_manifest/ManifestScheduler.py | 17 |
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 |