resume_depgraph: prune all indirect unsatisfied
authorZac Medico <zmedico@gentoo.org>
Thu, 11 Aug 2011 03:27:45 +0000 (20:27 -0700)
committerZac Medico <zmedico@gentoo.org>
Thu, 11 Aug 2011 03:27:45 +0000 (20:27 -0700)
This should fix some cases of bug 378187.

pym/_emerge/depgraph.py

index 5b48aca414696db6807f615a07a28d6721dc621e..8b6125d84dd17f1e4e5911df3357aaae31ecc61f 100644 (file)
@@ -6869,12 +6869,12 @@ def _resume_depgraph(settings, trees, mtimedb, myopts, myparams, spinner):
                                        if not isinstance(parent_node, Package) \
                                                or parent_node.operation not in ("merge", "nomerge"):
                                                continue
-                                       unsatisfied = \
-                                               graph.child_nodes(parent_node,
-                                               ignore_priority=DepPrioritySatisfiedRange.ignore_soft)
-                                       if pkg in unsatisfied:
-                                               unsatisfied_parents[parent_node] = parent_node
-                                               unsatisfied_stack.append(parent_node)
+                                       # We need to traverse all priorities here, in order to
+                                       # ensure that a package with an unsatisfied depenedency
+                                       # won't get pulled in, even indirectly via a soft
+                                       # dependency.
+                                       unsatisfied_parents[parent_node] = parent_node
+                                       unsatisfied_stack.append(parent_node)
 
                        unsatisfied_tuples = frozenset(tuple(parent_node)
                                for parent_node in unsatisfied_parents