diff options
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) |