serialize_tasks: asap ignore medium_soft earlier
authorZac Medico <zmedico@gentoo.org>
Sat, 11 Jun 2011 15:51:24 +0000 (08:51 -0700)
committerZac Medico <zmedico@gentoo.org>
Sat, 11 Jun 2011 15:51:24 +0000 (08:51 -0700)
This allows us to avoid the less efficient runtime cycle pathway for
cases in which an asap node is a leaf if medium_soft deps are ignored.
Ths should increase efficiency without changing behavior.

pym/_emerge/depgraph.py

index 854fa63fb057376764205080c355a5e6282ef68d..37dde2d81f9ca9ba0f461c7282032f24ab4bbda3 100644 (file)
@@ -4940,12 +4940,18 @@ class depgraph(object):
                                # the parent to have been removed from the graph already.
                                asap_nodes = [node for node in asap_nodes \
                                        if mygraph.contains(node)]
-                               for node in asap_nodes:
-                                       if not mygraph.child_nodes(node,
-                                               ignore_priority=priority_range.ignore_soft):
-                                               selected_nodes = [node]
-                                               asap_nodes.remove(node)
+                               for i in range(priority_range.SOFT,
+                                       priority_range.MEDIUM_SOFT + 1):
+                                       ignore_priority = priority_range.ignore_priority[i]
+                                       for node in asap_nodes:
+                                               if not mygraph.child_nodes(node,
+                                                       ignore_priority=ignore_priority):
+                                                       selected_nodes = [node]
+                                                       asap_nodes.remove(node)
+                                                       break
+                                       if selected_nodes:
                                                break
+
                        if not selected_nodes and \
                                not (prefer_asap and asap_nodes):
                                for i in range(priority_range.NONE,