Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(69)

Unified Diff: pylib/gyp/input.py

Issue 1506733002: GYP: Make GYP build deterministic (Closed) Base URL: https://chromium.googlesource.com/external/gyp.git@master
Patch Set: Windows-Fixes Created 5 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: pylib/gyp/input.py
diff --git a/pylib/gyp/input.py b/pylib/gyp/input.py
index 20178672b23bd83333466c2e26afdf69b63eea85..73ee83fc255e5f4b36734999dded30df882192f5 100644
--- a/pylib/gyp/input.py
+++ b/pylib/gyp/input.py
@@ -27,6 +27,7 @@ from gyp.common import GypError
from gyp.common import OrderedSet
+
Nico 2016/01/13 20:16:54 why this newline?
Zachary Forman 2016/01/18 20:44:36 Reverted
# A list of types that are treated as linkable.
linkable_types = [
'executable',
@@ -1539,11 +1540,15 @@ class DependencyGraphNode(object):
# dependents.
flat_list = OrderedSet()
+ def ExtractNodeRef(node):
+ """Extracts the object that the node represents from the given node."""
+ return node.ref
+
# in_degree_zeros is the list of DependencyGraphNodes that have no
# dependencies not in flat_list. Initially, it is a copy of the children
# of this node, because when the graph was built, nodes with no
# dependencies were made implicit dependents of the root node.
- in_degree_zeros = set(self.dependents[:])
+ in_degree_zeros = sorted(self.dependents[:], key=ExtractNodeRef)
while in_degree_zeros:
# Nodes in in_degree_zeros have no dependencies not in flat_list, so they
@@ -1555,12 +1560,13 @@ class DependencyGraphNode(object):
# Look at dependents of the node just added to flat_list. Some of them
# may now belong in in_degree_zeros.
- for node_dependent in node.dependents:
+ for node_dependent in sorted(node.dependents, key=ExtractNodeRef):
is_in_degree_zero = True
# TODO: We want to check through the
# node_dependent.dependencies list but if it's long and we
# always start at the beginning, then we get O(n^2) behaviour.
- for node_dependent_dependency in node_dependent.dependencies:
+ for node_dependent_dependency in (sorted(node_dependent.dependencies,
+ key=ExtractNodeRef)):
if not node_dependent_dependency.ref in flat_list:
# The dependent one or more dependencies not in flat_list. There
# will be more chances to add it to flat_list when examining
@@ -1573,7 +1579,7 @@ class DependencyGraphNode(object):
# All of the dependent's dependencies are already in flat_list. Add
# it to in_degree_zeros where it will be processed in a future
# iteration of the outer loop.
- in_degree_zeros.add(node_dependent)
+ in_degree_zeros += [node_dependent]
return list(flat_list)

Powered by Google App Engine
This is Rietveld 408576698