aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/analysis
diff options
context:
space:
mode:
authorGravatar lberki <lberki@google.com>2018-02-09 06:06:49 -0800
committerGravatar Copybara-Service <copybara-piper@google.com>2018-02-09 06:08:27 -0800
commit037c9dcf873e8037f7e6a03d4e4c6230dd5a1b27 (patch)
tree63f8107050792ce30d0ad827d464a37f3ee1841a /src/main/java/com/google/devtools/build/lib/analysis
parent9f6995ade61d14981b0ae1a9a56e690862030f13 (diff)
Remove hard-wired basenames for the test setup and the coverage collection script.
Accomplished by creating an explicit attribute for both of them on test actions. RELNOTES: None. PiperOrigin-RevId: 185132460
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/analysis')
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/BaseRuleClasses.java8
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkRuleClassFunctions.java8
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/test/TestActionBuilder.java9
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/test/TestRunnerAction.java24
4 files changed, 36 insertions, 13 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/BaseRuleClasses.java b/src/main/java/com/google/devtools/build/lib/analysis/BaseRuleClasses.java
index 2292c9d857..5ea8584bbe 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/BaseRuleClasses.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/BaseRuleClasses.java
@@ -138,6 +138,14 @@ public class BaseRuleClasses {
attr("$test_runtime", LABEL_LIST)
.cfg(HostTransition.INSTANCE)
.value(ImmutableList.of(env.getToolsLabel("//tools/test:runtime"))))
+ .add(attr("$test_setup_script", LABEL)
+ .cfg(HostTransition.INSTANCE)
+ .singleArtifact()
+ .value(env.getToolsLabel("//tools/test:test_setup")))
+ .add(attr("$collect_coverage_script", LABEL)
+ .cfg(HostTransition.INSTANCE)
+ .singleArtifact()
+ .value(env.getToolsLabel("//tools/test:collect_coverage")))
// Input files for test actions collecting code coverage
.add(
attr("$coverage_support", LABEL)
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkRuleClassFunctions.java b/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkRuleClassFunctions.java
index 7a83ac553b..6f7a1bfd62 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkRuleClassFunctions.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkRuleClassFunctions.java
@@ -190,6 +190,14 @@ public class SkylarkRuleClassFunctions {
.value(
ImmutableList.of(
labelCache.getUnchecked(toolsRepository + "//tools/test:runtime"))))
+ .add(attr("$test_setup_script", LABEL)
+ .cfg(HostTransition.INSTANCE)
+ .singleArtifact()
+ .value(labelCache.getUnchecked(toolsRepository + "//tools/test:test_setup")))
+ .add(attr("$collect_coverage_script", LABEL)
+ .cfg(HostTransition.INSTANCE)
+ .singleArtifact()
+ .value(labelCache.getUnchecked(toolsRepository + "//tools/test:collect_coverage")))
// Input files for test actions collecting code coverage
.add(
attr("$coverage_support", LABEL)
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/test/TestActionBuilder.java b/src/main/java/com/google/devtools/build/lib/analysis/test/TestActionBuilder.java
index 37cfbbe39f..bbce349638 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/test/TestActionBuilder.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/test/TestActionBuilder.java
@@ -202,10 +202,16 @@ public final class TestActionBuilder {
final boolean collectCodeCoverage = config.isCodeCoverageEnabled()
&& instrumentedFiles != null;
+ Artifact testSetupScript = ruleContext.getHostPrerequisiteArtifact("$test_setup_script");
+ inputsBuilder.add(testSetupScript);
+
+ Artifact collectCoverageScript = null;
TreeMap<String, String> extraTestEnv = new TreeMap<>();
TestTargetExecutionSettings executionSettings;
if (collectCodeCoverage) {
+ collectCoverageScript = ruleContext.getHostPrerequisiteArtifact("$collect_coverage_script");
+ inputsBuilder.add(collectCoverageScript);
inputsBuilder.addTransitive(instrumentedFiles.getCoverageSupportFiles());
// Add instrumented file manifest artifact to the list of inputs. This file will contain
// exec paths of all source files that should be included into the code coverage output.
@@ -301,7 +307,8 @@ public final class TestActionBuilder {
}
env.registerAction(new TestRunnerAction(
- ruleContext.getActionOwner(), inputs, testRuntime,
+ ruleContext.getActionOwner(), inputs,
+ testSetupScript, collectCoverageScript,
testLog, cacheStatus,
coverageArtifact,
testProperties, extraTestEnv, executionSettings,
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/test/TestRunnerAction.java b/src/main/java/com/google/devtools/build/lib/analysis/test/TestRunnerAction.java
index 8a7661f443..0166545c99 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/test/TestRunnerAction.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/test/TestRunnerAction.java
@@ -32,13 +32,11 @@ import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.actions.CommandLineExpansionException;
import com.google.devtools.build.lib.actions.ExecException;
import com.google.devtools.build.lib.actions.NotifyOnActionCacheHit;
-import com.google.devtools.build.lib.actions.UserExecException;
import com.google.devtools.build.lib.analysis.RunfilesSupplierImpl;
import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
import com.google.devtools.build.lib.analysis.config.RunUnder;
import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.collect.ImmutableIterable;
-import com.google.devtools.build.lib.collect.nestedset.NestedSet;
import com.google.devtools.build.lib.util.Fingerprint;
import com.google.devtools.build.lib.util.LoggingUtil;
import com.google.devtools.build.lib.vfs.FileSystem;
@@ -71,7 +69,8 @@ public class TestRunnerAction extends AbstractAction implements NotifyOnActionCa
private static final String GUID = "cc41f9d0-47a6-11e7-8726-eb6ce83a8cc8";
- private final NestedSet<Artifact> runtime;
+ private final Artifact testSetupScript;
+ private final Artifact collectCoverageScript;
private final BuildConfiguration configuration;
private final TestConfiguration testConfiguration;
private final Artifact testLog;
@@ -133,7 +132,8 @@ public class TestRunnerAction extends AbstractAction implements NotifyOnActionCa
TestRunnerAction(
ActionOwner owner,
Iterable<Artifact> inputs,
- NestedSet<Artifact> runtime, // Must be a subset of inputs
+ Artifact testSetupScript, // Must be in inputs
+ @Nullable Artifact collectCoverageScript, // Must be in inputs, if not null
Artifact testLog,
Artifact cacheStatus,
Artifact coverageArtifact,
@@ -151,7 +151,9 @@ public class TestRunnerAction extends AbstractAction implements NotifyOnActionCa
// Note that this action only cares about the runfiles, not the mapping.
new RunfilesSupplierImpl(PathFragment.create("runfiles"), executionSettings.getRunfiles()),
list(testLog, cacheStatus, coverageArtifact));
- this.runtime = runtime;
+ Preconditions.checkState((collectCoverageScript == null) == (coverageArtifact == null));
+ this.testSetupScript = testSetupScript;
+ this.collectCoverageScript = collectCoverageScript;
this.configuration = Preconditions.checkNotNull(configuration);
this.testConfiguration =
Preconditions.checkNotNull(configuration.getFragment(TestConfiguration.class));
@@ -693,14 +695,12 @@ public class TestRunnerAction extends AbstractAction implements NotifyOnActionCa
return getOutputs();
}
- public Artifact getRuntimeArtifact(String basename) throws ExecException {
- for (Artifact runtimeArtifact : runtime) {
- if (runtimeArtifact.getExecPath().getBaseName().equals(basename)) {
- return runtimeArtifact;
- }
- }
+ public Artifact getTestSetupScript() {
+ return testSetupScript;
+ }
- throw new UserExecException("'" + basename + "' not found in test runtime");
+ @Nullable public Artifact getCollectCoverageScript() {
+ return collectCoverageScript;
}
public PathFragment getShExecutable() {