summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2008-11-30 00:12:34 +0000
committerZac Medico <zmedico@gentoo.org>2008-11-30 00:12:34 +0000
commitbad3abfca1b1ae351e35c824ba3d944b8b0ca056 (patch)
tree320a7e1050ec315432051ff9dccdb7b26743b39b
parent008dee06d8a380d8cdc0d91ef255d002fea4e462 (diff)
downloadportage-bad3abfca1b1ae351e35c824ba3d944b8b0ca056.tar.gz
portage-bad3abfca1b1ae351e35c824ba3d944b8b0ca056.tar.bz2
portage-bad3abfca1b1ae351e35c824ba3d944b8b0ca056.zip
Change depgraph._slot_collision_info() from a set to a dict that contains
sets of packages pulled into a given slot. This will make the data easier to analyze when implementing a fix for bug #249185. svn path=/main/trunk/; revision=12124
-rw-r--r--pym/_emerge/__init__.py27
1 files changed, 16 insertions, 11 deletions
diff --git a/pym/_emerge/__init__.py b/pym/_emerge/__init__.py
index ef5ba6a4e..72a5805fd 100644
--- a/pym/_emerge/__init__.py
+++ b/pym/_emerge/__init__.py
@@ -4319,7 +4319,7 @@ class depgraph(object):
self._irrelevant_blockers = digraph()
# Contains only unsolvable Package -> Blocker edges
self._unsolvable_blockers = digraph()
- self._slot_collision_info = set()
+ self._slot_collision_info = {}
# Slot collision nodes are not allowed to block other packages since
# blocker validation is only able to account for one package per slot.
self._slot_collision_nodes = set()
@@ -4361,14 +4361,11 @@ class depgraph(object):
indent = " "
# Max number of parents shown, to avoid flooding the display.
max_parents = 3
- for slot_atom, root in self._slot_collision_info:
+ for (slot_atom, root), slot_nodes \
+ in self._slot_collision_info.iteritems():
msg.append(str(slot_atom))
msg.append("\n\n")
- slot_nodes = []
- for node in self._slot_collision_nodes:
- if node.slot_atom == slot_atom:
- slot_nodes.append(node)
- slot_nodes.append(self._slot_pkg_map[root][slot_atom])
+
for node in slot_nodes:
msg.append(indent)
msg.append(str(node))
@@ -4628,8 +4625,7 @@ class depgraph(object):
# as an unsatisfied dependency.
self._unsatisfied_deps_for_display.append(
((dep.root, dep.atom), {"myparent":dep.parent}))
- self._slot_collision_info.add((pkg.slot_atom, pkg.root))
- self._slot_collision_nodes.add(pkg)
+ self._add_slot_conflict(pkg)
self.digraph.addnode(pkg, myparent, priority=priority)
return 0
@@ -4638,8 +4634,7 @@ class depgraph(object):
# A slot collision has occurred. Sometimes this coincides
# with unresolvable blockers, so the slot collision will be
# shown later if there are no unresolvable blockers.
- self._slot_collision_info.add((pkg.slot_atom, pkg.root))
- self._slot_collision_nodes.add(pkg)
+ self._add_slot_conflict(pkg)
slot_collision = True
if slot_collision:
@@ -4711,6 +4706,16 @@ class depgraph(object):
dep_stack.append(pkg)
return 1
+ def _add_slot_conflict(self, pkg):
+ self._slot_collision_nodes.add(pkg)
+ slot_key = (pkg.slot_atom, pkg.root)
+ slot_nodes = self._slot_collision_info.get(slot_key)
+ if slot_nodes is None:
+ slot_nodes = set()
+ slot_nodes.add(self._slot_pkg_map[pkg.root][pkg.slot_atom])
+ self._slot_collision_info[slot_key] = slot_nodes
+ slot_nodes.add(pkg)
+
def _add_pkg_deps(self, pkg, allow_unsatisfied=False):
mytype = pkg.type_name