Gentoo Archives: gentoo-commits

From: "Zac Medico (zmedico)" <zmedico@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] portage r13433 - main/branches/2.1.6/pym/_emerge
Date: Thu, 30 Apr 2009 06:49:37
Message-Id: E1LzQ5O-0004QL-Ij@stork.gentoo.org
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]: