public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
* [gentoo-commits] portage r11747 - main/trunk/pym/portage/dbapi
@ 2008-10-30  3:38 Zac Medico (zmedico)
  0 siblings, 0 replies; only message in thread
From: Zac Medico (zmedico) @ 2008-10-30  3:38 UTC (permalink / raw
  To: gentoo-commits

Author: zmedico
Date: 2008-10-30 03:37:55 +0000 (Thu, 30 Oct 2008)
New Revision: 11747

Modified:
   main/trunk/pym/portage/dbapi/vartree.py
Log:
In dblink.unmerge(), update the CONTENTS entries when preserved libs are
removed.


Modified: main/trunk/pym/portage/dbapi/vartree.py
===================================================================
--- main/trunk/pym/portage/dbapi/vartree.py	2008-10-30 03:04:08 UTC (rev 11746)
+++ main/trunk/pym/portage/dbapi/vartree.py	2008-10-30 03:37:55 UTC (rev 11747)
@@ -1959,6 +1959,7 @@
 			lib_graph = digraph()
 			preserved_nodes = set()
 			preserved_paths = set()
+			path_cpv_map = {}
 			path_node_map = {}
 			root = self.myroot
 
@@ -1974,8 +1975,9 @@
 				return node
 
 			linkmap = self.vartree.dbapi.linkmap
-			for plibs in plib_dict.itervalues():
+			for cpv, plibs in plib_dict.iteritems():
 				for f in plibs:
+					path_cpv_map[f] = cpv
 					preserved_node = path_to_node(f)
 					if not preserved_node.file_exists():
 						continue
@@ -2019,6 +2021,7 @@
 						lib_graph.remove_edge(preserved_node, consumer_node)
 						break
 
+			removed_for_cpv = {}
 			while not lib_graph.empty():
 				root_nodes = preserved_nodes.intersection(lib_graph.root_nodes())
 				if not root_nodes:
@@ -2029,6 +2032,12 @@
 					unlink_list.update(node.alt_paths)
 				unlink_list = sorted(unlink_list)
 				for obj in unlink_list:
+					cpv = path_cpv_map[obj]
+					removed = removed_for_cpv.get(cpv)
+					if removed is None:
+						removed = set()
+						removed_for_cpv[cpv] = removed
+					removed.add(obj)
 					obj = os.path.join(root, obj.lstrip(os.sep))
 					if os.path.islink(obj):
 						obj_type = "sym"
@@ -2043,6 +2052,17 @@
 					else:
 						showMessage("<<< !needed   %s %s\n" % (obj_type, obj))
 
+			for cpv, removed in removed_for_cpv.iteritems():
+				if not self.vartree.dbapi.cpv_exists(cpv):
+					for dblnk in others_in_slot:
+						if dblnk.mycpv == cpv:
+							# This one just got merged so it doesn't
+							# register with cpv_exists() yet.
+							self.vartree.dbapi.removeFromContents(dblnk, removed)
+							break
+					continue
+				self.vartree.dbapi.removeFromContents(cpv, removed)
+
 			plib_registry.pruneNonExisting()
 						
 		finally:




^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2008-10-30  3:38 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-10-30  3:38 [gentoo-commits] portage r11747 - main/trunk/pym/portage/dbapi Zac Medico (zmedico)

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox