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 ++++++++++++++++++++-- 1 file changed, 47 insertions(+), 4 deletions(-) (limited to 'src/main/java/com/google/devtools/build/lib/analysis/NoBuildEvent.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(); + } +} -- cgit v1.2.3