aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/commands/FetchCommand.java28
-rwxr-xr-xsrc/test/shell/bazel/external_integration_test.sh16
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"