summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--pym/_emerge/depgraph.py22
1 files 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