diff options
author | lberki <lberki@google.com> | 2018-02-09 06:06:49 -0800 |
---|---|---|
committer | Copybara-Service <copybara-piper@google.com> | 2018-02-09 06:08:27 -0800 |
commit | 037c9dcf873e8037f7e6a03d4e4c6230dd5a1b27 (patch) | |
tree | 63f8107050792ce30d0ad827d464a37f3ee1841a /src/main/java/com/google/devtools/build/lib/analysis | |
parent | 9f6995ade61d14981b0ae1a9a56e690862030f13 (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')
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() { |