summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2009-06-27 19:39:46 +0000
committerZac Medico <zmedico@gentoo.org>2009-06-27 19:39:46 +0000
commit6560f18e5fc261ac9daae2196fe08b3aca023093 (patch)
tree1ecbc21b753dc2b69e2be457252196444676af3a
parent22c35abb9152c909b429e6190eab50f0500a00c5 (diff)
downloadportage-6560f18e5fc261ac9daae2196fe08b3aca023093.tar.gz
portage-6560f18e5fc261ac9daae2196fe08b3aca023093.tar.bz2
portage-6560f18e5fc261ac9daae2196fe08b3aca023093.zip
Bug #270953 - New !!atom blockers do not allow temporary simulaneous
installation, so unlike !atom blockers, !!atom blockers aren't ignored when they match other packages occupying the same slot. Thanks to Sebastian Mingramm (few) <s.mingramm@gmx.de> for the initial patch. svn path=/main/trunk/; revision=13716
-rw-r--r--pym/_emerge/depgraph.py21
1 files changed, 14 insertions, 7 deletions
diff --git a/pym/_emerge/depgraph.py b/pym/_emerge/depgraph.py
index 9e5ddac28..371c0b1ea 100644
--- a/pym/_emerge/depgraph.py
+++ b/pym/_emerge/depgraph.py
@@ -2446,11 +2446,13 @@ class depgraph(object):
unresolved_blocks = False
depends_on_order = set()
for pkg in blocked_initial:
- if pkg.slot_atom == parent.slot_atom:
- # TODO: Support blocks within slots in cases where it
- # might make sense. For example, a new version might
- # require that the old version be uninstalled at build
- # time.
+ if pkg.slot_atom == parent.slot_atom and \
+ not blocker.atom.blocker.overlap.forbid:
+ # New !!atom blockers do not allow temporary
+ # simulaneous installation, so unlike !atom
+ # blockers, !!atom blockers aren't ignored
+ # when they match other packages occupying
+ # the same slot.
continue
if parent.installed:
# Two currently installed packages conflict with
@@ -2470,8 +2472,13 @@ class depgraph(object):
# so apparently this one is unresolvable.
unresolved_blocks = True
for pkg in blocked_final:
- if pkg.slot_atom == parent.slot_atom:
- # TODO: Support blocks within slots.
+ if pkg.slot_atom == parent.slot_atom and \
+ not blocker.atom.blocker.overlap.forbid:
+ # New !!atom blockers do not allow temporary
+ # simulaneous installation, so unlike !atom
+ # blockers, !!atom blockers aren't ignored
+ # when they match other packages occupying
+ # the same slot.
continue
if parent.operation == "nomerge" and \
pkg.operation == "nomerge":