diff options
Diffstat (limited to 'src/main')
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; } /** |