summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2007-05-07 02:30:10 +0000
committerZac Medico <zmedico@gentoo.org>2007-05-07 02:30:10 +0000
commitc4cf6ac4bc08680d5428ec00d105d544ef839bcd (patch)
tree5688db08c4b931ba500542ba8e019005422d5a68
parentUse shlex for better splitting of PORTAGE_RSYNC_OPTS and PORTAGE_RSYNC_EXTRA_... (diff)
downloadportage-multirepo-2.1.2.7.tar.gz
portage-multirepo-2.1.2.7.tar.bz2
portage-multirepo-2.1.2.7.zip
Prevent blockers that are only partially resolvable by merge order from accidentally being ignored. (trunk r6493:6494)v2.1.2.7
svn path=/main/branches/2.1.2/; revision=6495
-rwxr-xr-xbin/emerge11
1 files changed, 10 insertions, 1 deletions
diff --git a/bin/emerge b/bin/emerge
index 01506e08..9ae6dd10 100755
--- a/bin/emerge
+++ b/bin/emerge
@@ -975,6 +975,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.
@@ -1943,6 +1944,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.
@@ -2129,7 +2133,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,