diff options
author | 2016-01-18 14:19:33 +0000 | |
---|---|---|
committer | 2016-01-18 14:35:07 +0000 | |
commit | 39125b2213d60a52db0a186e2887d007010221cd (patch) | |
tree | 3f2b41bfb93712d11826ace7823dd95ce5750918 /src/main/java/com/google/devtools/build/lib/actions | |
parent | 8c04e9e0b5ae55107460a3be73d09f2402c51580 (diff) |
Fix #757: Bazel does not copy xml test output from sandbox.
--
MOS_MIGRATED_REVID=112404257
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/actions')
3 files changed, 67 insertions, 8 deletions
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 0a0955538e..8e34389185 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 @@ -17,6 +17,7 @@ package com.google.devtools.build.lib.actions; import com.google.common.annotations.VisibleForTesting; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableSet; import com.google.common.collect.Iterables; import com.google.devtools.build.lib.actions.extra.EnvironmentVariable; import com.google.devtools.build.lib.actions.extra.SpawnInfo; @@ -41,6 +42,7 @@ public class BaseSpawn implements Spawn { private final ImmutableMap<String, String> environment; private final ImmutableMap<String, String> executionInfo; private final ImmutableMap<PathFragment, Artifact> runfilesManifests; + private final ImmutableSet<PathFragment> optionalOutputFiles; private final RunfilesSupplier runfilesSupplier; private final ActionMetadata action; private final ResourceSet localResources; @@ -49,13 +51,15 @@ public class BaseSpawn implements Spawn { // policy on runfilesManifests and runfilesSupplier being non-empty (ie: are overlapping mappings // allowed?). @VisibleForTesting - BaseSpawn(List<String> arguments, + BaseSpawn( + List<String> arguments, Map<String, String> environment, Map<String, String> executionInfo, Map<PathFragment, Artifact> runfilesManifests, RunfilesSupplier runfilesSupplier, ActionMetadata action, - ResourceSet localResources) { + ResourceSet localResources, + Collection<PathFragment> optionalOutputFiles) { this.arguments = ImmutableList.copyOf(arguments); this.environment = ImmutableMap.copyOf(environment); this.executionInfo = ImmutableMap.copyOf(executionInfo); @@ -63,6 +67,7 @@ public class BaseSpawn implements Spawn { this.runfilesSupplier = runfilesSupplier; this.action = action; this.localResources = localResources; + this.optionalOutputFiles = ImmutableSet.copyOf(optionalOutputFiles); } /** @@ -75,8 +80,15 @@ public class BaseSpawn implements Spawn { RunfilesSupplier runfilesSupplier, ActionMetadata action, ResourceSet localResources) { - this(arguments, environment, executionInfo, ImmutableMap.<PathFragment, Artifact>of(), - runfilesSupplier, action, localResources); + this( + arguments, + environment, + executionInfo, + ImmutableMap.<PathFragment, Artifact>of(), + runfilesSupplier, + action, + localResources, + ImmutableSet.<PathFragment>of()); } /** @@ -89,8 +101,15 @@ public class BaseSpawn implements Spawn { Map<PathFragment, Artifact> runfilesManifests, ActionMetadata action, ResourceSet localResources) { - this(arguments, environment, executionInfo, runfilesManifests, EmptyRunfilesSupplier.INSTANCE, - action, localResources); + this( + arguments, + environment, + executionInfo, + runfilesManifests, + EmptyRunfilesSupplier.INSTANCE, + action, + localResources, + ImmutableSet.<PathFragment>of()); } /** @@ -101,8 +120,32 @@ public class BaseSpawn implements Spawn { Map<String, String> executionInfo, ActionMetadata action, ResourceSet localResources) { - this(arguments, environment, executionInfo, - ImmutableMap.<PathFragment, Artifact>of(), action, localResources); + this( + arguments, + environment, + executionInfo, + ImmutableMap.<PathFragment, Artifact>of(), + action, + localResources); + } + + public BaseSpawn( + List<String> arguments, + Map<String, String> environment, + Map<String, String> executionInfo, + RunfilesSupplier runfilesSupplier, + ActionMetadata action, + ResourceSet localResources, + Collection<PathFragment> optionalOutputFiles) { + this( + arguments, + environment, + executionInfo, + ImmutableMap.<PathFragment, Artifact>of(), + runfilesSupplier, + action, + localResources, + optionalOutputFiles); } public static PathFragment runfilesForFragment(PathFragment pathFragment) { @@ -210,6 +253,11 @@ public class BaseSpawn implements Spawn { } @Override + public Collection<PathFragment> getOptionalOutputFiles() { + return optionalOutputFiles; + } + + @Override public ActionMetadata getResourceOwner() { return action; } 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 2c0a0ad5ca..acb9cd64d4 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 @@ -95,6 +95,11 @@ public class DelegateSpawn implements Spawn { } @Override + public Collection<PathFragment> getOptionalOutputFiles() { + return spawn.getOptionalOutputFiles(); + } + + @Override public ActionMetadata getResourceOwner() { return spawn.getResourceOwner(); } 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 d027f70570..b4ed5c79fa 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 @@ -121,6 +121,12 @@ public interface Spawn { Collection<? extends ActionInput> getOutputFiles(); /** + * Instructs the spawn strategy to try to fetch these optional output files in addition to the + * usual output artifacts. The PathFragments should be relative to the exec root. + */ + Collection<PathFragment> getOptionalOutputFiles(); + + /** * Returns the resource owner for local fallback. */ ActionMetadata getResourceOwner(); |