added 'label_kind' to '--output' for cquery https://github.com/bazelbuild/bazel/issues/10574 Closes #10632. PiperOrigin-RevId: 292228081
diff --git a/src/main/java/com/google/devtools/build/lib/query2/cquery/ConfiguredTargetQueryEnvironment.java b/src/main/java/com/google/devtools/build/lib/query2/cquery/ConfiguredTargetQueryEnvironment.java index 61ce4d8..ae05a70 100644 --- a/src/main/java/com/google/devtools/build/lib/query2/cquery/ConfiguredTargetQueryEnvironment.java +++ b/src/main/java/com/google/devtools/build/lib/query2/cquery/ConfiguredTargetQueryEnvironment.java
@@ -219,7 +219,9 @@ cqueryOptions.aspectDeps.createResolver(packageManager, eventHandler); return ImmutableList.of( new LabelAndConfigurationOutputFormatterCallback( - eventHandler, cqueryOptions, out, skyframeExecutor, accessor), + eventHandler, cqueryOptions, out, skyframeExecutor, accessor, true), + new LabelAndConfigurationOutputFormatterCallback( + eventHandler, cqueryOptions, out, skyframeExecutor, accessor, false), new TransitionsOutputFormatterCallback( eventHandler, cqueryOptions, @@ -486,4 +488,3 @@ SkyQueryEnvironment.DEFAULT_THREAD_COUNT); } } -
diff --git a/src/main/java/com/google/devtools/build/lib/query2/cquery/CqueryOptions.java b/src/main/java/com/google/devtools/build/lib/query2/cquery/CqueryOptions.java index 2de9e3a..14aea6c 100644 --- a/src/main/java/com/google/devtools/build/lib/query2/cquery/CqueryOptions.java +++ b/src/main/java/com/google/devtools/build/lib/query2/cquery/CqueryOptions.java
@@ -45,7 +45,7 @@ effectTags = {OptionEffectTag.TERMINAL_OUTPUT}, help = "The format in which the cquery results should be printed. Allowed values for cquery " - + "are: label, textproto, transitions, proto, jsonproto. If you select " + + "are: label, label_kind, textproto, transitions, proto, jsonproto. If you select " + "'transitions', you also have to specify the --transitions=(lite|full) option.") public String outputFormat;
diff --git a/src/main/java/com/google/devtools/build/lib/query2/cquery/LabelAndConfigurationOutputFormatterCallback.java b/src/main/java/com/google/devtools/build/lib/query2/cquery/LabelAndConfigurationOutputFormatterCallback.java index 0f6bc91..39c0fd2 100644 --- a/src/main/java/com/google/devtools/build/lib/query2/cquery/LabelAndConfigurationOutputFormatterCallback.java +++ b/src/main/java/com/google/devtools/build/lib/query2/cquery/LabelAndConfigurationOutputFormatterCallback.java
@@ -18,25 +18,29 @@ import com.google.devtools.build.lib.analysis.config.BuildConfiguration; import com.google.devtools.build.lib.analysis.config.CoreOptions.IncludeConfigFragmentsEnum; import com.google.devtools.build.lib.events.ExtendedEventHandler; +import com.google.devtools.build.lib.packages.Target; import com.google.devtools.build.lib.query2.engine.QueryEnvironment.TargetAccessor; import com.google.devtools.build.lib.skyframe.SkyframeExecutor; import java.io.OutputStream; /** Default Output callback for cquery. Prints a label and configuration pair per result. */ public class LabelAndConfigurationOutputFormatterCallback extends CqueryThreadsafeCallback { + private final boolean showKind; public LabelAndConfigurationOutputFormatterCallback( ExtendedEventHandler eventHandler, CqueryOptions options, OutputStream out, SkyframeExecutor skyframeExecutor, - TargetAccessor<ConfiguredTarget> accessor) { + TargetAccessor<ConfiguredTarget> accessor, + boolean showKind) { super(eventHandler, options, out, skyframeExecutor, accessor); + this.showKind = showKind; } @Override public String getName() { - return "label"; + return this.showKind ? "label_kind" : "label"; } @Override @@ -44,9 +48,13 @@ for (ConfiguredTarget configuredTarget : partialResult) { BuildConfiguration config = skyframeExecutor.getConfiguration(eventHandler, configuredTarget.getConfigurationKey()); - - StringBuilder output = - new StringBuilder() + StringBuilder output = new StringBuilder(); + if (showKind) { + Target actualTarget = accessor.getTargetFromConfiguredTarget(configuredTarget); + output = output.append(actualTarget.getTargetKind()).append(" "); + } + output = + output .append(configuredTarget.getLabel()) .append(" (") .append(config != null && config.isHostConfiguration() ? "HOST" : config) @@ -66,4 +74,4 @@ addResult(output.toString()); } } -} \ No newline at end of file +}
diff --git a/src/test/shell/integration/configured_query_test.sh b/src/test/shell/integration/configured_query_test.sh index e3019fd..da3294a 100755 --- a/src/test/shell/integration/configured_query_test.sh +++ b/src/test/shell/integration/configured_query_test.sh
@@ -90,6 +90,22 @@ assert_contains "name: \"//$pkg:japanese\"" output } +function test_basic_query_output_labelkind() { + local -r pkg=$FUNCNAME + mkdir -p $pkg + cat > $pkg/BUILD <<EOF +sh_library(name='maple', data=[':japanese']) +cc_binary(name='japanese', srcs = ['japanese.cc']) +EOF + + bazel cquery --output=label_kind "deps(//$pkg:maple)" > output 2>"$TEST_log" || + --noimplicit_deps --nohost_deps fail "Expected success" + + assert_contains "sh_library rule //$pkg:maple" output + assert_contains "cc_binary rule //$pkg:japanese" output + assert_contains "source file //$pkg:japanese.cc" output +} + function test_respects_selects() { local -r pkg=$FUNCNAME mkdir -p $pkg