summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2013-01-06 12:50:28 -0800
committerZac Medico <zmedico@gentoo.org>2013-01-06 12:50:28 -0800
commit8192978cc3a38959a94a63f40f1e4585beb674e2 (patch)
tree97940dbfce7330d5c673e84479f7b8b55dc7f2ab
parent3b3405694dd3cdaaf7587db5fdd657bc93b73f41 (diff)
downloadportage-8192978cc3a38959a94a63f40f1e4585beb674e2.tar.gz
portage-8192978cc3a38959a94a63f40f1e4585beb674e2.tar.bz2
portage-8192978cc3a38959a94a63f40f1e4585beb674e2.zip
MetadataRegen: call cp_all for each category
List categories individually, in order to start yielding quicker, and in order to reduce latency in case of a signal interrupt.
-rw-r--r--pym/_emerge/MetadataRegen.py20
-rw-r--r--pym/portage/package/ebuild/_parallel_manifest/ManifestScheduler.py17
2 files changed, 21 insertions, 16 deletions
diff --git a/pym/_emerge/MetadataRegen.py b/pym/_emerge/MetadataRegen.py
index 8dc7ebeee..213fc3df9 100644
--- a/pym/_emerge/MetadataRegen.py
+++ b/pym/_emerge/MetadataRegen.py
@@ -33,15 +33,16 @@ class MetadataRegen(AsyncScheduler):
return next(self._process_iter)
def _iter_every_cp(self):
- portage.writemsg_stdout("Listing available packages...\n")
- every_cp = self._portdb.cp_all()
- portage.writemsg_stdout("Regenerating cache entries...\n")
- 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_metadata_processes(self):
portdb = self._portdb
@@ -49,6 +50,7 @@ class MetadataRegen(AsyncScheduler):
cp_set = self._cp_set
consumer = self._consumer
+ portage.writemsg_stdout("Regenerating cache entries...\n")
for cp in self._cp_iter:
if self._terminated.is_set():
break
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