diff options
author | 2017-09-14 19:03:25 +0200 | |
---|---|---|
committer | 2017-09-15 11:28:06 +0200 | |
commit | 82d6e8a847813737a5c05148225fb8094f851bd9 (patch) | |
tree | 9b64c7a6fe0f9e173215ce4d96943a0db597628f /src/main/java/com/google/devtools | |
parent | e67c012bbf1c3c04f96fc2cdfd748ff709f96b38 (diff) |
BEP: Upon missing test targets, still generate a finished event
If a test command is aborted as no tests are found, still generate a BuildComplete
event in the sequence of build events to properly report the exit status.
Change-Id: Id811a116b309a26e67332947b3a5c66363b1ce9c
PiperOrigin-RevId: 168703240
Diffstat (limited to 'src/main/java/com/google/devtools')
3 files changed, 57 insertions, 9 deletions
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 189ce3fb06..7b4ac281d6 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 @@ -375,11 +375,6 @@ public class BuildEventStreamer implements EventHandler { } @Subscribe - public void noTestsFound(NoTestsFound event) { - buildComplete(); - } - - @Subscribe public void buildEvent(BuildEvent event) { if (isActionWithoutError(event) || bufferUntilPrerequisitesReceived(event) @@ -421,7 +416,8 @@ public class BuildEventStreamer implements EventHandler { if (event instanceof BuildCompleteEvent || event instanceof TestingCompleteEvent - || event instanceof NoBuildRequestFinishedEvent) { + || event instanceof NoBuildRequestFinishedEvent + || event instanceof NoTestsFound) { buildComplete(); } diff --git a/src/main/java/com/google/devtools/build/lib/runtime/commands/NoTestsFound.java b/src/main/java/com/google/devtools/build/lib/runtime/commands/NoTestsFound.java index ba2d3b98ef..d21ce069fb 100644 --- a/src/main/java/com/google/devtools/build/lib/runtime/commands/NoTestsFound.java +++ b/src/main/java/com/google/devtools/build/lib/runtime/commands/NoTestsFound.java @@ -14,5 +14,53 @@ package com.google.devtools.build.lib.runtime.commands; +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; + /** This event is posted by the {@link TestCommand} if no tests were found. */ -public class NoTestsFound {} +public class NoTestsFound implements BuildEvent { + private final ExitCode exitCode; + private final long finishTimeMillis; + + public NoTestsFound(ExitCode exitCode, long finishTimeMillis) { + this.exitCode = exitCode; + this.finishTimeMillis = finishTimeMillis; + } + + public ExitCode getExitCode() { + return exitCode; + } + + @Override + public BuildEventId getEventId() { + return BuildEventId.buildFinished(); + } + + @Override + public Collection<BuildEventId> getChildrenEvents() { + return ImmutableList.of(); + } + + @Override + public BuildEventStreamProtos.BuildEvent asStreamProto(BuildEventConverters converters) { + BuildEventStreamProtos.BuildFinished.ExitCode protoExitCode = + BuildEventStreamProtos.BuildFinished.ExitCode.newBuilder() + .setName(exitCode.name()) + .setCode(exitCode.getNumericExitCode()) + .build(); + + BuildEventStreamProtos.BuildFinished finished = + BuildEventStreamProtos.BuildFinished.newBuilder() + .setOverallSuccess(ExitCode.SUCCESS.equals(exitCode)) + .setExitCode(protoExitCode) + .setFinishTimeMillis(finishTimeMillis) + .build(); + return GenericBuildEvent.protoChaining(this).setFinished(finished).build(); + } +} diff --git a/src/main/java/com/google/devtools/build/lib/runtime/commands/TestCommand.java b/src/main/java/com/google/devtools/build/lib/runtime/commands/TestCommand.java index db2797d3cd..06cf1fefe4 100644 --- a/src/main/java/com/google/devtools/build/lib/runtime/commands/TestCommand.java +++ b/src/main/java/com/google/devtools/build/lib/runtime/commands/TestCommand.java @@ -137,8 +137,12 @@ public class TestCommand implements BlazeCommand { if (testTargets.isEmpty()) { env.getReporter().handle(Event.error( null, "No test targets were found, yet testing was requested")); - env.getEventBus().post(new NoTestsFound()); - return buildResult.getSuccess() ? ExitCode.NO_TESTS_FOUND : buildResult.getExitCondition(); + + ExitCode exitCode = + buildResult.getSuccess() ? ExitCode.NO_TESTS_FOUND : buildResult.getExitCondition(); + env.getEventBus() + .post(new NoTestsFound(exitCode, env.getRuntime().getClock().currentTimeMillis())); + return exitCode; } boolean buildSuccess = buildResult.getSuccess(); |