summaryrefslogtreecommitdiffstats
path: root/pym
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2007-05-07 02:29:05 +0000
committerZac Medico <zmedico@gentoo.org>2007-05-07 02:29:05 +0000
commitfa22b44819621506723a56870873f6bc2a371c33 (patch)
treef2cb7693f5d48f3f9221fa56cbedc0ce9ab35bfa /pym
parenta19511798f8e34ac464b8972cf70cc8de79f7176 (diff)
downloadportage-fa22b44819621506723a56870873f6bc2a371c33.tar.gz
portage-fa22b44819621506723a56870873f6bc2a371c33.tar.bz2
portage-fa22b44819621506723a56870873f6bc2a371c33.zip
Prevent blockers that are only partially resolvable by merge order from accidentally being ignored.
svn path=/main/trunk/; revision=6494
Diffstat (limited to 'pym')
-rw-r--r--pym/emerge/__init__.py11
1 files changed, 10 insertions, 1 deletions
diff --git a/pym/emerge/__init__.py b/pym/emerge/__init__.py
index f38ca1b40..4d3f32e76 100644
--- a/pym/emerge/__init__.py
+++ b/pym/emerge/__init__.py
@@ -977,6 +977,7 @@ class depgraph:
self.args_keys = []
self.blocker_digraph = digraph()
self.blocker_parents = {}
+ self._unresolved_blocker_parents = {}
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.
@@ -1977,6 +1978,9 @@ class depgraph:
self.blocker_digraph.addnode(node, blocker)
if not unresolved_blocks and not depends_on_order:
self.blocker_parents[blocker].remove(parent)
+ if unresolved_blocks:
+ self._unresolved_blocker_parents.setdefault(
+ blocker, set()).add(parent)
if not self.blocker_parents[blocker]:
del self.blocker_parents[blocker]
# Validate blockers that depend on merge order.
@@ -2163,7 +2167,12 @@ class depgraph:
for blocker in myblockers.root_nodes():
if not myblockers.child_nodes(blocker):
myblockers.remove(blocker)
- del self.blocker_parents[blocker]
+ unresolved = \
+ self._unresolved_blocker_parents.get(blocker)
+ if unresolved:
+ self.blocker_parents[blocker] = unresolved
+ else:
+ del self.blocker_parents[blocker]
if not reversed:
"""Blocker validation does not work with reverse mode,