aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Klaus Aehlig <aehlig@google.com>2016-10-10 11:25:52 +0000
committerGravatar Yue Gan <yueg@google.com>2016-10-10 13:35:22 +0000
commit66ae95a2e6043a3b01817de6810a094a2ed78e14 (patch)
treee166f934c435e22754cb45db423da4db680d5de0
parent9c1090bcd88f187e8849a08fa7cd42246a9b5095 (diff)
Post the expansion of a target pattern on the event stream
...by making TargetParsingCompleteEvent an instance of BuildEvent. The main value of this event on the event stream is that it is now know which actual targets to expect. -- Change-Id: I50b16f825d742d28e719692489de701d16195efa Reviewed-on: https://bazel-review.googlesource.com/#/c/6278 MOS_MIGRATED_REVID=135661452
-rw-r--r--src/main/java/com/google/devtools/build/lib/BUILD2
-rw-r--r--src/main/java/com/google/devtools/build/lib/buildeventstream/BuildEventId.java10
-rw-r--r--src/main/java/com/google/devtools/build/lib/buildeventstream/proto/build_event_stream.proto15
-rw-r--r--src/main/java/com/google/devtools/build/lib/pkgcache/LegacyLoadingPhaseRunner.java10
-rw-r--r--src/main/java/com/google/devtools/build/lib/pkgcache/TargetParsingCompleteEvent.java61
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java10
6 files changed, 91 insertions, 17 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/BUILD b/src/main/java/com/google/devtools/build/lib/BUILD
index 4f3f63b8b0..e9fef91231 100644
--- a/src/main/java/com/google/devtools/build/lib/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/BUILD
@@ -410,6 +410,7 @@ java_library(
"//src/main/java/com/google/devtools/build/lib/cmdline",
],
deps = [
+ ":buildeventstream",
":collect",
":concurrent",
":events",
@@ -418,6 +419,7 @@ java_library(
":transitive-info-provider",
":util",
":vfs",
+ "//src/main/java/com/google/devtools/build/lib/buildeventstream/proto:build_event_stream_java_proto",
"//src/main/java/com/google/devtools/build/lib/cmdline",
"//src/main/java/com/google/devtools/common/options",
"//src/main/protobuf:build_java_proto",
diff --git a/src/main/java/com/google/devtools/build/lib/buildeventstream/BuildEventId.java b/src/main/java/com/google/devtools/build/lib/buildeventstream/BuildEventId.java
index 6415241f02..8262cd4b8b 100644
--- a/src/main/java/com/google/devtools/build/lib/buildeventstream/BuildEventId.java
+++ b/src/main/java/com/google/devtools/build/lib/buildeventstream/BuildEventId.java
@@ -14,6 +14,7 @@
package com.google.devtools.build.lib.buildeventstream;
+import com.google.devtools.build.lib.cmdline.Label;
import com.google.protobuf.TextFormat;
import java.io.Serializable;
import java.util.List;
@@ -90,4 +91,13 @@ public final class BuildEventId implements Serializable {
return new BuildEventId(
BuildEventStreamProtos.BuildEventId.newBuilder().setPattern(patternId).build());
}
+
+ public static BuildEventId targetCompleted(Label target) {
+ BuildEventStreamProtos.BuildEventId.TargetCompletedId targetId =
+ BuildEventStreamProtos.BuildEventId.TargetCompletedId.newBuilder()
+ .setLabel(target.toString())
+ .build();
+ return new BuildEventId(
+ BuildEventStreamProtos.BuildEventId.newBuilder().setTargetCompleted(targetId).build());
+ }
}
diff --git a/src/main/java/com/google/devtools/build/lib/buildeventstream/proto/build_event_stream.proto b/src/main/java/com/google/devtools/build/lib/buildeventstream/proto/build_event_stream.proto
index 74e20ce55e..5d3ca56f6c 100644
--- a/src/main/java/com/google/devtools/build/lib/buildeventstream/proto/build_event_stream.proto
+++ b/src/main/java/com/google/devtools/build/lib/buildeventstream/proto/build_event_stream.proto
@@ -55,11 +55,18 @@ message BuildEventId {
repeated string pattern = 1;
}
+ // Identifier of an event indicating that a target was built completely; this
+ // does not include running the test if the target is a test target.
+ message TargetCompletedId {
+ string label = 1;
+ }
+
oneof id {
UnknownBuildEventId unknown = 1;
ProgressId progress = 2;
BuildStartedId started = 3;
PatternExpandedId pattern = 4;
+ TargetCompletedId target_completed = 5;
}
}
@@ -123,6 +130,13 @@ message BuildStarted {
string workspace_directory = 7;
}
+// Payload of the event indicating the expansion of a target pattern.
+// The main information is in the chaining part: the id will contain the
+// target pattern that was expanded and the children id will contain the
+// target or target pattern it was expanded to.
+message PatternExpanded {
+}
+
// Message describing a build event. Events will have an identifier that
// is unique within a given build invocation; they also announce follow-up
// events as children. More details, which are specific to the kind of event
@@ -135,5 +149,6 @@ message BuildEvent {
Progress progress = 3;
Aborted aborted = 4;
BuildStarted started = 5;
+ PatternExpanded expanded = 6;
};
}
diff --git a/src/main/java/com/google/devtools/build/lib/pkgcache/LegacyLoadingPhaseRunner.java b/src/main/java/com/google/devtools/build/lib/pkgcache/LegacyLoadingPhaseRunner.java
index 6d7fc3f251..388e4b84f8 100644
--- a/src/main/java/com/google/devtools/build/lib/pkgcache/LegacyLoadingPhaseRunner.java
+++ b/src/main/java/com/google/devtools/build/lib/pkgcache/LegacyLoadingPhaseRunner.java
@@ -174,9 +174,13 @@ public final class LegacyLoadingPhaseRunner extends LoadingPhaseRunner {
}
}
- eventBus.post(new TargetParsingCompleteEvent(targets.getTargets(),
- filteredTargets, testFilteredTargets,
- timer.stop().elapsed(TimeUnit.MILLISECONDS)));
+ eventBus.post(
+ new TargetParsingCompleteEvent(
+ targets.getTargets(),
+ filteredTargets,
+ testFilteredTargets,
+ timer.stop().elapsed(TimeUnit.MILLISECONDS),
+ targetPatterns));
if (targets.hasError()) {
eventHandler.handle(Event.warn("Target pattern parsing failed. Continuing anyway"));
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 56aff59aee..8e0022a46a 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
@@ -15,18 +15,23 @@ package com.google.devtools.build.lib.pkgcache;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Function;
+import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Iterables;
+import com.google.devtools.build.lib.buildeventstream.BuildEvent;
+import com.google.devtools.build.lib.buildeventstream.BuildEventId;
+import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos;
+import com.google.devtools.build.lib.buildeventstream.GenericBuildEvent;
import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.packages.Target;
-
+import com.google.devtools.build.lib.packages.TargetUtils;
import java.util.Collection;
+import java.util.List;
-/**
- * This event is fired just after target pattern evaluation is completed.
- */
-public class TargetParsingCompleteEvent {
+/** This event is fired just after target pattern evaluation is completed. */
+public class TargetParsingCompleteEvent implements BuildEvent {
+ private final ImmutableList<String> originalTargetPattern;
private final ImmutableSet<Target> targets;
private final ImmutableSet<Target> filteredTargets;
private final ImmutableSet<Target> testFilteredTargets;
@@ -34,21 +39,30 @@ public class TargetParsingCompleteEvent {
/**
* Construct the event.
- * @param targets The targets that were parsed from the
- * command-line pattern.
+ *
+ * @param targets The targets that were parsed from the command-line pattern.
*/
- public TargetParsingCompleteEvent(Collection<Target> targets,
- Collection<Target> filteredTargets, Collection<Target> testFilteredTargets,
- long timeInMs) {
+ public TargetParsingCompleteEvent(
+ Collection<Target> targets,
+ Collection<Target> filteredTargets,
+ Collection<Target> testFilteredTargets,
+ long timeInMs,
+ List<String> originalTargetPattern) {
this.timeInMs = timeInMs;
this.targets = ImmutableSet.copyOf(targets);
this.filteredTargets = ImmutableSet.copyOf(filteredTargets);
this.testFilteredTargets = ImmutableSet.copyOf(testFilteredTargets);
+ this.originalTargetPattern = ImmutableList.copyOf(originalTargetPattern);
}
@VisibleForTesting
public TargetParsingCompleteEvent(Collection<Target> targets) {
- this(targets, ImmutableSet.<Target>of(), ImmutableSet.<Target>of(), 0);
+ this(
+ targets,
+ ImmutableSet.<Target>of(),
+ ImmutableSet.<Target>of(),
+ 0,
+ ImmutableList.<String>of());
}
/**
@@ -84,4 +98,29 @@ public class TargetParsingCompleteEvent {
public long getTimeInMs() {
return timeInMs;
}
+
+ @Override
+ public BuildEventId getEventId() {
+ return BuildEventId.targetPatternExpanded(originalTargetPattern);
+ }
+
+ @Override
+ public Collection<BuildEventId> getChildrenEvents() {
+ ImmutableList.Builder childrenBuilder = ImmutableList.builder();
+ for (Target target : targets) {
+ // Test suits won't produce a target-complete event, so do not anounce their
+ // completion as children.
+ if (!TargetUtils.isTestSuiteRule(target)) {
+ childrenBuilder.add(BuildEventId.targetCompleted(target.getLabel()));
+ }
+ }
+ return childrenBuilder.build();
+ }
+
+ @Override
+ public BuildEventStreamProtos.BuildEvent asStreamProto() {
+ return GenericBuildEvent.protoChaining(this)
+ .setExpanded(BuildEventStreamProtos.PatternExpanded.newBuilder().build())
+ .build();
+ }
}
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 9d4d72d2c7..90f28ea14a 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
@@ -1839,9 +1839,13 @@ public abstract class SkyframeExecutor implements WalkableGraphFactory {
long time = timer.stop().elapsed(TimeUnit.MILLISECONDS);
TargetPatternPhaseValue patternParsingValue = evalResult.get(key);
- eventBus.post(new TargetParsingCompleteEvent(patternParsingValue.getOriginalTargets(),
- patternParsingValue.getFilteredTargets(), patternParsingValue.getTestFilteredTargets(),
- time));
+ eventBus.post(
+ new TargetParsingCompleteEvent(
+ patternParsingValue.getOriginalTargets(),
+ patternParsingValue.getFilteredTargets(),
+ patternParsingValue.getTestFilteredTargets(),
+ time,
+ targetPatterns));
if (callback != null) {
callback.notifyTargets(patternParsingValue.getTargets());
}