1 |
Author: zmedico |
2 |
Date: 2009-04-30 06:49:50 +0000 (Thu, 30 Apr 2009) |
3 |
New Revision: 13434 |
4 |
|
5 |
Modified: |
6 |
main/branches/2.1.6/pym/_emerge/__init__.py |
7 |
main/branches/2.1.6/pym/portage/__init__.py |
8 |
Log: |
9 |
Add support in MetadataRegen for cleansing stale cache when only a subset |
10 |
of packages are processed. (trunk r13255) |
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:33 UTC (rev 13433) |
15 |
+++ main/branches/2.1.6/pym/_emerge/__init__.py 2009-04-30 06:49:50 UTC (rev 13434) |
16 |
@@ -11564,9 +11564,7 @@ |
17 |
if cp_iter is None: |
18 |
cp_iter = self._iter_every_cp() |
19 |
# We can globally cleanse stale cache only if we |
20 |
- # iterate over every single cp. TODO: Add support |
21 |
- # to cleanse cache for the specific cp values that |
22 |
- # are processed. |
23 |
+ # iterate over every single cp. |
24 |
self._global_cleanse = True |
25 |
self._cp_iter = cp_iter |
26 |
|
27 |
@@ -11581,6 +11579,7 @@ |
28 |
unregister=self._unregister) |
29 |
|
30 |
self._valid_pkgs = set() |
31 |
+ self._cp_set = set() |
32 |
self._process_iter = self._iter_metadata_processes() |
33 |
self.returncode = os.EX_OK |
34 |
self._error_count = 0 |
35 |
@@ -11597,8 +11596,10 @@ |
36 |
def _iter_metadata_processes(self): |
37 |
portdb = self._portdb |
38 |
valid_pkgs = self._valid_pkgs |
39 |
+ cp_set = self._cp_set |
40 |
|
41 |
for cp in self._cp_iter: |
42 |
+ cp_set.add(cp) |
43 |
portage.writemsg_stdout("Processing %s\n" % cp) |
44 |
cpv_list = portdb.cp_list(cp) |
45 |
for cpv in cpv_list: |
46 |
@@ -11616,6 +11617,12 @@ |
47 |
from portage.cache.cache_errors import CacheError |
48 |
dead_nodes = {} |
49 |
|
50 |
+ while self._schedule(): |
51 |
+ self._poll_loop() |
52 |
+ |
53 |
+ while self._jobs: |
54 |
+ self._poll_loop() |
55 |
+ |
56 |
if self._global_cleanse: |
57 |
for mytree in portdb.porttrees: |
58 |
try: |
59 |
@@ -11627,14 +11634,23 @@ |
60 |
del e |
61 |
dead_nodes = None |
62 |
break |
63 |
+ else: |
64 |
+ cp_set = self._cp_set |
65 |
+ cpv_getkey = portage.cpv_getkey |
66 |
+ for mytree in portdb.porttrees: |
67 |
+ try: |
68 |
+ dead_nodes[mytree] = set(cpv for cpv in \ |
69 |
+ portdb.auxdb[mytree].iterkeys() \ |
70 |
+ if cpv_getkey(cpv) in cp_set) |
71 |
+ except CacheError, e: |
72 |
+ portage.writemsg("Error listing cache entries for " + \ |
73 |
+ "'%s': %s, continuing...\n" % (mytree, e), |
74 |
+ noiselevel=-1) |
75 |
+ del e |
76 |
+ dead_nodes = None |
77 |
+ break |
78 |
|
79 |
- while self._schedule(): |
80 |
- self._poll_loop() |
81 |
- |
82 |
- while self._jobs: |
83 |
- self._poll_loop() |
84 |
- |
85 |
- if self._global_cleanse and dead_nodes: |
86 |
+ if dead_nodes: |
87 |
for y in self._valid_pkgs: |
88 |
for mytree in portdb.porttrees: |
89 |
if portdb.findname2(y, mytree=mytree)[0]: |
90 |
|
91 |
Modified: main/branches/2.1.6/pym/portage/__init__.py |
92 |
=================================================================== |
93 |
--- main/branches/2.1.6/pym/portage/__init__.py 2009-04-30 06:49:33 UTC (rev 13433) |
94 |
+++ main/branches/2.1.6/pym/portage/__init__.py 2009-04-30 06:49:50 UTC (rev 13434) |
95 |
@@ -7167,6 +7167,8 @@ |
96 |
def cpv_getkey(mycpv): |
97 |
myslash=mycpv.split("/") |
98 |
mysplit=pkgsplit(myslash[-1]) |
99 |
+ if mysplit is None: |
100 |
+ return None |
101 |
mylen=len(myslash) |
102 |
if mylen==2: |
103 |
return myslash[0]+"/"+mysplit[0] |