diff options
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/actions/Actions.java')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/actions/Actions.java | 30 |
1 files changed, 27 insertions, 3 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/actions/Actions.java b/src/main/java/com/google/devtools/build/lib/actions/Actions.java index 5364316f0c..a3a6ba6b58 100644 --- a/src/main/java/com/google/devtools/build/lib/actions/Actions.java +++ b/src/main/java/com/google/devtools/build/lib/actions/Actions.java @@ -17,7 +17,6 @@ package com.google.devtools.build.lib.actions; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; -import com.google.common.collect.Iterables; import com.google.common.escape.Escaper; import com.google.common.escape.Escapers; import com.google.devtools.build.lib.actions.MutableActionGraph.ActionConflictException; @@ -25,6 +24,7 @@ import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadSafe; import com.google.devtools.build.lib.vfs.OsPathPolicy; import com.google.devtools.build.lib.vfs.PathFragment; +import java.util.Collection; import java.util.Comparator; import java.util.HashMap; import java.util.Iterator; @@ -74,15 +74,39 @@ public final class Actions { } // Don't bother to check input and output counts first; the expected result for these tests is // to always be true (i.e., that this method returns true). - if (!Iterables.elementsEqual(actionA.getMandatoryInputs(), actionB.getMandatoryInputs())) { + if (!artifactsEqualWithoutOwner(actionA.getMandatoryInputs(), actionB.getMandatoryInputs())) { return false; } - if (!Iterables.elementsEqual(actionA.getOutputs(), actionB.getOutputs())) { + if (!artifactsEqualWithoutOwner(actionA.getOutputs(), actionB.getOutputs())) { return false; } return true; } + private static boolean artifactsEqualWithoutOwner( + Iterable<Artifact> iterable1, Iterable<Artifact> iterable2) { + if (iterable1 instanceof Collection && iterable2 instanceof Collection) { + Collection<?> collection1 = (Collection<?>) iterable1; + Collection<?> collection2 = (Collection<?>) iterable2; + if (collection1.size() != collection2.size()) { + return false; + } + } + Iterator<Artifact> iterator1 = iterable1.iterator(); + Iterator<Artifact> iterator2 = iterable2.iterator(); + while (iterator1.hasNext()) { + if (!iterator2.hasNext()) { + return false; + } + Artifact artifact1 = iterator1.next(); + Artifact artifact2 = iterator2.next(); + if (!artifact1.equalsWithoutOwner(artifact2)) { + return false; + } + } + return !iterator2.hasNext(); + } + /** * Finds action conflicts. An action conflict happens if two actions generate the same output * artifact. Shared actions are tolerated. See {@link #canBeShared} for details. |