diff --git a/src/main/java/com/google/devtools/build/lib/actions/BaseSpawn.java b/src/main/java/com/google/devtools/build/lib/actions/BaseSpawn.java index 0be3e7ada45473..8115ff75374be2 100644 --- a/src/main/java/com/google/devtools/build/lib/actions/BaseSpawn.java +++ b/src/main/java/com/google/devtools/build/lib/actions/BaseSpawn.java @@ -18,6 +18,7 @@ import com.google.common.collect.ImmutableMap; import com.google.common.collect.Iterables; import com.google.devtools.build.lib.analysis.platform.PlatformInfo; +import com.google.devtools.build.lib.collect.nestedset.NestedSet; import com.google.devtools.build.lib.vfs.PathFragment; import java.util.Collection; import java.util.List; @@ -102,12 +103,12 @@ private PathFragment getRunfilesRoot() { } @Override - public Iterable getToolFiles() { + public NestedSet getToolFiles() { return action.getTools(); } @Override - public Iterable getInputFiles() { + public NestedSet getInputFiles() { return action.getInputs(); } diff --git a/src/main/java/com/google/devtools/build/lib/actions/DelegateSpawn.java b/src/main/java/com/google/devtools/build/lib/actions/DelegateSpawn.java index ca45bfb93618b2..651a74772d8a76 100644 --- a/src/main/java/com/google/devtools/build/lib/actions/DelegateSpawn.java +++ b/src/main/java/com/google/devtools/build/lib/actions/DelegateSpawn.java @@ -17,6 +17,7 @@ import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.devtools.build.lib.analysis.platform.PlatformInfo; +import com.google.devtools.build.lib.collect.nestedset.NestedSet; import java.util.Collection; import javax.annotation.Nullable; @@ -58,12 +59,12 @@ public ImmutableMap> getFilesetMap } @Override - public Iterable getToolFiles() { + public NestedSet getToolFiles() { return spawn.getToolFiles(); } @Override - public Iterable getInputFiles() { + public NestedSet getInputFiles() { return spawn.getInputFiles(); } diff --git a/src/main/java/com/google/devtools/build/lib/actions/SimpleSpawn.java b/src/main/java/com/google/devtools/build/lib/actions/SimpleSpawn.java index 536cb311022cbf..9144cde65c7582 100644 --- a/src/main/java/com/google/devtools/build/lib/actions/SimpleSpawn.java +++ b/src/main/java/com/google/devtools/build/lib/actions/SimpleSpawn.java @@ -17,7 +17,11 @@ import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableSet; import com.google.devtools.build.lib.analysis.platform.PlatformInfo; +import com.google.devtools.build.lib.collect.nestedset.NestedSet; +import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder; +import com.google.devtools.build.lib.collect.nestedset.Order; import java.util.Map; import javax.annotation.Nullable; import javax.annotation.concurrent.Immutable; @@ -32,8 +36,8 @@ public final class SimpleSpawn implements Spawn { private final ImmutableList arguments; private final ImmutableMap environment; private final ImmutableMap executionInfo; - private final ImmutableList inputs; - private final ImmutableList tools; + private final NestedSet inputs; + private final NestedSet tools; private final RunfilesSupplier runfilesSupplier; private final Map> filesetMappings; private final ImmutableList outputs; @@ -46,9 +50,9 @@ public SimpleSpawn( ImmutableMap executionInfo, RunfilesSupplier runfilesSupplier, Map> filesetMappings, - ImmutableList inputs, - ImmutableList tools, - ImmutableList outputs, + NestedSet inputs, + NestedSet tools, + ImmutableSet outputs, ResourceSet localResources) { this.owner = Preconditions.checkNotNull(owner); this.arguments = Preconditions.checkNotNull(arguments); @@ -59,7 +63,7 @@ public SimpleSpawn( this.runfilesSupplier = runfilesSupplier == null ? EmptyRunfilesSupplier.INSTANCE : runfilesSupplier; this.filesetMappings = filesetMappings; - this.outputs = Preconditions.checkNotNull(outputs); + this.outputs = Preconditions.checkNotNull(outputs).asList(); this.localResources = Preconditions.checkNotNull(localResources); } @@ -68,8 +72,8 @@ public SimpleSpawn( ImmutableList arguments, ImmutableMap environment, ImmutableMap executionInfo, - ImmutableList inputs, - ImmutableList outputs, + NestedSet inputs, + ImmutableSet outputs, ResourceSet localResources) { this( owner, @@ -79,7 +83,7 @@ public SimpleSpawn( null, ImmutableMap.of(), inputs, - ImmutableList.of(), + NestedSetBuilder.emptySet(Order.STABLE_ORDER), outputs, localResources); } @@ -110,12 +114,12 @@ public ImmutableMap> getFilesetMap } @Override - public ImmutableList getInputFiles() { + public NestedSet getInputFiles() { return inputs; } @Override - public ImmutableList getToolFiles() { + public NestedSet getToolFiles() { return tools; } diff --git a/src/main/java/com/google/devtools/build/lib/actions/Spawn.java b/src/main/java/com/google/devtools/build/lib/actions/Spawn.java index 6ed2abf964cc85..9d95e7da9353ec 100644 --- a/src/main/java/com/google/devtools/build/lib/actions/Spawn.java +++ b/src/main/java/com/google/devtools/build/lib/actions/Spawn.java @@ -17,6 +17,7 @@ import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.devtools.build.lib.analysis.platform.PlatformInfo; +import com.google.devtools.build.lib.collect.nestedset.NestedSet; import java.util.Collection; import javax.annotation.Nullable; @@ -65,26 +66,26 @@ public interface Spawn { * *

The returned set of files is a subset of what getInputFiles() returns. * - *

This method explicitly does not expand middleman artifacts. Pass the result - * to an appropriate utility method on {@link com.google.devtools.build.lib.actions.Artifact} to - * expand the middlemen. + *

This method explicitly does not expand middleman artifacts. Pass the result to an + * appropriate utility method on {@link com.google.devtools.build.lib.actions.Artifact} to expand + * the middlemen. * - *

This is for use with persistent workers, so we can restart workers when their binaries - * have changed. + *

This is for use with persistent workers, so we can restart workers when their binaries have + * changed. */ - Iterable getToolFiles(); + NestedSet getToolFiles(); /** * Returns the list of files that this command may read. * - *

This method explicitly does not expand middleman artifacts. Pass the result - * to an appropriate utility method on {@link com.google.devtools.build.lib.actions.Artifact} to - * expand the middlemen. + *

This method explicitly does not expand middleman artifacts. Pass the result to an + * appropriate utility method on {@link com.google.devtools.build.lib.actions.Artifact} to expand + * the middlemen. * - *

This is for use with remote execution, so we can ship inputs before starting the - * command. Order stability across multiple calls should be upheld for performance reasons. + *

This is for use with remote execution, so we can ship inputs before starting the command. + * Order stability across multiple calls should be upheld for performance reasons. */ - Iterable getInputFiles(); + NestedSet getInputFiles(); /** * Returns the collection of files that this command must write. Callers should not mutate diff --git a/src/main/java/com/google/devtools/build/lib/analysis/actions/SpawnAction.java b/src/main/java/com/google/devtools/build/lib/analysis/actions/SpawnAction.java index a294bfaefbbe62..970329d3ce87b6 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/actions/SpawnAction.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/actions/SpawnAction.java @@ -383,7 +383,7 @@ public final Spawn getSpawn() throws CommandLineExpansionException { return getSpawn(getInputs()); } - final Spawn getSpawn(Iterable inputs) throws CommandLineExpansionException { + final Spawn getSpawn(NestedSet inputs) throws CommandLineExpansionException { return new ActionSpawn( commandLines.allArguments(), ImmutableMap.of(), @@ -547,8 +547,7 @@ public Map getExecutionInfo() { /** A spawn instance that is tied to a specific SpawnAction. */ private class ActionSpawn extends BaseSpawn { - - private final ImmutableList inputs; + private final NestedSet inputs; private final Map> filesetMappings; private final ImmutableMap effectiveEnvironment; @@ -561,7 +560,7 @@ private class ActionSpawn extends BaseSpawn { private ActionSpawn( ImmutableList arguments, Map clientEnv, - Iterable inputs, + NestedSet inputs, Iterable additionalInputs, Map> filesetMappings) { super( @@ -571,7 +570,7 @@ private ActionSpawn( SpawnAction.this.getRunfilesSupplier(), SpawnAction.this, resourceSet); - ImmutableList.Builder inputsBuilder = ImmutableList.builder(); + NestedSetBuilder inputsBuilder = NestedSetBuilder.stableOrder(); ImmutableList manifests = getRunfilesSupplier().getManifests(); for (Artifact input : inputs) { if (!input.isFileset() && !manifests.contains(input)) { @@ -597,7 +596,7 @@ public ImmutableMap> getFilesetMap } @Override - public Iterable getInputFiles() { + public NestedSet getInputFiles() { return inputs; } } diff --git a/src/main/java/com/google/devtools/build/lib/analysis/actions/StarlarkAction.java b/src/main/java/com/google/devtools/build/lib/analysis/actions/StarlarkAction.java index 9b02b954c4e72a..0a4e6824d56aed 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/actions/StarlarkAction.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/actions/StarlarkAction.java @@ -206,8 +206,7 @@ Spawn getSpawnForExtraAction() throws CommandLineExpansionException { @Override public Iterable getInputFilesForExtraAction( - ActionExecutionContext actionExecutionContext) - throws ActionExecutionException, InterruptedException { + ActionExecutionContext actionExecutionContext) { return allInputs; } diff --git a/src/main/java/com/google/devtools/build/lib/collect/nestedset/NestedSetBuilder.java b/src/main/java/com/google/devtools/build/lib/collect/nestedset/NestedSetBuilder.java index d2d0ece07379ee..d8292cfd7e07f2 100644 --- a/src/main/java/com/google/devtools/build/lib/collect/nestedset/NestedSetBuilder.java +++ b/src/main/java/com/google/devtools/build/lib/collect/nestedset/NestedSetBuilder.java @@ -274,7 +274,7 @@ public static NestedSetBuilder naiveLinkOrder() { return new NestedSetBuilder<>(Order.NAIVE_LINK_ORDER); } - public static NestedSetBuilder fromNestedSet(NestedSet set) { + public static NestedSetBuilder fromNestedSet(NestedSet set) { return new NestedSetBuilder(set.getOrder()).addTransitive(set); } diff --git a/src/main/java/com/google/devtools/build/lib/exec/StandaloneTestStrategy.java b/src/main/java/com/google/devtools/build/lib/exec/StandaloneTestStrategy.java index c26627863da5e5..e0cf8d09439eea 100644 --- a/src/main/java/com/google/devtools/build/lib/exec/StandaloneTestStrategy.java +++ b/src/main/java/com/google/devtools/build/lib/exec/StandaloneTestStrategy.java @@ -17,12 +17,12 @@ import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableSet; import com.google.common.collect.Lists; import com.google.common.io.ByteStreams; import com.google.common.util.concurrent.ListenableFuture; import com.google.devtools.build.lib.actions.ActionExecutionContext; import com.google.devtools.build.lib.actions.ActionInputHelper; -import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.actions.ArtifactPathResolver; import com.google.devtools.build.lib.actions.EnvironmentalExecException; import com.google.devtools.build.lib.actions.ExecException; @@ -43,6 +43,8 @@ import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos; import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos.TestResult.ExecutionInfo; import com.google.devtools.build.lib.buildeventstream.TestFileNameConstants; +import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder; +import com.google.devtools.build.lib.collect.nestedset.Order; import com.google.devtools.build.lib.events.Reporter; import com.google.devtools.build.lib.util.OS; import com.google.devtools.build.lib.util.Pair; @@ -132,9 +134,9 @@ public TestRunnerSpawn createTestRunnerSpawn( ImmutableMap.copyOf(executionInfo), action.getRunfilesSupplier(), ImmutableMap.of(), - /*inputs=*/ action.getInputs().toList(), - /*tools=*/ ImmutableList.of(), - ImmutableList.copyOf(action.getSpawnOutputs()), + /*inputs=*/ action.getInputs(), + /*tools=*/ NestedSetBuilder.emptySet(Order.STABLE_ORDER), + ImmutableSet.copyOf(action.getSpawnOutputs()), localResourceUsage); return new StandaloneTestRunnerSpawn( action, actionExecutionContext, spawn, tmpDir, workingDirectory, execRoot); @@ -398,9 +400,10 @@ private Spawn createXmlGeneratingSpawn(TestRunnerAction action, SpawnResult resu ImmutableMap.copyOf(action.getExecutionInfo()), null, ImmutableMap.of(), - /*inputs=*/ ImmutableList.of(action.getTestXmlGeneratorScript(), action.getTestLog()), - /*tools=*/ ImmutableList.of(), - /*outputs=*/ ImmutableList.of(ActionInputHelper.fromPath(action.getXmlOutputPath())), + /*inputs=*/ NestedSetBuilder.create( + Order.STABLE_ORDER, action.getTestXmlGeneratorScript(), action.getTestLog()), + /*tools=*/ NestedSetBuilder.emptySet(Order.STABLE_ORDER), + /*outputs=*/ ImmutableSet.of(ActionInputHelper.fromPath(action.getXmlOutputPath())), SpawnAction.DEFAULT_RESOURCE_SET); } diff --git a/src/main/java/com/google/devtools/build/lib/includescanning/SpawnIncludeScanner.java b/src/main/java/com/google/devtools/build/lib/includescanning/SpawnIncludeScanner.java index b94e8400c150a8..3d122a51f0e25f 100644 --- a/src/main/java/com/google/devtools/build/lib/includescanning/SpawnIncludeScanner.java +++ b/src/main/java/com/google/devtools/build/lib/includescanning/SpawnIncludeScanner.java @@ -44,6 +44,8 @@ import com.google.devtools.build.lib.actions.SpawnResult; import com.google.devtools.build.lib.analysis.platform.PlatformInfo; import com.google.devtools.build.lib.collect.nestedset.NestedSet; +import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder; +import com.google.devtools.build.lib.collect.nestedset.Order; import com.google.devtools.build.lib.includescanning.IncludeParser.GrepIncludesFileType; import com.google.devtools.build.lib.includescanning.IncludeParser.Inclusion; import com.google.devtools.build.lib.util.io.FileOutErr; @@ -340,8 +342,9 @@ static InputStream spawnGrep( GrepIncludesFileType fileType) throws ExecException, InterruptedException { ActionInput output = ActionInputHelper.fromPath(outputExecPath); - ImmutableList inputs = ImmutableList.of(grepIncludes, input); - ImmutableList outputs = ImmutableList.of(output); + NestedSet inputs = + NestedSetBuilder.create(Order.STABLE_ORDER, grepIncludes, input); + ImmutableSet outputs = ImmutableSet.of(output); ImmutableList command = ImmutableList.of( grepIncludes.getExecPathString(), @@ -459,8 +462,9 @@ private static ListenableFuture spawnGrepAsync( Artifact grepIncludes, GrepIncludesFileType fileType) { ActionInput output = ActionInputHelper.fromPath(outputExecPath); - ImmutableList inputs = ImmutableList.of(grepIncludes, input); - ImmutableList outputs = ImmutableList.of(output); + NestedSet inputs = + NestedSetBuilder.create(Order.STABLE_ORDER, grepIncludes, input); + ImmutableSet outputs = ImmutableSet.of(output); ImmutableList command = ImmutableList.of( grepIncludes.getExecPathString(), diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileAction.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileAction.java index 0b3b4ab2881925..72da2b2f851455 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileAction.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileAction.java @@ -380,7 +380,7 @@ public ImmutableSet getMandatoryOutputs() { * {@link #discoverInputs(ActionExecutionContext)} must be called before this method is called on * each action execution. */ - public Iterable getAdditionalInputs() { + public NestedSet getAdditionalInputs() { return Preconditions.checkNotNull(additionalInputs); } @@ -1420,19 +1420,16 @@ protected byte[] getDotDContents(SpawnResult spawnResult) throws EnvironmentalEx protected Spawn createSpawn(Map clientEnv) throws ActionExecutionException { // Intentionally not adding {@link CppCompileAction#inputsForInvalidation}, those are not needed // for execution. - ImmutableList.Builder inputsBuilder = - new ImmutableList.Builder() - .addAll(getMandatoryInputs()) - .addAll(getAdditionalInputs()); + NestedSetBuilder inputsBuilder = + NestedSetBuilder.stableOrder() + .addTransitive(getMandatoryInputs()) + .addTransitive(getAdditionalInputs()); if (getParamFileActionInput() != null) { inputsBuilder.add(getParamFileActionInput()); } - ImmutableList inputs = inputsBuilder.build(); + NestedSet inputs = inputsBuilder.build(); ImmutableMap executionInfo = getExecutionInfo(); - ImmutableList.Builder outputs = - ImmutableList.builderWithExpectedSize(getOutputs().size() + 1); - outputs.addAll(getOutputs()); if (getDotdFile() != null && useInMemoryDotdFiles()) { /* * CppCompileAction does dotd file scanning locally inside the Bazel process and thus @@ -1458,7 +1455,7 @@ protected Spawn createSpawn(Map clientEnv) throws ActionExecutio getEnvironment(clientEnv), executionInfo, inputs, - outputs.build(), + getOutputs(), estimateResourceConsumptionLocal()); } catch (CommandLineExpansionException e) { throw new ActionExecutionException( diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkAction.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkAction.java index 9ccf38b2e4e87f..b1904fddd76a3b 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkAction.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkAction.java @@ -329,8 +329,8 @@ private Spawn createSpawn(ActionExecutionContext actionExecutionContext) ImmutableList.copyOf(getCommandLine(actionExecutionContext.getArtifactExpander())), getEnvironment(actionExecutionContext.getClientEnv()), getExecutionInfo(), - ImmutableList.copyOf(getInputs()), - getOutputs().asList(), + getInputs(), + getOutputs(), estimateResourceConsumptionLocal()); } catch (CommandLineExpansionException e) { throw new ActionExecutionException( diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompileAction.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompileAction.java index e94bf239adf6e8..d96e948f466d5f 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompileAction.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompileAction.java @@ -439,13 +439,13 @@ public ExtraActionInfo.Builder getExtraActionInfo(ActionKeyContext actionKeyCont } private final class JavaSpawn extends BaseSpawn { - final Iterable inputs; + final NestedSet inputs; public JavaSpawn( CommandLines.ExpandedCommandLines expandedCommandLines, Map environment, Map executionInfo, - Iterable inputs) { + NestedSet inputs) { super( ImmutableList.copyOf(expandedCommandLines.arguments()), environment, @@ -453,11 +453,14 @@ public JavaSpawn( EmptyRunfilesSupplier.INSTANCE, JavaCompileAction.this, LOCAL_RESOURCES); - this.inputs = Iterables.concat(inputs, expandedCommandLines.getParamFiles()); + this.inputs = + NestedSetBuilder.fromNestedSet(inputs) + .addAll(expandedCommandLines.getParamFiles()) + .build(); } @Override - public Iterable getInputFiles() { + public NestedSet getInputFiles() { return inputs; } } diff --git a/src/test/java/com/google/devtools/build/lib/BUILD b/src/test/java/com/google/devtools/build/lib/BUILD index 706db4f5aed006..fe8ec3aaf038d9 100644 --- a/src/test/java/com/google/devtools/build/lib/BUILD +++ b/src/test/java/com/google/devtools/build/lib/BUILD @@ -1315,6 +1315,7 @@ java_test( "//src/main/java/com/google/devtools/build/lib/actions", "//src/main/java/com/google/devtools/build/lib/actions:localhost_capacity", "//src/main/java/com/google/devtools/build/lib/clock", + "//src/main/java/com/google/devtools/build/lib/collect/nestedset", "//src/main/java/com/google/devtools/build/lib/exec/local", "//src/main/java/com/google/devtools/build/lib/exec/local:options", "//src/main/java/com/google/devtools/build/lib/rules/apple", diff --git a/src/test/java/com/google/devtools/build/lib/exec/util/SpawnBuilder.java b/src/test/java/com/google/devtools/build/lib/exec/util/SpawnBuilder.java index 88ddf2cf56d027..cce2e41f6600a8 100644 --- a/src/test/java/com/google/devtools/build/lib/exec/util/SpawnBuilder.java +++ b/src/test/java/com/google/devtools/build/lib/exec/util/SpawnBuilder.java @@ -16,6 +16,7 @@ import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableSet; import com.google.devtools.build.lib.actions.ActionExecutionMetadata; import com.google.devtools.build.lib.actions.ActionInput; import com.google.devtools.build.lib.actions.ActionInputHelper; @@ -27,6 +28,8 @@ import com.google.devtools.build.lib.actions.SimpleSpawn; import com.google.devtools.build.lib.actions.Spawn; import com.google.devtools.build.lib.analysis.platform.PlatformInfo; +import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder; +import com.google.devtools.build.lib.collect.nestedset.Order; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -45,7 +48,7 @@ public final class SpawnBuilder { private final Map environment = new HashMap<>(); private final Map executionInfo = new HashMap<>(); private ImmutableMap execProperties = ImmutableMap.of(); - private final List inputs = new ArrayList<>(); + private final NestedSetBuilder inputs = NestedSetBuilder.stableOrder(); private final List outputs = new ArrayList<>(); private final Map> filesetMappings = new HashMap<>(); @@ -66,9 +69,9 @@ public Spawn build() { ImmutableMap.copyOf(executionInfo), runfilesSupplier, ImmutableMap.copyOf(filesetMappings), - ImmutableList.copyOf(inputs), - /*tools=*/ ImmutableList.of(), - ImmutableList.copyOf(outputs), + inputs.build(), + /*tools=*/ NestedSetBuilder.emptySet(Order.STABLE_ORDER), + ImmutableSet.copyOf(outputs), ResourceSet.ZERO); } diff --git a/src/test/java/com/google/devtools/build/lib/remote/BUILD b/src/test/java/com/google/devtools/build/lib/remote/BUILD index 74216051b3e75a..02c3d792a1aee2 100644 --- a/src/test/java/com/google/devtools/build/lib/remote/BUILD +++ b/src/test/java/com/google/devtools/build/lib/remote/BUILD @@ -50,6 +50,7 @@ java_test( "//src/main/java/com/google/devtools/build/lib/authandtls", "//src/main/java/com/google/devtools/build/lib/buildeventstream", "//src/main/java/com/google/devtools/build/lib/clock", + "//src/main/java/com/google/devtools/build/lib/collect/nestedset", "//src/main/java/com/google/devtools/build/lib/remote", "//src/main/java/com/google/devtools/build/lib/remote/common", "//src/main/java/com/google/devtools/build/lib/remote/disk", diff --git a/src/test/java/com/google/devtools/build/lib/remote/GrpcRemoteExecutionClientTest.java b/src/test/java/com/google/devtools/build/lib/remote/GrpcRemoteExecutionClientTest.java index c498b47645de8c..90fc8345516e26 100644 --- a/src/test/java/com/google/devtools/build/lib/remote/GrpcRemoteExecutionClientTest.java +++ b/src/test/java/com/google/devtools/build/lib/remote/GrpcRemoteExecutionClientTest.java @@ -58,6 +58,8 @@ import com.google.devtools.build.lib.authandtls.AuthAndTLSOptions; import com.google.devtools.build.lib.authandtls.GoogleAuthUtils; import com.google.devtools.build.lib.clock.JavaClock; +import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder; +import com.google.devtools.build.lib.collect.nestedset.Order; import com.google.devtools.build.lib.exec.ExecutionOptions; import com.google.devtools.build.lib.exec.util.FakeOwner; import com.google.devtools.build.lib.remote.RemoteRetrier.ExponentialBackoff; @@ -167,8 +169,9 @@ public final void setUp() throws Exception { ImmutableList.of("/bin/echo", "Hi!"), ImmutableMap.of("VARIABLE", "value"), /*executionInfo=*/ ImmutableMap.of(), - /*inputs=*/ ImmutableList.of(ActionInputHelper.fromPath("input")), - /*outputs=*/ ImmutableList.of( + /*inputs=*/ NestedSetBuilder.create( + Order.STABLE_ORDER, ActionInputHelper.fromPath("input")), + /*outputs=*/ ImmutableSet.of( new ActionInput() { @Override public String getExecPathString() { @@ -259,7 +262,8 @@ public PathFragment getExecPath() { logDir, /* filesToDownload= */ ImmutableSet.of()); - inputDigest = fakeFileCache.createScratchInput(simpleSpawn.getInputFiles().get(0), "xyz"); + inputDigest = + fakeFileCache.createScratchInput(simpleSpawn.getInputFiles().getSingleton(), "xyz"); command = Command.newBuilder() .addAllArguments(ImmutableList.of("/bin/echo", "Hi!")) diff --git a/src/test/java/com/google/devtools/build/lib/remote/RemoteSpawnCacheTest.java b/src/test/java/com/google/devtools/build/lib/remote/RemoteSpawnCacheTest.java index 5c93a0537f6a6f..eca1c7e23691d3 100644 --- a/src/test/java/com/google/devtools/build/lib/remote/RemoteSpawnCacheTest.java +++ b/src/test/java/com/google/devtools/build/lib/remote/RemoteSpawnCacheTest.java @@ -48,6 +48,8 @@ import com.google.devtools.build.lib.actions.SpawnResult.Status; import com.google.devtools.build.lib.actions.cache.MetadataInjector; import com.google.devtools.build.lib.clock.JavaClock; +import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder; +import com.google.devtools.build.lib.collect.nestedset.Order; import com.google.devtools.build.lib.events.Event; import com.google.devtools.build.lib.events.EventKind; import com.google.devtools.build.lib.events.Reporter; @@ -216,8 +218,9 @@ private static SimpleSpawn simpleSpawnWithExecutionInfo( ImmutableList.of("/bin/echo", "Hi!"), ImmutableMap.of("VARIABLE", "value"), executionInfo, - /* inputs= */ ImmutableList.of(ActionInputHelper.fromPath("input")), - /* outputs= */ ImmutableList.of(ActionInputHelper.fromPath("/random/file")), + /* inputs= */ NestedSetBuilder.create( + Order.STABLE_ORDER, ActionInputHelper.fromPath("input")), + /* outputs= */ ImmutableSet.of(ActionInputHelper.fromPath("/random/file")), ResourceSet.ZERO); } @@ -254,7 +257,7 @@ public final void setUp() throws Exception { reporter.addHandler(eventHandler); cache = remoteSpawnCacheWithOptions(options); - fakeFileCache.createScratchInput(simpleSpawn.getInputFiles().get(0), "xyz"); + fakeFileCache.createScratchInput(simpleSpawn.getInputFiles().getSingleton(), "xyz"); } @SuppressWarnings("unchecked") diff --git a/src/test/java/com/google/devtools/build/lib/remote/RemoteSpawnRunnerTest.java b/src/test/java/com/google/devtools/build/lib/remote/RemoteSpawnRunnerTest.java index cc2d9e133fa53a..44b12d2cf4ad65 100644 --- a/src/test/java/com/google/devtools/build/lib/remote/RemoteSpawnRunnerTest.java +++ b/src/test/java/com/google/devtools/build/lib/remote/RemoteSpawnRunnerTest.java @@ -55,6 +55,8 @@ import com.google.devtools.build.lib.actions.SpawnResult.Status; import com.google.devtools.build.lib.actions.util.ActionsTestUtil; import com.google.devtools.build.lib.clock.JavaClock; +import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder; +import com.google.devtools.build.lib.collect.nestedset.Order; import com.google.devtools.build.lib.events.Event; import com.google.devtools.build.lib.events.EventKind; import com.google.devtools.build.lib.events.Reporter; @@ -836,8 +838,8 @@ private void testParamFilesAreMaterializedForFlag(String flag) throws Exception /*arguments=*/ ImmutableList.of(), /*environment=*/ ImmutableMap.of(), /*executionInfo=*/ ImmutableMap.of(), - /*inputs=*/ ImmutableList.of(input), - /*outputs=*/ ImmutableList.of(), + /*inputs=*/ NestedSetBuilder.create(Order.STABLE_ORDER, input), + /*outputs=*/ ImmutableSet.of(), ResourceSet.ZERO); SpawnExecutionContext policy = new FakeSpawnExecutionContext(spawn, fakeFileCache, execRoot, outErr); @@ -973,8 +975,8 @@ private static SimpleSpawn simpleSpawnWithExecutionInfo( /*arguments=*/ ImmutableList.of(), /*environment=*/ ImmutableMap.of(), /*executionInfo=*/ executionInfo, - /*inputs=*/ ImmutableList.of(), - /*outputs=*/ ImmutableList.copyOf(outputs), + /*inputs=*/ NestedSetBuilder.emptySet(Order.STABLE_ORDER), + /*outputs=*/ ImmutableSet.copyOf(outputs), ResourceSet.ZERO); } diff --git a/src/test/java/com/google/devtools/build/lib/standalone/StandaloneSpawnStrategyTest.java b/src/test/java/com/google/devtools/build/lib/standalone/StandaloneSpawnStrategyTest.java index 1a0ce10ee55bbb..f9c7b965cdaf24 100644 --- a/src/test/java/com/google/devtools/build/lib/standalone/StandaloneSpawnStrategyTest.java +++ b/src/test/java/com/google/devtools/build/lib/standalone/StandaloneSpawnStrategyTest.java @@ -19,6 +19,7 @@ import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableSet; import com.google.common.collect.Sets; import com.google.common.eventbus.EventBus; import com.google.devtools.build.lib.actions.ActionExecutionContext; @@ -38,6 +39,8 @@ import com.google.devtools.build.lib.analysis.BlazeDirectories; import com.google.devtools.build.lib.analysis.ServerDirectories; import com.google.devtools.build.lib.clock.BlazeClock; +import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder; +import com.google.devtools.build.lib.collect.nestedset.Order; import com.google.devtools.build.lib.events.PrintingEventHandler; import com.google.devtools.build.lib.events.Reporter; import com.google.devtools.build.lib.exec.BinTools; @@ -158,8 +161,8 @@ private Spawn createSpawn(String... arguments) { ImmutableList.copyOf(arguments), /*environment=*/ ImmutableMap.of(), /*executionInfo=*/ ImmutableMap.of(), - /*inputs=*/ ImmutableList.of(), - /*outputs=*/ ImmutableList.of(), + /*inputs=*/ NestedSetBuilder.emptySet(Order.STABLE_ORDER), + /*outputs=*/ ImmutableSet.of(), ResourceSet.ZERO); } @@ -240,14 +243,15 @@ public void testCommandHonorsEnvironment() throws Exception { // down where that env var is coming from. return; } - Spawn spawn = new SimpleSpawn( - new ActionsTestUtil.NullAction(), - ImmutableList.of("/usr/bin/env"), - /*environment=*/ ImmutableMap.of("foo", "bar", "baz", "boo"), - /*executionInfo=*/ ImmutableMap.of(), - /*inputs=*/ ImmutableList.of(), - /*outputs=*/ ImmutableList.of(), - ResourceSet.ZERO); + Spawn spawn = + new SimpleSpawn( + new ActionsTestUtil.NullAction(), + ImmutableList.of("/usr/bin/env"), + /*environment=*/ ImmutableMap.of("foo", "bar", "baz", "boo"), + /*executionInfo=*/ ImmutableMap.of(), + /*inputs=*/ NestedSetBuilder.emptySet(Order.STABLE_ORDER), + /*outputs=*/ ImmutableSet.of(), + ResourceSet.ZERO); run(spawn); assertThat(Sets.newHashSet(out().split("\n"))).isEqualTo(Sets.newHashSet("foo=bar", "baz=boo")); }