From 3df620a1ef16e81780d7af40cd2dfa3251d40668 Mon Sep 17 00:00:00 2001 From: Googler Date: Fri, 10 Aug 2018 09:03:26 -0700 Subject: Persist mappings from original command line patterns to expanded labels in TargetParsingCompleteEvent. PiperOrigin-RevId: 208217102 --- .../lib/pkgcache/TargetParsingCompleteEvent.java | 29 ++++++++++++++++++---- .../lib/skyframe/TargetPatternPhaseFunction.java | 23 ++++++++++++++++- 2 files changed, 46 insertions(+), 6 deletions(-) (limited to 'src/main') diff --git a/src/main/java/com/google/devtools/build/lib/pkgcache/TargetParsingCompleteEvent.java b/src/main/java/com/google/devtools/build/lib/pkgcache/TargetParsingCompleteEvent.java index 5266ae5cb2..0028fd5792 100644 --- a/src/main/java/com/google/devtools/build/lib/pkgcache/TargetParsingCompleteEvent.java +++ b/src/main/java/com/google/devtools/build/lib/pkgcache/TargetParsingCompleteEvent.java @@ -17,6 +17,7 @@ import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; +import com.google.common.collect.ImmutableSetMultimap; import com.google.common.collect.Iterables; import com.google.devtools.build.lib.buildeventstream.BuildEventContext; import com.google.devtools.build.lib.buildeventstream.BuildEventId; @@ -77,6 +78,7 @@ public class TargetParsingCompleteEvent implements BuildEventWithOrderConstraint private final ImmutableSet filteredTargets; private final ImmutableSet testFilteredTargets; private final ImmutableSet expandedTargets; + private final ImmutableSetMultimap originalPatternsToLabels; /** * Construct the event. @@ -89,24 +91,27 @@ public class TargetParsingCompleteEvent implements BuildEventWithOrderConstraint Collection testFilteredTargets, List originalTargetPattern, Collection expandedTargets, - List failedTargetPatterns) { + List failedTargetPatterns, + ImmutableSetMultimap originalPatternsToLabels) { this.targets = asThinTargets(targets); this.filteredTargets = asThinTargets(filteredTargets); this.testFilteredTargets = asThinTargets(testFilteredTargets); this.originalTargetPattern = ImmutableList.copyOf(originalTargetPattern); this.expandedTargets = asThinTargets(expandedTargets); this.failedTargetPatterns = ImmutableList.copyOf(failedTargetPatterns); + this.originalPatternsToLabels = originalPatternsToLabels; } @VisibleForTesting public TargetParsingCompleteEvent(Collection targets) { this( targets, - ImmutableSet.of(), - ImmutableSet.of(), - ImmutableList.of(), + ImmutableSet.of(), + ImmutableSet.of(), + ImmutableList.of(), targets, - ImmutableList.of()); + ImmutableList.of(), + ImmutableSetMultimap.of()); } public ImmutableList getOriginalTargetPattern() { @@ -144,6 +149,20 @@ public class TargetParsingCompleteEvent implements BuildEventWithOrderConstraint return testFilteredTargets; } + /** + * Returns a mapping from patterns originally passed on the command line to the labels they were + * expanded to. + * + *

Negative patterns are not included here. Neither are labels of targets that are skipped due + * to matching a negative pattern (even if they also matched a positive pattern). + * + *

Test suite labels are included here, but not the labels of the tests that the suite expanded + * to. + */ + public ImmutableSetMultimap getOriginalPatternsToLabels() { + return originalPatternsToLabels; + } + @Override public BuildEventId getEventId() { return BuildEventId.targetPatternExpanded(originalTargetPattern); 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 955649065e..afd09b5781 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 @@ -13,10 +13,13 @@ // limitations under the License. package com.google.devtools.build.lib.skyframe; +import static com.google.common.collect.ImmutableSetMultimap.flatteningToImmutableSetMultimap; + import com.google.auto.value.AutoValue; import com.google.common.base.Preconditions; import com.google.common.base.Predicates; import com.google.common.collect.ImmutableSet; +import com.google.common.collect.ImmutableSetMultimap; import com.google.common.collect.Iterables; import com.google.common.collect.Sets; import com.google.devtools.build.lib.cmdline.Label; @@ -218,7 +221,8 @@ final class TargetPatternPhaseFunction implements SkyFunction { testFilteredTargets, options.getTargetPatterns(), expandedTargets.getTargets(), - failedPatterns)); + failedPatterns, + mapOriginalPatternsToLabels(expandedPatterns, targets.getTargets()))); env.getListener() .post(new LoadingPhaseCompleteEvent(result.getTargetLabels(), removedTargetLabels)); return result; @@ -436,6 +440,23 @@ final class TargetPatternPhaseFunction implements SkyFunction { return testTargetsBuilder.build(); } + private static ImmutableSetMultimap mapOriginalPatternsToLabels( + List expandedPatterns, Set includedTargets) { + return expandedPatterns + .stream() + .filter(expansion -> !expansion.pattern().isNegative()) + .collect( + flatteningToImmutableSetMultimap( + expansion -> expansion.pattern().getPattern(), + expansion -> + expansion + .resolvedTargets() + .getTargets() + .stream() + .filter(includedTargets::contains) + .map(Target::getLabel))); + } + @Nullable @Override public String extractTag(SkyKey skyKey) { -- cgit v1.2.3