diff options
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/bazel/commands/FetchCommand.java | 28 | ||||
-rwxr-xr-x | src/test/shell/bazel/external_integration_test.sh | 16 |
2 files changed, 34 insertions, 10 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/commands/FetchCommand.java b/src/main/java/com/google/devtools/build/lib/bazel/commands/FetchCommand.java index 0c6ca842d4..aa657dca6e 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/commands/FetchCommand.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/commands/FetchCommand.java @@ -23,6 +23,7 @@ import com.google.devtools.build.lib.packages.Target; import com.google.devtools.build.lib.pkgcache.PackageCacheOptions; import com.google.devtools.build.lib.query2.AbstractBlazeQueryEnvironment; import com.google.devtools.build.lib.query2.engine.QueryEnvironment.Setting; +import com.google.devtools.build.lib.query2.engine.QueryEvalResult; import com.google.devtools.build.lib.query2.engine.QueryException; import com.google.devtools.build.lib.query2.engine.QueryExpression; import com.google.devtools.build.lib.query2.engine.ThreadSafeOutputFormatterCallback; @@ -122,13 +123,17 @@ public final class FetchCommand implements BlazeCommand { env.getCommandId().toString())); // 2. Evaluate expression: + QueryEvalResult queryEvalResult = null; try { - queryEnv.evaluateQuery(expr, new ThreadSafeOutputFormatterCallback<Target>() { - @Override - public void processOutput(Iterable<Target> partialResult) { - // Throw away the result. - } - }); + queryEvalResult = + queryEnv.evaluateQuery( + expr, + new ThreadSafeOutputFormatterCallback<Target>() { + @Override + public void processOutput(Iterable<Target> partialResult) { + // Throw away the result. + } + }); } catch (InterruptedException e) { env.getReporter() .post( @@ -148,12 +153,15 @@ public final class FetchCommand implements BlazeCommand { throw new IllegalStateException(e); } - env.getReporter().handle( - Event.progress("All external dependencies fetched successfully.")); + if (!queryEvalResult.getSuccess()) { + env.getReporter().handle(Event.progress("All external dependencies fetched successfully.")); + } + ExitCode exitCode = + queryEvalResult.getSuccess() ? ExitCode.SUCCESS : ExitCode.COMMAND_LINE_ERROR; env.getReporter() .post( new NoBuildRequestFinishedEvent( - ExitCode.SUCCESS, env.getRuntime().getClock().currentTimeMillis())); - return ExitCode.SUCCESS; + exitCode, env.getRuntime().getClock().currentTimeMillis())); + return exitCode; } } diff --git a/src/test/shell/bazel/external_integration_test.sh b/src/test/shell/bazel/external_integration_test.sh index a899c1183d..83af8fe41f 100755 --- a/src/test/shell/bazel/external_integration_test.sh +++ b/src/test/shell/bazel/external_integration_test.sh @@ -948,4 +948,20 @@ EOF || fail 'Expected @ext//:foo and //:foo not to conflict' } +function test_failing_fetch_with_keep_going() { + touch WORKSPACE + cat > BUILD <<'EOF' +package(default_visibility = ["//visibility:public"]) + +cc_binary( + name = "hello-world", + srcs = ["hello-world.cc"], + deps = ["@fake//:fake"], +) +EOF + touch hello-world.cc + + bazel fetch --keep_going //... >& $TEST_log && fail "Expected to fail" || true +} + run_suite "external tests" |