1 |
Author: zmedico |
2 |
Date: 2008-10-30 03:37:55 +0000 (Thu, 30 Oct 2008) |
3 |
New Revision: 11747 |
4 |
|
5 |
Modified: |
6 |
main/trunk/pym/portage/dbapi/vartree.py |
7 |
Log: |
8 |
In dblink.unmerge(), update the CONTENTS entries when preserved libs are |
9 |
removed. |
10 |
|
11 |
|
12 |
Modified: main/trunk/pym/portage/dbapi/vartree.py |
13 |
=================================================================== |
14 |
--- main/trunk/pym/portage/dbapi/vartree.py 2008-10-30 03:04:08 UTC (rev 11746) |
15 |
+++ main/trunk/pym/portage/dbapi/vartree.py 2008-10-30 03:37:55 UTC (rev 11747) |
16 |
@@ -1959,6 +1959,7 @@ |
17 |
lib_graph = digraph() |
18 |
preserved_nodes = set() |
19 |
preserved_paths = set() |
20 |
+ path_cpv_map = {} |
21 |
path_node_map = {} |
22 |
root = self.myroot |
23 |
|
24 |
@@ -1974,8 +1975,9 @@ |
25 |
return node |
26 |
|
27 |
linkmap = self.vartree.dbapi.linkmap |
28 |
- for plibs in plib_dict.itervalues(): |
29 |
+ for cpv, plibs in plib_dict.iteritems(): |
30 |
for f in plibs: |
31 |
+ path_cpv_map[f] = cpv |
32 |
preserved_node = path_to_node(f) |
33 |
if not preserved_node.file_exists(): |
34 |
continue |
35 |
@@ -2019,6 +2021,7 @@ |
36 |
lib_graph.remove_edge(preserved_node, consumer_node) |
37 |
break |
38 |
|
39 |
+ removed_for_cpv = {} |
40 |
while not lib_graph.empty(): |
41 |
root_nodes = preserved_nodes.intersection(lib_graph.root_nodes()) |
42 |
if not root_nodes: |
43 |
@@ -2029,6 +2032,12 @@ |
44 |
unlink_list.update(node.alt_paths) |
45 |
unlink_list = sorted(unlink_list) |
46 |
for obj in unlink_list: |
47 |
+ cpv = path_cpv_map[obj] |
48 |
+ removed = removed_for_cpv.get(cpv) |
49 |
+ if removed is None: |
50 |
+ removed = set() |
51 |
+ removed_for_cpv[cpv] = removed |
52 |
+ removed.add(obj) |
53 |
obj = os.path.join(root, obj.lstrip(os.sep)) |
54 |
if os.path.islink(obj): |
55 |
obj_type = "sym" |
56 |
@@ -2043,6 +2052,17 @@ |
57 |
else: |
58 |
showMessage("<<< !needed %s %s\n" % (obj_type, obj)) |
59 |
|
60 |
+ for cpv, removed in removed_for_cpv.iteritems(): |
61 |
+ if not self.vartree.dbapi.cpv_exists(cpv): |
62 |
+ for dblnk in others_in_slot: |
63 |
+ if dblnk.mycpv == cpv: |
64 |
+ # This one just got merged so it doesn't |
65 |
+ # register with cpv_exists() yet. |
66 |
+ self.vartree.dbapi.removeFromContents(dblnk, removed) |
67 |
+ break |
68 |
+ continue |
69 |
+ self.vartree.dbapi.removeFromContents(cpv, removed) |
70 |
+ |
71 |
plib_registry.pruneNonExisting() |
72 |
|
73 |
finally: |