aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/NoBuildEvent.java51
-rw-r--r--src/main/java/com/google/devtools/build/lib/runtime/BuildEventStreamer.java9
-rw-r--r--src/main/java/com/google/devtools/build/lib/runtime/commands/QueryCommand.java2
-rwxr-xr-xsrc/test/shell/integration/build_event_stream_test.sh13
4 files changed, 64 insertions, 11 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/NoBuildEvent.java b/src/main/java/com/google/devtools/build/lib/analysis/NoBuildEvent.java
index 152f39f0c0..7974bddaac 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/NoBuildEvent.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/NoBuildEvent.java
@@ -14,7 +14,50 @@
package com.google.devtools.build.lib.analysis;
-/**
- * This event raised to indicate that no build will be happening for the given command.
- */
-public final class NoBuildEvent {}
+import com.google.common.collect.ImmutableList;
+import com.google.devtools.build.lib.buildeventstream.BuildEvent;
+import com.google.devtools.build.lib.buildeventstream.BuildEventConverters;
+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.buildeventstream.ProgressEvent;
+import java.util.Collection;
+
+/** This event raised to indicate that no build will be happening for the given command. */
+public final class NoBuildEvent implements BuildEvent {
+ private final String command;
+ private final Long startTimeMillis;
+
+ public NoBuildEvent(String command, Long startTimeMillis) {
+ this.command = command;
+ this.startTimeMillis = startTimeMillis;
+ }
+
+ public NoBuildEvent() {
+ this(null, null);
+ }
+
+ @Override
+ public Collection<BuildEventId> getChildrenEvents() {
+ return ImmutableList.of(ProgressEvent.INITIAL_PROGRESS_UPDATE);
+ }
+
+ @Override
+ public BuildEventId getEventId() {
+ return BuildEventId.buildStartedId();
+ }
+
+ @Override
+ public BuildEventStreamProtos.BuildEvent asStreamProto(BuildEventConverters converters) {
+ BuildEventStreamProtos.BuildStarted.Builder started =
+ BuildEventStreamProtos.BuildStarted.newBuilder()
+ .setBuildToolVersion(BlazeVersionInfo.instance().getVersion());
+ if (command != null) {
+ started.setCommand(command);
+ }
+ if (startTimeMillis != null) {
+ started.setStartTimeMillis(startTimeMillis);
+ }
+ return GenericBuildEvent.protoChaining(this).setStarted(started.build()).build();
+ }
+}
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/BuildEventStreamer.java b/src/main/java/com/google/devtools/build/lib/runtime/BuildEventStreamer.java
index 19eafc98fd..74bb12218f 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/BuildEventStreamer.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/BuildEventStreamer.java
@@ -326,11 +326,6 @@ public class BuildEventStreamer implements EventHandler {
public void handle(Event event) {}
@Subscribe
- public void noBuild(NoBuildEvent event) {
- close();
- }
-
- @Subscribe
public void buildInterrupted(BuildInterruptedEvent event) {
abortReason = AbortReason.USER_INTERRUPTED;
}
@@ -374,7 +369,9 @@ public class BuildEventStreamer implements EventHandler {
buildEvent(freedEvent);
}
- if (event instanceof BuildCompleteEvent || event instanceof TestingCompleteEvent) {
+ if (event instanceof BuildCompleteEvent
+ || event instanceof TestingCompleteEvent
+ || event instanceof NoBuildEvent) {
buildComplete();
}
}
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/commands/QueryCommand.java b/src/main/java/com/google/devtools/build/lib/runtime/commands/QueryCommand.java
index f2c89865d2..47571ae9fd 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/commands/QueryCommand.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/commands/QueryCommand.java
@@ -199,7 +199,7 @@ public final class QueryCommand implements BlazeCommand {
}
}
- env.getEventBus().post(new NoBuildEvent());
+ env.getEventBus().post(new NoBuildEvent(env.getCommandName(), env.getCommandStartTime()));
if (!streamResults) {
disableAnsiCharactersFiltering(env);
try {
diff --git a/src/test/shell/integration/build_event_stream_test.sh b/src/test/shell/integration/build_event_stream_test.sh
index 881bf37e00..fabb8847ba 100755
--- a/src/test/shell/integration/build_event_stream_test.sh
+++ b/src/test/shell/integration/build_event_stream_test.sh
@@ -346,6 +346,19 @@ function test_build_only() {
expect_log 'SUCCESS'
}
+function test_query() {
+ # Verify that at least a minimally meaningful event stream is generated
+ # for non-build. In particular, we expect bazel not to crash.
+ bazel version --experimental_build_event_text_file=$TEST_log \
+ || fail "bazel version failed"
+ expect_log '^started'
+ bazel query --experimental_build_event_text_file=$TEST_log 'tests(//...)' \
+ || fail "bazel query failed"
+ expect_log '^started'
+ expect_log 'command: "query"'
+ expect_log 'args: "--experimental_build_event_text_file='
+}
+
function test_multiple_transports() {
# Verifies usage of multiple build event transports at the same time
outdir=$(mktemp -d ${TEST_TMPDIR}/bazel.XXXXXXXX)