diff options
-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": |