summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2007-05-03 09:24:13 +0000
committerZac Medico <zmedico@gentoo.org>2007-05-03 09:24:13 +0000
commit1e768383340ea4b0550f841ddb9a69bca033c79d (patch)
tree57dda11c4f698dd3ca25fee4424e30ce28c6ad95
parentFix eend so that it works properly on a standard BSD console. Thanks to Uber... (diff)
downloadportage-multirepo-1e768383340ea4b0550f841ddb9a69bca033c79d.tar.gz
portage-multirepo-1e768383340ea4b0550f841ddb9a69bca033c79d.tar.bz2
portage-multirepo-1e768383340ea4b0550f841ddb9a69bca033c79d.zip
For bug #176765, when a new package is blocked by another one that is being replaced, handle another case where the conflict can be avoided. (trunk r6472:6473)
svn path=/main/branches/2.1.2/; revision=6474
-rwxr-xr-xbin/emerge20
1 files changed, 17 insertions, 3 deletions
diff --git a/bin/emerge b/bin/emerge
index c5c7845a..73dbe451 100755
--- a/bin/emerge
+++ b/bin/emerge
@@ -1899,7 +1899,7 @@ class depgraph:
# this block.
upgrade_node = \
self.pkg_node_map[proot][upgrade_matches[0]]
- depends_on_order.add(upgrade_node)
+ depends_on_order.add((upgrade_node, parent))
continue
# None of the above blocker resolutions techniques apply,
# so apparently this one is unresolvable.
@@ -1915,13 +1915,27 @@ class depgraph:
# This blocker will be handled the next time that a
# merge of either package is triggered.
continue
+ if not parent_static and pstatus == "nomerge" and \
+ slot_atom in modified_slots[myroot]:
+ replacement = final_db.match(pslot_atom)
+ if replacement:
+ replacement_node = \
+ self.pkg_node_map[proot][replacement[0]]
+ if replacement_node not in \
+ self.blocker_parents[blocker]:
+ # Apparently a replacement may be able to
+ # invalidate this block.
+ blocked_node = self.pkg_node_map[proot][cpv]
+ depends_on_order.add(
+ (replacement_node, blocked_node))
+ continue
# None of the above blocker resolutions techniques apply,
# so apparently this one is unresolvable.
unresolved_blocks = True
if not unresolved_blocks and depends_on_order:
- for node in depends_on_order:
+ for node, pnode in depends_on_order:
# Enforce correct merge order with a hard dep.
- self.digraph.addnode(node, parent,
+ self.digraph.addnode(node, pnode,
priority=DepPriority(buildtime=True))
# Count references to this blocker so that it can be
# invalidated after nodes referencing it have been