diff options
author | Ulf Adams <ulfjack@google.com> | 2015-10-19 09:52:56 +0000 |
---|---|---|
committer | Lukacs Berki <lberki@google.com> | 2015-10-19 13:43:16 +0000 |
commit | a020102b64e63bd0c13548219f8214ba17b96703 (patch) | |
tree | 59a25998d9da1b8c5afce20bbf2303c4f338ec4f /src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternPhaseFunction.java | |
parent | b018ee34b3540ff7864c48091118696dc48b4b80 (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.java | 33 |
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); } /** |