Fix cquery errors to not show full stack trace when `--keep_going` is present.
PiperOrigin-RevId: 420039198
diff --git a/src/main/java/com/google/devtools/build/lib/buildtool/PostAnalysisQueryProcessor.java b/src/main/java/com/google/devtools/build/lib/buildtool/PostAnalysisQueryProcessor.java
index 6d71415..f0882c6 100644
--- a/src/main/java/com/google/devtools/build/lib/buildtool/PostAnalysisQueryProcessor.java
+++ b/src/main/java/com/google/devtools/build/lib/buildtool/PostAnalysisQueryProcessor.java
@@ -94,18 +94,18 @@
if (!request.getKeepGoing()) {
throw new ViewCreationFailedException(errorMessage, e.getFailureDetail(), e);
}
- env.getReporter().error(null, errorMessage, e);
+ env.getReporter().error(null, errorMessage + ": " + e.getFailureDetail().getMessage());
} catch (IOException e) {
String errorMessage = "I/O error doing post analysis query";
+ FailureDetail failureDetail =
+ FailureDetail.newBuilder()
+ .setMessage(errorMessage + ": " + e.getMessage())
+ .setQuery(Query.newBuilder().setCode(Query.Code.OUTPUT_FORMATTER_IO_EXCEPTION))
+ .build();
if (!request.getKeepGoing()) {
- FailureDetail failureDetail =
- FailureDetail.newBuilder()
- .setMessage(errorMessage + ": " + e.getMessage())
- .setQuery(Query.newBuilder().setCode(Query.Code.OUTPUT_FORMATTER_IO_EXCEPTION))
- .build();
throw new ViewCreationFailedException(errorMessage, failureDetail, e);
}
- env.getReporter().error(null, errorMessage, e);
+ env.getReporter().error(null, failureDetail.getMessage());
} catch (QueryRuntimeHelperException e) {
throw new ExitException(DetailedExitCode.of(e.getFailureDetail()));
} catch (OptionsParsingException e) {
diff --git a/src/main/java/com/google/devtools/build/lib/events/Reporter.java b/src/main/java/com/google/devtools/build/lib/events/Reporter.java
index c9e5190..7898542 100644
--- a/src/main/java/com/google/devtools/build/lib/events/Reporter.java
+++ b/src/main/java/com/google/devtools/build/lib/events/Reporter.java
@@ -19,6 +19,7 @@
import com.google.devtools.build.lib.util.io.OutErr;
import java.io.PrintStream;
import java.util.concurrent.ConcurrentLinkedQueue;
+import javax.annotation.Nullable;
import net.starlark.java.syntax.Location;
/**
@@ -170,9 +171,15 @@
handle(Event.of(EventKind.FINISH, location, message));
}
- public void error(Location location, String message, Throwable error) {
+ public void error(Location location, String message) {
+ error(location, message, /*error=*/ null);
+ }
+
+ public void error(Location location, String message, @Nullable Throwable error) {
handle(Event.error(location, message));
- error.printStackTrace(new PrintStream(getOutErr().getErrorStream()));
+ if (error != null) {
+ error.printStackTrace(new PrintStream(getOutErr().getErrorStream()));
+ }
}
/**
diff --git a/src/test/shell/integration/configured_query_test.sh b/src/test/shell/integration/configured_query_test.sh
index 0f5e02f..2d5ec9c 100755
--- a/src/test/shell/integration/configured_query_test.sh
+++ b/src/test/shell/integration/configured_query_test.sh
@@ -1381,4 +1381,18 @@
expect_log "Unknown configuration ID 'notaconfighash'"
}
+function test_error_keep_going() {
+ local -r pkg=$FUNCNAME
+ mkdir -p $pkg
+ cat > $pkg/BUILD <<'EOF'
+sh_library(name='maple', deps=[':japanese'])
+sh_library(name='japanese')
+EOF
+
+ # This causes a failure in the cquery function, which should produce an
+ # actionable error, not a stack trace.
+ bazel cquery --keep_going "config(//$pkg:oak, notaconfighash)" > output 2>"$TEST_log" && fail "Expected error"
+ expect_not_log "QueryException"
+}
+
run_suite "${PRODUCT_NAME} configured query tests"