diff options
author | 2018-03-27 12:40:58 -0700 | |
---|---|---|
committer | 2018-03-27 12:42:33 -0700 | |
commit | c9dcf83ccdeced9a68ab1d5719e51c51e9881fd2 (patch) | |
tree | 30dbdf8200a63e6f78f8a6633e148fedb08ba850 /src/main/java/com/google/devtools/build/lib/buildtool | |
parent | f39f893363eb9f69262d0f6ce981a7995b1f2cf5 (diff) |
Thread configuration map through TestFilteringCompleteEvent. This isn't the most elegant solution, but I don't have a better idea.
PiperOrigin-RevId: 190656869
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/buildtool')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/buildtool/BuildTool.java | 32 | ||||
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/buildtool/buildevent/TestFilteringCompleteEvent.java | 14 |
2 files changed, 43 insertions, 3 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/buildtool/BuildTool.java b/src/main/java/com/google/devtools/build/lib/buildtool/BuildTool.java index 00138b3125..ed9024a4d0 100644 --- a/src/main/java/com/google/devtools/build/lib/buildtool/BuildTool.java +++ b/src/main/java/com/google/devtools/build/lib/buildtool/BuildTool.java @@ -18,6 +18,7 @@ import com.google.common.base.Preconditions; import com.google.common.base.Stopwatch; import com.google.common.base.Throwables; import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableSet; import com.google.devtools.build.lib.actions.BuildFailedException; import com.google.devtools.build.lib.actions.TestExecException; import com.google.devtools.build.lib.analysis.AnalysisPhaseCompleteEvent; @@ -66,15 +67,19 @@ import com.google.devtools.build.lib.profiler.ProfilePhase; import com.google.devtools.build.lib.profiler.Profiler; import com.google.devtools.build.lib.runtime.BlazeRuntime; import com.google.devtools.build.lib.runtime.CommandEnvironment; +import com.google.devtools.build.lib.skyframe.BuildConfigurationValue; import com.google.devtools.build.lib.util.AbruptExitException; import com.google.devtools.build.lib.util.ExitCode; import com.google.devtools.build.lib.util.RegexFilter; import com.google.devtools.common.options.OptionsParsingException; import java.util.Collection; +import java.util.Map; +import java.util.Objects; import java.util.Set; import java.util.concurrent.TimeUnit; import java.util.logging.Logger; import java.util.regex.Pattern; +import java.util.stream.Stream; /** * Provides the bulk of the implementation of the 'blaze build' command. @@ -489,8 +494,31 @@ public class BuildTool { env.getEventBus().post(new AnalysisPhaseCompleteEvent(analysisResult.getTargetsToBuild(), view.getTargetsVisited(), timer.stop().elapsed(TimeUnit.MILLISECONDS), view.getAndClearPkgManagerStatistics())); - env.getEventBus().post(new TestFilteringCompleteEvent(analysisResult.getTargetsToBuild(), - analysisResult.getTargetsToTest())); + ImmutableSet<BuildConfigurationValue.Key> configurationKeys = + Stream.concat( + analysisResult + .getTargetsToBuild() + .stream() + .map(ConfiguredTarget::getConfigurationKey) + .distinct(), + analysisResult.getTargetsToTest() == null + ? Stream.empty() + : analysisResult + .getTargetsToTest() + .stream() + .map(ConfiguredTarget::getConfigurationKey) + .distinct()) + .filter(Objects::nonNull) + .distinct() + .collect(ImmutableSet.toImmutableSet()); + Map<BuildConfigurationValue.Key, BuildConfiguration> configurationMap = + env.getSkyframeExecutor().getConfigurations(env.getReporter(), configurationKeys); + env.getEventBus() + .post( + new TestFilteringCompleteEvent( + analysisResult.getTargetsToBuild(), + analysisResult.getTargetsToTest(), + configurationMap)); // Check licenses. // We check licenses if the first target configuration has license checking enabled. Right now, diff --git a/src/main/java/com/google/devtools/build/lib/buildtool/buildevent/TestFilteringCompleteEvent.java b/src/main/java/com/google/devtools/build/lib/buildtool/buildevent/TestFilteringCompleteEvent.java index b205763cf7..d8e8876493 100644 --- a/src/main/java/com/google/devtools/build/lib/buildtool/buildevent/TestFilteringCompleteEvent.java +++ b/src/main/java/com/google/devtools/build/lib/buildtool/buildevent/TestFilteringCompleteEvent.java @@ -17,8 +17,11 @@ package com.google.devtools.build.lib.buildtool.buildevent; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableList; import com.google.devtools.build.lib.analysis.ConfiguredTarget; +import com.google.devtools.build.lib.analysis.config.BuildConfiguration; import com.google.devtools.build.lib.analysis.test.TestProvider; +import com.google.devtools.build.lib.skyframe.BuildConfigurationValue; import java.util.Collection; +import java.util.Map; import javax.annotation.concurrent.Immutable; /** @@ -31,17 +34,22 @@ import javax.annotation.concurrent.Immutable; public class TestFilteringCompleteEvent { private final Collection<ConfiguredTarget> targets; private final Collection<ConfiguredTarget> testTargets; + private final Map<BuildConfigurationValue.Key, BuildConfiguration> configurationMap; /** * Construct the event. + * * @param targets The set of active targets that remain. * @param testTargets The collection of tests to be run. May be null. + * @param configurationMap A map from configuration keys of all targets to the configurations. */ public TestFilteringCompleteEvent( Collection<? extends ConfiguredTarget> targets, - Collection<? extends ConfiguredTarget> testTargets) { + Collection<? extends ConfiguredTarget> testTargets, + Map<BuildConfigurationValue.Key, BuildConfiguration> configurationMap) { this.targets = ImmutableList.copyOf(targets); this.testTargets = testTargets == null ? null : ImmutableList.copyOf(testTargets); + this.configurationMap = configurationMap; if (testTargets == null) { return; } @@ -65,4 +73,8 @@ public class TestFilteringCompleteEvent { public Collection<ConfiguredTarget> getTestTargets() { return testTargets; } + + public BuildConfiguration getConfigurationForTarget(ConfiguredTarget target) { + return Preconditions.checkNotNull(configurationMap.get(target.getConfigurationKey())); + } } |