aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main
diff options
context:
space:
mode:
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/NoBuildEvent.java16
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/NoBuildRequestFinishedEvent.java60
-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.java8
4 files changed, 87 insertions, 6 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 7974bddaac..cd0b83f170 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
@@ -27,19 +27,25 @@ import java.util.Collection;
public final class NoBuildEvent implements BuildEvent {
private final String command;
private final Long startTimeMillis;
+ private final boolean separateFinishedEvent;
- public NoBuildEvent(String command, Long startTimeMillis) {
+ public NoBuildEvent(String command, Long startTimeMillis, boolean separateFinishedEvent) {
this.command = command;
this.startTimeMillis = startTimeMillis;
+ this.separateFinishedEvent = separateFinishedEvent;
}
public NoBuildEvent() {
- this(null, null);
+ this(null, null, false);
}
@Override
public Collection<BuildEventId> getChildrenEvents() {
- return ImmutableList.of(ProgressEvent.INITIAL_PROGRESS_UPDATE);
+ if (separateFinishedEvent) {
+ return ImmutableList.of(ProgressEvent.INITIAL_PROGRESS_UPDATE, BuildEventId.buildFinished());
+ } else {
+ return ImmutableList.of(ProgressEvent.INITIAL_PROGRESS_UPDATE);
+ }
}
@Override
@@ -60,4 +66,8 @@ public final class NoBuildEvent implements BuildEvent {
}
return GenericBuildEvent.protoChaining(this).setStarted(started.build()).build();
}
+
+ public boolean separateFinishedEvent() {
+ return separateFinishedEvent;
+ }
}
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/NoBuildRequestFinishedEvent.java b/src/main/java/com/google/devtools/build/lib/analysis/NoBuildRequestFinishedEvent.java
new file mode 100644
index 0000000000..27ee93a363
--- /dev/null
+++ b/src/main/java/com/google/devtools/build/lib/analysis/NoBuildRequestFinishedEvent.java
@@ -0,0 +1,60 @@
+// Copyright 2016 The Bazel Authors. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package com.google.devtools.build.lib.analysis;
+
+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.util.ExitCode;
+import java.util.Collection;
+
+/** {@link BuildEvent} indicating that a request that does not involve building as finished. */
+public final class NoBuildRequestFinishedEvent implements BuildEvent {
+ private final ExitCode exitCode;
+ private final long finishTimeMillis;
+
+ public NoBuildRequestFinishedEvent(ExitCode exitCode, long finishTimeMillis) {
+ this.exitCode = exitCode;
+ this.finishTimeMillis = finishTimeMillis;
+ }
+
+ @Override
+ public Collection<BuildEventId> getChildrenEvents() {
+ return ImmutableList.<BuildEventId>of();
+ }
+
+ @Override
+ public BuildEventId getEventId() {
+ return BuildEventId.buildFinished();
+ }
+
+ @Override
+ public BuildEventStreamProtos.BuildEvent asStreamProto(BuildEventConverters converters) {
+ return GenericBuildEvent.protoChaining(this)
+ .setFinished(
+ BuildEventStreamProtos.BuildFinished.newBuilder()
+ .setExitCode(
+ BuildEventStreamProtos.BuildFinished.ExitCode.newBuilder()
+ .setName(exitCode.name())
+ .setCode(exitCode.getNumericExitCode())
+ .build())
+ .setFinishTimeMillis(finishTimeMillis)
+ .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 74bb12218f..66aaa7fe36 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
@@ -31,6 +31,7 @@ import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.actions.EventReportingArtifacts;
import com.google.devtools.build.lib.analysis.BuildInfoEvent;
import com.google.devtools.build.lib.analysis.NoBuildEvent;
+import com.google.devtools.build.lib.analysis.NoBuildRequestFinishedEvent;
import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
import com.google.devtools.build.lib.analysis.config.BuildEventWithConfiguration;
import com.google.devtools.build.lib.buildeventstream.AbortedEvent;
@@ -371,9 +372,15 @@ public class BuildEventStreamer implements EventHandler {
if (event instanceof BuildCompleteEvent
|| event instanceof TestingCompleteEvent
- || event instanceof NoBuildEvent) {
+ || event instanceof NoBuildRequestFinishedEvent) {
buildComplete();
}
+
+ if (event instanceof NoBuildEvent) {
+ if (!((NoBuildEvent) event).separateFinishedEvent()) {
+ buildComplete();
+ }
+ }
}
void flush() {
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 c9d31ba945..879806de79 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
@@ -19,6 +19,7 @@ import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Joiner;
import com.google.common.collect.ImmutableList;
import com.google.devtools.build.lib.analysis.NoBuildEvent;
+import com.google.devtools.build.lib.analysis.NoBuildRequestFinishedEvent;
import com.google.devtools.build.lib.events.Event;
import com.google.devtools.build.lib.packages.Target;
import com.google.devtools.build.lib.pkgcache.PackageCacheOptions;
@@ -207,7 +208,7 @@ public final class QueryCommand implements BlazeCommand {
}
}
- env.getEventBus().post(new NoBuildEvent(env.getCommandName(), env.getCommandStartTime()));
+ env.getEventBus().post(new NoBuildEvent(env.getCommandName(), env.getCommandStartTime(), true));
if (!streamResults) {
disableAnsiCharactersFiltering(env);
try {
@@ -241,7 +242,10 @@ public final class QueryCommand implements BlazeCommand {
env.getReporter().handle(Event.info("Empty results"));
}
- return result.getSuccess() ? ExitCode.SUCCESS : ExitCode.PARTIAL_ANALYSIS_FAILURE;
+ ExitCode exitCode = result.getSuccess() ? ExitCode.SUCCESS : ExitCode.PARTIAL_ANALYSIS_FAILURE;
+ env.getEventBus()
+ .post(new NoBuildRequestFinishedEvent(exitCode, runtime.getClock().currentTimeMillis()));
+ return exitCode;
}
/**