From d8c286d32513d5696b2ec8c4e7d6ffd4bb332227 Mon Sep 17 00:00:00 2001 From: Klaus Aehlig Date: Fri, 16 Jun 2017 17:30:27 +0200 Subject: Make NoBuildEvent an instance of BuildEvent Not all bazel invocations produce a BuildStartingEvent; in fact, not all commands include building. Those invocations produce a NoBuildEvent instead. However, some of those invocations, like "query", might still have important machine-readable information to report, like errors in BUILD files. So, make the NoBuildEvent a build event, capable of starting a stream of build events. Change-Id: I7cab65f029cdc0176ea5c4970308de296fb73177 PiperOrigin-RevId: 159230205 --- .../devtools/build/lib/analysis/NoBuildEvent.java | 51 ++++++++++++++++++++-- .../build/lib/runtime/BuildEventStreamer.java | 9 ++-- .../build/lib/runtime/commands/QueryCommand.java | 2 +- 3 files changed, 51 insertions(+), 11 deletions(-) (limited to 'src/main/java') 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 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 @@ -325,11 +325,6 @@ public class BuildEventStreamer implements EventHandler { @Override 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 { -- cgit v1.2.3