diff --git a/src/main/java/com/google/devtools/build/lib/query2/cquery/CqueryTransitionResolver.java b/src/main/java/com/google/devtools/build/lib/query2/cquery/CqueryTransitionResolver.java index 1c7969f9a5abc8..bbeed69dc2780a 100644 --- a/src/main/java/com/google/devtools/build/lib/query2/cquery/CqueryTransitionResolver.java +++ b/src/main/java/com/google/devtools/build/lib/query2/cquery/CqueryTransitionResolver.java @@ -131,8 +131,8 @@ public CqueryTransitionResolver( * @see ResolvedTransition for more details. * @param configuredTarget the configured target whose dependencies are being looked up. */ - public ImmutableSet dependencies(CqueryNode configuredTarget) - throws EvaluateException, InterruptedException { + ImmutableSet dependencies(CqueryNode configuredTarget) + throws EvaluateException, InterruptedException, IncompatibleTargetException { if (!(configuredTarget instanceof RuleConfiguredTarget)) { return ImmutableSet.of(); } @@ -161,7 +161,7 @@ public ImmutableSet dependencies(CqueryNode configuredTarget eventHandler)) { throw new EvaluateException("DependencyResolver.evaluate did not complete"); } - } catch (ReportedException | UnreportedException | IncompatibleTargetException e) { + } catch (ReportedException | UnreportedException e) { throw new EvaluateException(e.getMessage()); } diff --git a/src/main/java/com/google/devtools/build/lib/query2/cquery/TransitionsOutputFormatterCallback.java b/src/main/java/com/google/devtools/build/lib/query2/cquery/TransitionsOutputFormatterCallback.java index 3c0075f3a78bcd..fdd60f5d09a79c 100644 --- a/src/main/java/com/google/devtools/build/lib/query2/cquery/TransitionsOutputFormatterCallback.java +++ b/src/main/java/com/google/devtools/build/lib/query2/cquery/TransitionsOutputFormatterCallback.java @@ -21,7 +21,9 @@ import com.google.devtools.build.lib.analysis.config.BuildOptions; import com.google.devtools.build.lib.analysis.config.OptionsDiff; import com.google.devtools.build.lib.analysis.config.StarlarkTransitionCache; +import com.google.devtools.build.lib.analysis.config.transitions.ConfigurationTransition; import com.google.devtools.build.lib.analysis.config.transitions.TransitionFactory; +import com.google.devtools.build.lib.analysis.constraints.IncompatibleTargetChecker; import com.google.devtools.build.lib.analysis.producers.BuildConfigurationKeyCache; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.events.Event; @@ -113,8 +115,18 @@ public void processOutput(Iterable partialResult) throws Interrupted buildConfigurationKeyCache) .dependencies(keyedConfiguredTarget); } catch (EvaluateException e) { - // This is an abuse of InterruptedException. - throw new InterruptedException(e.getMessage()); + eventHandler.handle( + Event.error( + String.format( + "Failed to evaluate %s: %s", keyedConfiguredTarget.getOriginalLabel(), e))); + return; + } catch (IncompatibleTargetChecker.IncompatibleTargetException e) { + eventHandler.handle( + Event.warn( + String.format( + "Skipping dependencies of incompatible target %s", + keyedConfiguredTarget.getOriginalLabel()))); + return; } for (ResolvedTransition dep : dependencies) { addResult( diff --git a/src/test/shell/integration/configured_query_test.sh b/src/test/shell/integration/configured_query_test.sh index a981b3c4f14718..5e84246ac8f3b7 100755 --- a/src/test/shell/integration/configured_query_test.sh +++ b/src/test/shell/integration/configured_query_test.sh @@ -217,6 +217,38 @@ function test_transitions_full() { assert_contains "host_dep#//$pkg:host#(exec + (TestTrimmingTransition + ConfigFeatureFlagTaggedTrimmingTransition))" output } +function test_transitions_incompatible_target() { + local -r pkg=$FUNCNAME + + mkdir -p $pkg + cat > $pkg/BUILD < output 2>"$TEST_log" || fail "Excepted success" + + assert_contains "//$pkg:gr" output + assert_not_contains "//$pkg:input" output + expect_log "WARNING: Skipping dependencies of incompatible target //$pkg:gr" +} + function write_test_targets() { mkdir -p $pkg cat > $pkg/rule.bzl <<'EOF'