1 |
Author: zmedico |
2 |
Date: 2008-05-02 21:49:26 +0000 (Fri, 02 May 2008) |
3 |
New Revision: 10109 |
4 |
|
5 |
Modified: |
6 |
main/branches/2.1.2/bin/emerge |
7 |
Log: |
8 |
Move the blocker cache validation into depgraph.validate_blockers(). |
9 |
(trunk r10108) |
10 |
|
11 |
|
12 |
Modified: main/branches/2.1.2/bin/emerge |
13 |
=================================================================== |
14 |
--- main/branches/2.1.2/bin/emerge 2008-05-02 21:47:50 UTC (rev 10108) |
15 |
+++ main/branches/2.1.2/bin/emerge 2008-05-02 21:49:26 UTC (rev 10109) |
16 |
@@ -1531,26 +1531,6 @@ |
17 |
isinstance(self._cache_data, dict) and \ |
18 |
self._cache_data.get("version") == self._cache_version and \ |
19 |
isinstance(self._cache_data.get("blockers"), dict) |
20 |
- if cache_valid: |
21 |
- invalid_cache = set() |
22 |
- for cpv, value \ |
23 |
- in self._cache_data["blockers"].iteritems(): |
24 |
- if not (isinstance(value, tuple) and len(value) == 2): |
25 |
- invalid_cache.add(cpv) |
26 |
- continue |
27 |
- counter, atoms = value |
28 |
- try: |
29 |
- if counter != long(self._vardb.aux_get(cpv, ["COUNTER"])[0]): |
30 |
- invalid_cache.add(cpv) |
31 |
- continue |
32 |
- except KeyError: |
33 |
- # The package is no longer installed. |
34 |
- invalid_cache.add(cpv) |
35 |
- continue |
36 |
- for cpv in invalid_cache: |
37 |
- del self._cache_data["blockers"][cpv] |
38 |
- if not self._cache_data["blockers"]: |
39 |
- cache_valid = False |
40 |
if not cache_valid: |
41 |
self._cache_data = {"version":self._cache_version} |
42 |
self._cache_data["blockers"] = {} |
43 |
@@ -1599,6 +1579,13 @@ |
44 |
(blocker_data.counter, blocker_data.atoms) |
45 |
self._modified = True |
46 |
|
47 |
+ def __iter__(self): |
48 |
+ return iter(self._cache_data["blockers"]) |
49 |
+ |
50 |
+ def __delitem__(self, cpv): |
51 |
+ del self._cache_data["blockers"][cpv] |
52 |
+ self._modified = True |
53 |
+ |
54 |
def __getitem__(self, cpv): |
55 |
""" |
56 |
@rtype: BlockerData |
57 |
@@ -1609,9 +1596,7 @@ |
58 |
def keys(self): |
59 |
"""This needs to be implemented so that self.__repr__() doesn't raise |
60 |
an AttributeError.""" |
61 |
- if self._cache_data and "blockers" in self._cache_data: |
62 |
- return self._cache_data["blockers"].keys() |
63 |
- return [] |
64 |
+ return list(self) |
65 |
|
66 |
def show_invalid_depstring_notice(parent_node, depstring, error_msg): |
67 |
|
68 |
@@ -3282,7 +3267,9 @@ |
69 |
final_db = self.mydbapi[myroot] |
70 |
cpv_all_installed = self.trees[myroot]["vartree"].dbapi.cpv_all() |
71 |
blocker_cache = BlockerCache(myroot, vardb) |
72 |
+ stale_cache = set(blocker_cache) |
73 |
for cpv in cpv_all_installed: |
74 |
+ stale_cache.discard(cpv) |
75 |
blocker_atoms = None |
76 |
pkg = self._pkg_cache[ |
77 |
("installed", myroot, cpv, "nomerge")] |
78 |
@@ -3300,6 +3287,9 @@ |
79 |
# node for it so that they can be enforced. |
80 |
self.spinner.update() |
81 |
blocker_data = blocker_cache.get(cpv) |
82 |
+ if blocker_data is not None and \ |
83 |
+ blocker_data.counter != long(pkg.metadata["COUNTER"]): |
84 |
+ blocker_data = None |
85 |
|
86 |
# If blocker data from the graph is available, use |
87 |
# it to validate the cache and update the cache if |
88 |
@@ -3325,7 +3315,9 @@ |
89 |
blocker_atoms = blocker_data.atoms |
90 |
else: |
91 |
myuse = pkg.metadata["USE"].split() |
92 |
- depstr = " ".join(pkg.metadata[k] for k in dep_keys) |
93 |
+ # Use aux_get() to trigger FakeVartree global |
94 |
+ # updates on *DEPEND when appropriate. |
95 |
+ depstr = " ".join(vardb.aux_get(pkg.cpv, dep_keys)) |
96 |
# It is crucial to pass in final_db here in order to |
97 |
# optimize dep_check calls by eliminating atoms via |
98 |
# dep_wordreduce and dep_eval calls. |
99 |
@@ -3369,6 +3361,8 @@ |
100 |
for myatom in blocker_atoms: |
101 |
blocker = Blocker(atom=myatom[1:], root=myroot) |
102 |
self._blocker_parents.add(blocker, pkg) |
103 |
+ for cpv in stale_cache: |
104 |
+ del blocker_cache[cpv] |
105 |
blocker_cache.flush() |
106 |
del blocker_cache |
107 |
|
108 |
|
109 |
-- |
110 |
gentoo-commits@l.g.o mailing list |