1 |
Author: zmedico |
2 |
Date: 2009-03-30 22:34:00 +0000 (Mon, 30 Mar 2009) |
3 |
New Revision: 13254 |
4 |
|
5 |
Modified: |
6 |
main/trunk/pym/_emerge/__init__.py |
7 |
Log: |
8 |
Add a cp_iter keyword argument to the MetadataRegen constructor, which can be |
9 |
used to do a regen for a subset of packages. TODO: Add support to cleanse |
10 |
cache for the specific cp values that are processed. |
11 |
|
12 |
|
13 |
Modified: main/trunk/pym/_emerge/__init__.py |
14 |
=================================================================== |
15 |
--- main/trunk/pym/_emerge/__init__.py 2009-03-30 21:54:39 UTC (rev 13253) |
16 |
+++ main/trunk/pym/_emerge/__init__.py 2009-03-30 22:34:00 UTC (rev 13254) |
17 |
@@ -11573,9 +11573,18 @@ |
18 |
|
19 |
class MetadataRegen(PollScheduler): |
20 |
|
21 |
- def __init__(self, portdb, max_jobs=None, max_load=None): |
22 |
+ def __init__(self, portdb, cp_iter=None, max_jobs=None, max_load=None): |
23 |
PollScheduler.__init__(self) |
24 |
self._portdb = portdb |
25 |
+ self._global_cleanse = False |
26 |
+ if cp_iter is None: |
27 |
+ cp_iter = self._iter_every_cp() |
28 |
+ # We can globally cleanse stale cache only if we |
29 |
+ # iterate over every single cp. TODO: Add support |
30 |
+ # to cleanse cache for the specific cp values that |
31 |
+ # are processed. |
32 |
+ self._global_cleanse = True |
33 |
+ self._cp_iter = cp_iter |
34 |
|
35 |
if max_jobs is None: |
36 |
max_jobs = 1 |
37 |
@@ -11592,14 +11601,20 @@ |
38 |
self.returncode = os.EX_OK |
39 |
self._error_count = 0 |
40 |
|
41 |
+ def _iter_every_cp(self): |
42 |
+ every_cp = self._portdb.cp_all() |
43 |
+ every_cp.sort(reverse=True) |
44 |
+ try: |
45 |
+ while True: |
46 |
+ yield every_cp.pop() |
47 |
+ except IndexError: |
48 |
+ pass |
49 |
+ |
50 |
def _iter_metadata_processes(self): |
51 |
portdb = self._portdb |
52 |
valid_pkgs = self._valid_pkgs |
53 |
- every_cp = portdb.cp_all() |
54 |
- every_cp.sort(reverse=True) |
55 |
|
56 |
- while every_cp: |
57 |
- cp = every_cp.pop() |
58 |
+ for cp in self._cp_iter: |
59 |
portage.writemsg_stdout("Processing %s\n" % cp) |
60 |
cpv_list = portdb.cp_list(cp) |
61 |
for cpv in cpv_list: |
62 |
@@ -11617,15 +11632,17 @@ |
63 |
from portage.cache.cache_errors import CacheError |
64 |
dead_nodes = {} |
65 |
|
66 |
- for mytree in portdb.porttrees: |
67 |
- try: |
68 |
- dead_nodes[mytree] = set(portdb.auxdb[mytree].iterkeys()) |
69 |
- except CacheError, e: |
70 |
- portage.writemsg("Error listing cache entries for " + \ |
71 |
- "'%s': %s, continuing...\n" % (mytree, e), noiselevel=-1) |
72 |
- del e |
73 |
- dead_nodes = None |
74 |
- break |
75 |
+ if self._global_cleanse: |
76 |
+ for mytree in portdb.porttrees: |
77 |
+ try: |
78 |
+ dead_nodes[mytree] = set(portdb.auxdb[mytree].iterkeys()) |
79 |
+ except CacheError, e: |
80 |
+ portage.writemsg("Error listing cache entries for " + \ |
81 |
+ "'%s': %s, continuing...\n" % (mytree, e), |
82 |
+ noiselevel=-1) |
83 |
+ del e |
84 |
+ dead_nodes = None |
85 |
+ break |
86 |
|
87 |
while self._schedule(): |
88 |
self._poll_loop() |
89 |
@@ -11633,7 +11650,7 @@ |
90 |
while self._jobs: |
91 |
self._poll_loop() |
92 |
|
93 |
- if dead_nodes: |
94 |
+ if self._global_cleanse and dead_nodes: |
95 |
for y in self._valid_pkgs: |
96 |
for mytree in portdb.porttrees: |
97 |
if portdb.findname2(y, mytree=mytree)[0]: |