get_dep_chain: fix unsatisfied_dependency logic
authorZac Medico <zmedico@gentoo.org>
Mon, 14 Feb 2011 04:57:57 +0000 (20:57 -0800)
committerZac Medico <zmedico@gentoo.org>
Mon, 14 Feb 2011 04:57:57 +0000 (20:57 -0800)
Always prefer parents for which the parent atom is unsatisfied by the
child node. This seems to be the intention of the code, though it may
not have behaved correctly due to continuation of the parent loop.

pym/_emerge/depgraph.py

index ef4d1f02d687b564185d2739d7f18d7ccc25c778..d6c74e4c781e844b9e8d0faa95da1e29e6316998 100644 (file)
@@ -2363,6 +2363,7 @@ class depgraph(object):
                        selected_parent = None
                        parent_arg = None
                        parent_merge = None
+                       parent_unsatisfied = None
 
                        for parent in self._dynamic_config.digraph.parent_nodes(node):
                                if parent in traversed_nodes:
@@ -2381,12 +2382,14 @@ class depgraph(object):
                                                        if parent is ppkg:
                                                                atom_set = InternalPackageSet(initial_atoms=(atom,))
                                                                if not atom_set.findAtomForPackage(start_node):
-                                                                       selected_parent = parent
+                                                                       parent_unsatisfied = parent
                                                                break
                                        else:
                                                selected_parent = parent
 
-                       if parent_merge is not None:
+                       if parent_unsatisfied is not None:
+                               selected_parent = parent_unsatisfied
+                       elif parent_merge is not None:
                                # Prefer parent in the merge list (bug #354747).
                                selected_parent = parent_merge
                        elif parent_arg is not None: