summaryrefslogtreecommitdiffstats
path: root/pym/_emerge/depgraph.py
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 /pym/_emerge/depgraph.py
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
Diffstat (limited to 'pym/_emerge/depgraph.py')
-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":