From 603569311daee6e2460051f46728a05cbae66880 Mon Sep 17 00:00:00 2001 From: Zac Medico Date: Fri, 10 Jun 2011 16:24:54 -0700 Subject: depgraph._serialize_tasks: fix libperl/perl order In some cases, the asap_nodes code caused selection of a large runtime cycle that was obviously sub-optimal. Now such cases are detected and avoided. --- pym/_emerge/depgraph.py | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/pym/_emerge/depgraph.py b/pym/_emerge/depgraph.py index a00837f39..8e06aff38 100644 --- a/pym/_emerge/depgraph.py +++ b/pym/_emerge/depgraph.py @@ -5025,11 +5025,23 @@ class depgraph(object): if selected_nodes: break - if prefer_asap and asap_nodes and not selected_nodes: - # We failed to find any asap nodes to merge, so ignore - # them for the next iteration. - prefer_asap = False - continue + if prefer_asap and asap_nodes: + if not selected_nodes: + # We failed to find any asap nodes to merge, + # so ignore them for the next iteration. + prefer_asap = False + continue + # Make sure that we haven't selected a large runtime + # cycle that is obviously sub-optimal. This will be + # obvious if any of selected_nodes is a leaf node + # when medium_soft deps are ignored. + for node in selected_nodes: + if not mygraph.child_nodes(node, ignore_priority = + DepPriorityNormalRange.ignore_medium_soft): + prefer_asap = False + break + if not prefer_asap: + continue if selected_nodes and ignore_priority is not None: # Try to merge ignored medium_soft deps as soon as possible -- cgit v1.2.3-1-g7c22