From 1717a71b0c0dddcdfd69c230226b6c7b5ab268db Mon Sep 17 00:00:00 2001 From: George Gensure Date: Thu, 11 Apr 2019 14:01:28 -0400 Subject: [PATCH] Sort DirectoryNode children to ensure validity. InputTree will create DirectoryNodes with non-sequential additions of directory children. These must be maintained in order for representation within remote Directory messages (and to properly compute action keys). --- .../build/lib/remote/merkletree/InputTree.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/google/devtools/build/lib/remote/merkletree/InputTree.java b/src/main/java/com/google/devtools/build/lib/remote/merkletree/InputTree.java index 9e1c7aad5008d4..749ab278f5d70d 100644 --- a/src/main/java/com/google/devtools/build/lib/remote/merkletree/InputTree.java +++ b/src/main/java/com/google/devtools/build/lib/remote/merkletree/InputTree.java @@ -16,6 +16,7 @@ import build.bazel.remote.execution.v2.Digest; import com.google.common.base.Preconditions; import com.google.common.base.Strings; +import com.google.common.collect.Sets; import com.google.devtools.build.lib.actions.ActionInput; import com.google.devtools.build.lib.actions.ActionInputHelper; import com.google.devtools.build.lib.actions.FileArtifactValue; @@ -34,6 +35,7 @@ import java.util.Map; import java.util.Objects; import java.util.SortedMap; +import java.util.SortedSet; import java.util.TreeMap; /** @@ -46,7 +48,7 @@ interface Visitor { void visitDirectory(PathFragment dirname, List files, List dirs); } - abstract static class Node { + abstract static class Node implements Comparable { private final String pathSegment; Node(String pathSegment) { @@ -57,6 +59,11 @@ String getPathSegment() { return pathSegment; } + @Override + public int compareTo(Node other) { + return pathSegment.compareTo(other.pathSegment); + } + @Override public int hashCode() { return pathSegment.hashCode(); @@ -108,7 +115,7 @@ public boolean equals(Object o) { } static class DirectoryNode extends Node { - private final List children = new ArrayList<>(); + private final SortedSet children = Sets.newTreeSet(); DirectoryNode(String pathSegment) { super(pathSegment);