Gentoo Archives: gentoo-commits

From: "Zac Medico (zmedico)" <zmedico@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] portage r11747 - main/trunk/pym/portage/dbapi
Date: Thu, 30 Oct 2008 03:38:07
Message-Id: E1KvOMC-0005lF-Rd@stork.gentoo.org
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: