aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/LegacyLoadingPhaseRunner.java33
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java15
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternPhaseFunction.java42
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternPhaseValue.java129
4 files changed, 158 insertions, 61 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/LegacyLoadingPhaseRunner.java b/src/main/java/com/google/devtools/build/lib/skyframe/LegacyLoadingPhaseRunner.java
index 3f6d11fbb1..00aa64e5e3 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/LegacyLoadingPhaseRunner.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/LegacyLoadingPhaseRunner.java
@@ -194,37 +194,46 @@ public final class LegacyLoadingPhaseRunner extends LoadingPhaseRunner {
ImmutableSet.copyOf(Sets.difference(targetsToLoad, expandedTargetsToLoad));
long testSuiteTime = timer.stop().elapsed(TimeUnit.MILLISECONDS);
+ ImmutableSet<Label> targetLabels =
+ expandedTargetsToLoad.stream().map(Target::getLabel).collect(ImmutableSet.toImmutableSet());
+ ImmutableSet<Label> testsToRunLabels = null;
+ if (testsToRun != null) {
+ testsToRunLabels =
+ testsToRun.stream().map(Target::getLabel).collect(ImmutableSet.toImmutableSet());
+ }
+ ImmutableSet<Label> removedTargetLabels =
+ removedTargets.stream().map(Target::getLabel).collect(ImmutableSet.toImmutableSet());
+
TargetPatternPhaseValue patternParsingValue =
new TargetPatternPhaseValue(
- expandedTargetsToLoad,
- testsToRun,
+ targetLabels,
+ testsToRunLabels,
targets.hasError(),
expandedResult.hasError(),
- filteredTargets,
- testFilteredTargets,
- removedTargets,
+ removedTargetLabels,
getWorkspaceName(eventHandler));
// This is the same code as SkyframeLoadingPhaseRunner.
eventHandler.post(
new TargetParsingCompleteEvent(
targets.getTargets(),
- patternParsingValue.getFilteredTargets(),
- patternParsingValue.getTestFilteredTargets(),
+ filteredTargets,
+ testFilteredTargets,
targetPatterns,
- patternParsingValue.getTargets()));
+ expandedTargetsToLoad));
eventHandler.post(new TargetParsingPhaseTimeEvent(targetPatternEvalTime));
if (callback != null) {
- callback.notifyTargets(patternParsingValue.getTargets());
+ callback.notifyTargets(expandedTargetsToLoad);
}
+
eventHandler.post(
new LoadingPhaseCompleteEvent(
- patternParsingValue.getTargets(),
- patternParsingValue.getRemovedTargets(),
+ expandedTargetsToLoad,
+ removedTargets,
packageManager.getAndClearStatistics(),
testSuiteTime));
logger.info("Target pattern evaluation finished");
- return patternParsingValue.toLoadingResult();
+ return patternParsingValue.toLoadingResult(eventHandler, packageManager);
}
private ResolvedTargets<Target> expandTestSuites(
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java
index 06bf59f9de..9a20f425a7 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java
@@ -103,6 +103,7 @@ import com.google.devtools.build.lib.packages.PackageFactory;
import com.google.devtools.build.lib.packages.RuleClassProvider;
import com.google.devtools.build.lib.packages.RuleVisibility;
import com.google.devtools.build.lib.packages.SkylarkSemanticsOptions;
+import com.google.devtools.build.lib.packages.Target;
import com.google.devtools.build.lib.pkgcache.LoadingCallback;
import com.google.devtools.build.lib.pkgcache.LoadingFailedException;
import com.google.devtools.build.lib.pkgcache.LoadingOptions;
@@ -2202,13 +2203,17 @@ public abstract class SkyframeExecutor implements WalkableGraphFactory {
TargetPatternPhaseValue patternParsingValue = evalResult.get(key);
eventHandler.post(new TargetParsingPhaseTimeEvent(timeMillis));
+ ImmutableSet<Target> targets = patternParsingValue.getTargets(eventHandler, packageManager);
if (callback != null) {
- callback.notifyTargets(patternParsingValue.getTargets());
+ callback.notifyTargets(targets);
}
- eventHandler.post(new LoadingPhaseCompleteEvent(
- patternParsingValue.getTargets(), patternParsingValue.getRemovedTargets(),
- PackageManagerStatistics.ZERO, /*timeInMs=*/0));
- return patternParsingValue.toLoadingResult();
+ eventHandler.post(
+ new LoadingPhaseCompleteEvent(
+ targets,
+ patternParsingValue.getRemovedTargets(eventHandler, packageManager),
+ PackageManagerStatistics.ZERO,
+ /*timeInMs=*/ 0));
+ return patternParsingValue.toLoadingResult(eventHandler, packageManager);
}
}
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 ee6cddcb35..2e0c286c27 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
@@ -185,17 +185,37 @@ final class TargetPatternPhaseFunction implements SkyFunction {
ResolvedTargets<Target> expandedTargets = expandedTargetsBuilder.build();
Set<Target> testSuiteTargets =
Sets.difference(targets.getTargets(), expandedTargets.getTargets());
- TargetPatternPhaseValue result = new TargetPatternPhaseValue(
- expandedTargets.getTargets(), testsToRun, preExpansionError,
- expandedTargets.hasError() || workspaceError, filteredTargets, testFilteredTargets,
- ImmutableSet.copyOf(testSuiteTargets), workspaceName);
- env.getListener().post(
- new TargetParsingCompleteEvent(
- targets.getTargets(),
- result.getFilteredTargets(),
- result.getTestFilteredTargets(),
- options.getTargetPatterns(),
- result.getTargets()));
+ ImmutableSet<Label> targetLabels =
+ expandedTargets
+ .getTargets()
+ .stream()
+ .map(Target::getLabel)
+ .collect(ImmutableSet.toImmutableSet());
+ ImmutableSet<Label> testsToRunLabels = null;
+ if (testsToRun != null) {
+ testsToRunLabels =
+ testsToRun.stream().map(Target::getLabel).collect(ImmutableSet.toImmutableSet());
+ }
+ ImmutableSet<Label> removedTargetLabels =
+ testSuiteTargets.stream().map(Target::getLabel).collect(ImmutableSet.toImmutableSet());
+
+ TargetPatternPhaseValue result =
+ new TargetPatternPhaseValue(
+ targetLabels,
+ testsToRunLabels,
+ targets.hasError(),
+ expandedTargets.hasError() || workspaceError,
+ removedTargetLabels,
+ workspaceName);
+
+ env.getListener()
+ .post(
+ new TargetParsingCompleteEvent(
+ targets.getTargets(),
+ filteredTargets,
+ testFilteredTargets,
+ options.getTargetPatterns(),
+ expandedTargets.getTargets()));
return result;
}
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 6e24906e52..787c095e91 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
@@ -17,10 +17,15 @@ 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.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadSafe;
+import com.google.devtools.build.lib.events.ExtendedEventHandler;
+import com.google.devtools.build.lib.packages.NoSuchPackageException;
+import com.google.devtools.build.lib.packages.NoSuchTargetException;
import com.google.devtools.build.lib.packages.Target;
import com.google.devtools.build.lib.pkgcache.LoadingResult;
+import com.google.devtools.build.lib.pkgcache.PackageManager;
import com.google.devtools.build.lib.pkgcache.TestFilter;
import com.google.devtools.build.lib.skyframe.serialization.NotSerializableRuntimeException;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
@@ -41,42 +46,58 @@ import javax.annotation.Nullable;
@Immutable
@ThreadSafe
@VisibleForTesting
+@AutoCodec
public final class TargetPatternPhaseValue implements SkyValue {
- private final ImmutableSet<Target> targets;
- @Nullable private final ImmutableSet<Target> testsToRun;
+ private final ImmutableSet<Label> targetLabels;
+ @Nullable private final ImmutableSet<Label> testsToRunLabels;
private final boolean hasError;
private final boolean hasPostExpansionError;
- private final ImmutableSet<Target> filteredTargets;
- private final ImmutableSet<Target> testFilteredTargets;
-
// This field is only for the purposes of generating the LoadingPhaseCompleteEvent.
// TODO(ulfjack): Support EventBus event posting in Skyframe, and remove this code again.
- private final ImmutableSet<Target> removedTargets;
+ private final ImmutableSet<Label> removedTargetLabels;
private final String workspaceName;
- TargetPatternPhaseValue(ImmutableSet<Target> targets, @Nullable ImmutableSet<Target> testsToRun,
- boolean hasError, boolean hasPostExpansionError, ImmutableSet<Target> filteredTargets,
- ImmutableSet<Target> testFilteredTargets, ImmutableSet<Target> removedTargets,
+ TargetPatternPhaseValue(
+ ImmutableSet<Label> targetLabels,
+ ImmutableSet<Label> testsToRunLabels,
+ boolean hasError,
+ boolean hasPostExpansionError,
+ ImmutableSet<Label> removedTargetLabels,
String workspaceName) {
- this.targets = Preconditions.checkNotNull(targets);
- this.testsToRun = testsToRun;
+ this.targetLabels = targetLabels;
+ this.testsToRunLabels = testsToRunLabels;
this.hasError = hasError;
this.hasPostExpansionError = hasPostExpansionError;
- this.filteredTargets = Preconditions.checkNotNull(filteredTargets);
- this.testFilteredTargets = Preconditions.checkNotNull(testFilteredTargets);
- this.removedTargets = Preconditions.checkNotNull(removedTargets);
+ this.removedTargetLabels = removedTargetLabels;
this.workspaceName = workspaceName;
}
- public ImmutableSet<Target> getTargets() {
- return targets;
+ public ImmutableSet<Target> getTargets(
+ ExtendedEventHandler eventHandler, PackageManager packageManager) {
+ return targetLabels
+ .stream()
+ .map(
+ (label) -> {
+ try {
+ return packageManager
+ .getPackage(eventHandler, label.getPackageIdentifier())
+ .getTarget(label.getName());
+ } catch (NoSuchPackageException | NoSuchTargetException | InterruptedException e) {
+ throw new RuntimeException("Failed to get package from TargetPatternPhaseValue", e);
+ }
+ })
+ .collect(ImmutableSet.toImmutableSet());
+ }
+
+ public ImmutableSet<Label> getTargetLabels() {
+ return targetLabels;
}
@Nullable
- public ImmutableSet<Target> getTestsToRun() {
- return testsToRun;
+ public ImmutableSet<Label> getTestsToRunLabels() {
+ return testsToRunLabels;
}
public boolean hasError() {
@@ -87,30 +108,72 @@ public final class TargetPatternPhaseValue implements SkyValue {
return hasPostExpansionError;
}
- public ImmutableSet<Target> getFilteredTargets() {
- return filteredTargets;
- }
-
- public ImmutableSet<Target> getTestFilteredTargets() {
- return testFilteredTargets;
- }
-
/**
- * Returns a set of targets that were present on the command line but got
- * expanded during the loading phase (currently these are only test suites;
- * this set is always empty when <code>--expand_test_suites=false</code>.
+ * Returns a set of targets that were present on the command line but got expanded during the
+ * loading phase (currently these are only test suites; this set is always empty when <code>
+ * --expand_test_suites=false</code>.
*/
- public ImmutableSet<Target> getRemovedTargets() {
- return removedTargets;
+ public ImmutableSet<Target> getRemovedTargets(
+ ExtendedEventHandler eventHandler, PackageManager packageManager) {
+ return removedTargetLabels
+ .stream()
+ .map(
+ (label) -> {
+ try {
+ return packageManager
+ .getPackage(eventHandler, label.getPackageIdentifier())
+ .getTarget(label.getName());
+ } catch (NoSuchPackageException | NoSuchTargetException | InterruptedException e) {
+ throw new RuntimeException(e);
+ }
+ })
+ .collect(ImmutableSet.toImmutableSet());
}
public String getWorkspaceName() {
return workspaceName;
}
- public LoadingResult toLoadingResult() {
+ public LoadingResult toLoadingResult(
+ ExtendedEventHandler eventHandler, PackageManager packageManager) {
+ ImmutableSet<Target> targets =
+ getTargetLabels()
+ .stream()
+ .map(
+ (label) -> {
+ try {
+ return packageManager
+ .getPackage(eventHandler, label.getPackageIdentifier())
+ .getTarget(label.getName());
+ } catch (NoSuchPackageException
+ | NoSuchTargetException
+ | InterruptedException e) {
+ throw new RuntimeException(e);
+ }
+ })
+ .collect(ImmutableSet.toImmutableSet());
+ ImmutableSet<Target> testsToRun = null;
+ if (testsToRunLabels != null) {
+ testsToRun =
+ getTestsToRunLabels()
+ .stream()
+ .map(
+ (label) -> {
+ try {
+ return packageManager
+ .getPackage(eventHandler, label.getPackageIdentifier())
+ .getTarget(label.getName());
+ } catch (NoSuchPackageException
+ | NoSuchTargetException
+ | InterruptedException e) {
+ throw new RuntimeException(e);
+ }
+ })
+ .collect(ImmutableSet.toImmutableSet());
+ }
+
return new LoadingResult(
- hasError(), hasPostExpansionError(), getTargets(), getTestsToRun(), getWorkspaceName());
+ hasError(), hasPostExpansionError(), targets, testsToRun, getWorkspaceName());
}
@SuppressWarnings("unused")