diff options
author | 2015-09-25 15:18:49 +0000 | |
---|---|---|
committer | 2015-09-28 11:39:01 +0000 | |
commit | b393a53c5a3ce2cfd28a42d6362a02401f987543 (patch) | |
tree | 1cdffbcb8a9db946893d63d9ce5310a3b0401f7e /src/main/java/com/google/devtools/build/lib | |
parent | dc7af5392e60b6b98ebaea7ead11d47218a8df03 (diff) |
Find the test setup script based on its basename and not its precise exec path.
This is necessary so that the existence of a script //tools/test:test-setup.sh is not hardcoded into Bazel, which is in turn necessary so that the Bazel tools (//tools/...) are not required to be in the main repository.
--
MOS_MIGRATED_REVID=103943618
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib')
3 files changed, 25 insertions, 6 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/test/StandaloneTestStrategy.java b/src/main/java/com/google/devtools/build/lib/rules/test/StandaloneTestStrategy.java index 3f27547250..1d1e101b18 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/test/StandaloneTestStrategy.java +++ b/src/main/java/com/google/devtools/build/lib/rules/test/StandaloneTestStrategy.java @@ -15,6 +15,7 @@ package com.google.devtools.build.lib.rules.test; import com.google.devtools.build.lib.actions.ActionExecutionContext; +import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.actions.BaseSpawn; import com.google.devtools.build.lib.actions.EnvironmentalExecException; import com.google.devtools.build.lib.actions.ExecException; @@ -60,7 +61,7 @@ public class StandaloneTestStrategy extends TestStrategy { this.workspace = workspace; } - private static final String TEST_SETUP = "tools/test/test-setup.sh"; + private static final String TEST_SETUP_BASENAME = "test-setup.sh"; @Override public void exec(TestRunnerAction action, ActionExecutionContext actionExecutionContext) @@ -88,11 +89,12 @@ public class StandaloneTestStrategy extends TestStrategy { info.put("timeout", "" + getTimeout(action)); info.putAll(action.getTestProperties().getExecutionInfo()); + Artifact testSetup = action.getRuntimeArtifact(TEST_SETUP_BASENAME); Spawn spawn = new BaseSpawn( // Bazel lacks much of the tooling for coverage, so we don't attempt to pass a coverage // script here. - getArgs(TEST_SETUP, "", action), + getArgs(testSetup.getExecPathString(), "", action), env, info, new RunfilesSupplierImpl( diff --git a/src/main/java/com/google/devtools/build/lib/rules/test/TestActionBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/test/TestActionBuilder.java index b03386598e..1955d6a87f 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/test/TestActionBuilder.java +++ b/src/main/java/com/google/devtools/build/lib/rules/test/TestActionBuilder.java @@ -23,11 +23,13 @@ import com.google.devtools.build.lib.actions.Root; import com.google.devtools.build.lib.analysis.AnalysisEnvironment; import com.google.devtools.build.lib.analysis.FileProvider; import com.google.devtools.build.lib.analysis.FilesToRunProvider; +import com.google.devtools.build.lib.analysis.PrerequisiteArtifacts; import com.google.devtools.build.lib.analysis.RuleConfiguredTarget.Mode; import com.google.devtools.build.lib.analysis.RuleContext; import com.google.devtools.build.lib.analysis.RunfilesSupport; import com.google.devtools.build.lib.analysis.TransitiveInfoCollection; import com.google.devtools.build.lib.analysis.config.BuildConfiguration; +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.packages.TargetUtils; @@ -188,9 +190,9 @@ public final class TestActionBuilder { NestedSetBuilder<Artifact> inputsBuilder = NestedSetBuilder.stableOrder(); inputsBuilder.addTransitive( NestedSetBuilder.create(Order.STABLE_ORDER, runfilesSupport.getRunfilesMiddleman())); - for (TransitiveInfoCollection dep : ruleContext.getPrerequisites("$test_runtime", Mode.HOST)) { - inputsBuilder.addTransitive(dep.getProvider(FileProvider.class).getFilesToBuild()); - } + NestedSet<Artifact> testRuntime = PrerequisiteArtifacts.nestedSet( + ruleContext, "$test_runtime", Mode.HOST); + inputsBuilder.addTransitive(testRuntime); TestTargetProperties testProperties = new TestTargetProperties( ruleContext, executionRequirements); @@ -265,7 +267,7 @@ public final class TestActionBuilder { } env.registerAction(new TestRunnerAction( - ruleContext.getActionOwner(), inputs, + ruleContext.getActionOwner(), inputs, testRuntime, testLog, cacheStatus, coverageArtifact, microCoverageArtifact, testProperties, extraEnv, executionSettings, diff --git a/src/main/java/com/google/devtools/build/lib/rules/test/TestRunnerAction.java b/src/main/java/com/google/devtools/build/lib/rules/test/TestRunnerAction.java index 5872fb17a6..84f66cbe3f 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/test/TestRunnerAction.java +++ b/src/main/java/com/google/devtools/build/lib/rules/test/TestRunnerAction.java @@ -27,10 +27,12 @@ import com.google.devtools.build.lib.actions.ExecException; import com.google.devtools.build.lib.actions.Executor; import com.google.devtools.build.lib.actions.NotifyOnActionCacheHit; import com.google.devtools.build.lib.actions.ResourceSet; +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.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.FileSystemUtils; @@ -58,6 +60,7 @@ public class TestRunnerAction extends AbstractAction implements NotifyOnActionCa private static final String GUID = "94857c93-f11c-4cbc-8c1b-e0a281633f9e"; + private final NestedSet<Artifact> runtime; private final BuildConfiguration configuration; private final Artifact testLog; private final Artifact cacheStatus; @@ -111,6 +114,7 @@ public class TestRunnerAction extends AbstractAction implements NotifyOnActionCa */ TestRunnerAction(ActionOwner owner, Iterable<Artifact> inputs, + NestedSet<Artifact> runtime, // Must be a subset of inputs Artifact testLog, Artifact cacheStatus, Artifact coverageArtifact, @@ -126,6 +130,7 @@ public class TestRunnerAction extends AbstractAction implements NotifyOnActionCa // Note that this action only cares about the runfiles, not the mapping. new RunfilesSupplierImpl(new PathFragment("runfiles"), executionSettings.getRunfiles()), list(testLog, cacheStatus, coverageArtifact, microCoverageArtifact)); + this.runtime = runtime; this.configuration = Preconditions.checkNotNull(configuration); this.testLog = testLog; this.cacheStatus = cacheStatus; @@ -539,6 +544,16 @@ 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; + } + } + + throw new UserExecException("'" + basename + "' not found in test runtime"); + } + /** * The same set of paths as the parent test action, resolved against a given exec root. */ |