diff options
author | Zac Medico <zmedico@gentoo.org> | 2009-06-27 19:39:46 +0000 |
---|---|---|
committer | Zac Medico <zmedico@gentoo.org> | 2009-06-27 19:39:46 +0000 |
commit | 6560f18e5fc261ac9daae2196fe08b3aca023093 (patch) | |
tree | 1ecbc21b753dc2b69e2be457252196444676af3a | |
parent | 22c35abb9152c909b429e6190eab50f0500a00c5 (diff) | |
download | portage-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.py | 21 |
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": |