summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--pym/_emerge/__init__.py19
1 files changed, 14 insertions, 5 deletions
diff --git a/pym/_emerge/__init__.py b/pym/_emerge/__init__.py
index 0a0ab3414..4fa46dbc1 100644
--- a/pym/_emerge/__init__.py
+++ b/pym/_emerge/__init__.py
@@ -6754,10 +6754,15 @@ class depgraph(object):
final_db = self.mydbapi[myroot]
provider_virtual = False
- if blocker.cp in virtuals and \
+ if blocker.cp.startswith('virtual/') and \
not self._have_new_virt(blocker.root, blocker.cp):
provider_virtual = True
+ # Use this to check PROVIDE for each matched package
+ # when necessary.
+ atom_set = InternalPackageSet(
+ initial_atoms=[blocker.atom])
+
if provider_virtual:
atoms = []
for provider_entry in virtuals[blocker.cp]:
@@ -6768,13 +6773,17 @@ class depgraph(object):
else:
atoms = [blocker.atom]
- blocked_initial = []
+ blocked_initial = set()
for atom in atoms:
- blocked_initial.extend(initial_db.match_pkgs(atom))
+ for pkg in initial_db.match_pkgs(atom):
+ if atom_set.findAtomForPackage(pkg):
+ blocked_initial.add(pkg)
- blocked_final = []
+ blocked_final = set()
for atom in atoms:
- blocked_final.extend(final_db.match_pkgs(atom))
+ for pkg in final_db.match_pkgs(atom):
+ if atom_set.findAtomForPackage(pkg):
+ blocked_final.add(pkg)
if not blocked_initial and not blocked_final:
parent_pkgs = self._blocker_parents.parent_nodes(blocker)