aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
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
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')
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternPhaseFunction.java33
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternPhaseValue.java8
2 files changed, 38 insertions, 3 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);
}
/**
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternPhaseValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternPhaseValue.java
index d2982c0e94..6b3d5ae70d 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternPhaseValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternPhaseValue.java
@@ -43,16 +43,18 @@ public final class TargetPatternPhaseValue implements SkyValue {
private final ImmutableSet<Target> targets;
@Nullable private final ImmutableSet<Target> testsToRun;
private final boolean hasError;
+ private final boolean hasPostExpansionError;
private final ImmutableSet<Target> filteredTargets;
private final ImmutableSet<Target> testFilteredTargets;
TargetPatternPhaseValue(ImmutableSet<Target> targets, @Nullable ImmutableSet<Target> testsToRun,
- boolean hasError, ImmutableSet<Target> filteredTargets,
+ boolean hasError, boolean hasPostExpansionError, ImmutableSet<Target> filteredTargets,
ImmutableSet<Target> testFilteredTargets) {
this.targets = Preconditions.checkNotNull(targets);
this.testsToRun = testsToRun;
this.hasError = hasError;
+ this.hasPostExpansionError = hasPostExpansionError;
this.filteredTargets = Preconditions.checkNotNull(filteredTargets);
this.testFilteredTargets = Preconditions.checkNotNull(testFilteredTargets);
}
@@ -70,6 +72,10 @@ public final class TargetPatternPhaseValue implements SkyValue {
return hasError;
}
+ public boolean hasPostExpansionError() {
+ return hasPostExpansionError;
+ }
+
public ImmutableSet<Target> getFilteredTargets() {
return filteredTargets;
}