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