From eca171c182113f6b45e0ef7efccbf70e193c1882 Mon Sep 17 00:00:00 2001 From: Zac Medico Date: Sun, 13 Feb 2011 19:28:07 -0800 Subject: get_dep_chain: prefer parents in merge list This will fix bug #354747. --- pym/_emerge/depgraph.py | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) (limited to 'pym/_emerge/depgraph.py') diff --git a/pym/_emerge/depgraph.py b/pym/_emerge/depgraph.py index 2257318d2..1b76f5323 100644 --- a/pym/_emerge/depgraph.py +++ b/pym/_emerge/depgraph.py @@ -2373,20 +2373,20 @@ class depgraph(object): # When traversing to parents, prefer arguments over packages # since arguments are root nodes. Never traverse the same # package twice, in order to prevent an infinite loop. + child = node selected_parent = None + parent_arg = None + parent_merge = None + for parent in self._dynamic_config.digraph.parent_nodes(node): if parent in traversed_nodes: continue if isinstance(parent, DependencyArg): - if self._dynamic_config.digraph.parent_nodes(parent): - selected_parent = parent - child = node - else: - dep_chain.append( - (_unicode_decode("%s") % (parent,), "argument")) - selected_parent = None - break + parent_arg = parent else: + if isinstance(parent, Package) and \ + parent.operation == "merge": + parent_merge = parent if unsatisfied_dependency and node is start_node: # Make sure that pkg doesn't satisfy parent's dependency. # This ensures that we select the correct parent for use @@ -2396,11 +2396,21 @@ class depgraph(object): atom_set = InternalPackageSet(initial_atoms=(atom,)) if not atom_set.findAtomForPackage(start_node): selected_parent = parent - child = node break else: selected_parent = parent - child = node + + if parent_merge is not None: + # Prefer parent in the merge list (bug #354747). + selected_parent = parent_merge + elif parent_arg is not None: + if self._dynamic_config.digraph.parent_nodes(parent_arg): + selected_parent = parent_arg + else: + dep_chain.append( + (_unicode_decode("%s") % (parent,), "argument")) + selected_parent = None + node = selected_parent return dep_chain -- cgit v1.2.3-1-g7c22