aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternPhaseFunction.java
diff options
context:
space:
mode:
authorGravatar Ulf Adams <ulfjack@google.com>2015-10-19 09:52:56 +0000
committerGravatar Lukacs Berki <lberki@google.com>2015-10-19 13:43:16 +0000
commita020102b64e63bd0c13548219f8214ba17b96703 (patch)
tree59a25998d9da1b8c5afce20bbf2303c4f338ec4f /src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternPhaseFunction.java
parentb018ee34b3540ff7864c48091118696dc48b4b80 (diff)
Implement the test suite expansion after target pattern evaluation.
This is still not hooked up, but it's now passing all the relevant tests that apply directly to the LoadingPhaseRunner; there are still a couple of TODOs. -- MOS_MIGRATED_REVID=105739507
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternPhaseFunction.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternPhaseFunction.java33
1 files changed, 31 insertions, 2 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternPhaseFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternPhaseFunction.java
index e4ef9ef5c4..07903d9a64 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternPhaseFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternPhaseFunction.java
@@ -17,10 +17,12 @@ import com.google.common.base.Preconditions;
import com.google.common.base.Predicates;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Sets;
+import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.cmdline.ResolvedTargets;
import com.google.devtools.build.lib.cmdline.TargetParsingException;
import com.google.devtools.build.lib.events.Event;
import com.google.devtools.build.lib.packages.Target;
+import com.google.devtools.build.lib.packages.TargetUtils;
import com.google.devtools.build.lib.pkgcache.FilteringPolicies;
import com.google.devtools.build.lib.pkgcache.LoadingPhaseRunner;
import com.google.devtools.build.lib.pkgcache.LoadingPhaseRunner.Options;
@@ -35,6 +37,7 @@ import com.google.devtools.build.skyframe.ValueOrException;
import java.util.ArrayList;
import java.util.HashSet;
+import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -64,6 +67,18 @@ final class TargetPatternPhaseFunction implements SkyFunction {
testTargets = determineTests(env, options.getTargetPatterns(), options.getTestFilter());
Preconditions.checkState(env.valuesMissing() || (testTargets != null));
}
+
+ Map<Label, SkyKey> testExpansionKeys = new LinkedHashMap<>();
+ if (targets != null) {
+ for (Target target : targets.getTargets()) {
+ if (TargetUtils.isTestSuiteRule(target)) {
+ Label label = target.getLabel();
+ SkyKey testExpansionKey = TestSuiteExpansionValue.key(ImmutableSet.of(label));
+ testExpansionKeys.put(label, testExpansionKey);
+ }
+ }
+ }
+ Map<SkyKey, SkyValue> expandedTests = env.getValues(testExpansionKeys.values());
if (env.valuesMissing()) {
return null;
}
@@ -127,8 +142,22 @@ final class TargetPatternPhaseFunction implements SkyFunction {
LoadingPhaseRunner.maybeReportDeprecation(env.getListener(), targets.getTargets());
- return new TargetPatternPhaseValue(targets.getTargets(), testsToRun, targets.hasError(),
- filteredTargets, testFilteredTargets);
+ boolean preExpansionError = targets.hasError();
+ ResolvedTargets.Builder<Target> expandedTargetsBuilder = ResolvedTargets.builder();
+ for (Target target : targets.getTargets()) {
+ if (TargetUtils.isTestSuiteRule(target)) {
+ SkyKey expansionKey =
+ Preconditions.checkNotNull(testExpansionKeys.get(target.getLabel()));
+ TestSuiteExpansionValue testExpansion =
+ (TestSuiteExpansionValue) expandedTests.get(expansionKey);
+ expandedTargetsBuilder.merge(testExpansion.getTargets());
+ } else {
+ expandedTargetsBuilder.add(target);
+ }
+ }
+ targets = expandedTargetsBuilder.build();
+ return new TargetPatternPhaseValue(targets.getTargets(), testsToRun, preExpansionError,
+ targets.hasError(), filteredTargets, testFilteredTargets);
}
/**