From 49451c1f853acf3e60ef90635767da0addb8671e Mon Sep 17 00:00:00 2001 From: Googler Date: Wed, 28 Feb 2018 12:21:14 -0800 Subject: Add --proto:output_rule_attrs flag to blaze query to enable filtering of output to given attributes. RELNOTES[NEW]: blaze query: use --proto:output_rule_attrs to filter for given attributes PiperOrigin-RevId: 187364996 --- .../build/lib/query2/output/ProtoOutputFormatter.java | 17 ++++++++++++++++- .../devtools/build/lib/query2/output/QueryOptions.java | 17 +++++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) (limited to 'src/main') diff --git a/src/main/java/com/google/devtools/build/lib/query2/output/ProtoOutputFormatter.java b/src/main/java/com/google/devtools/build/lib/query2/output/ProtoOutputFormatter.java index e239075f9c..c2fd4b0202 100644 --- a/src/main/java/com/google/devtools/build/lib/query2/output/ProtoOutputFormatter.java +++ b/src/main/java/com/google/devtools/build/lib/query2/output/ProtoOutputFormatter.java @@ -21,6 +21,8 @@ import static com.google.devtools.build.lib.query2.proto.proto2api.Build.Target. import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Preconditions; +import com.google.common.base.Predicate; +import com.google.common.base.Predicates; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMultimap; import com.google.common.collect.ImmutableSet; @@ -58,6 +60,7 @@ import java.io.OutputStream; import java.util.Collection; import java.util.HashMap; import java.util.LinkedHashSet; +import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Set; @@ -84,6 +87,7 @@ public class ProtoOutputFormatter extends AbstractUnorderedFormatter { private boolean relativeLocations = false; protected boolean includeDefaultValues = true; + private Predicate ruleAttributePredicate = Predicates.alwaysTrue(); private boolean flattenSelects = true; protected void setDependencyFilter(QueryOptions options) { @@ -100,9 +104,20 @@ public class ProtoOutputFormatter extends AbstractUnorderedFormatter { super.setOptions(options, aspectResolver); this.relativeLocations = options.relativeLocations; this.includeDefaultValues = options.protoIncludeDefaultValues; + this.ruleAttributePredicate = newAttributePredicate(options.protoOutputRuleAttributes); this.flattenSelects = options.protoFlattenSelects; } + private static Predicate newAttributePredicate(List outputAttributes) { + if (outputAttributes.equals(ImmutableList.of("all"))) { + return Predicates.alwaysTrue(); + } else if (outputAttributes.isEmpty()) { + return Predicates.alwaysFalse(); + } else { + return Predicates.in(ImmutableSet.copyOf(outputAttributes)); + } + } + @Override public OutputFormatterCallback createPostFactoStreamCallback( final OutputStream out, final QueryOptions options) { @@ -373,7 +388,7 @@ public class ProtoOutputFormatter extends AbstractUnorderedFormatter { /** Filter out some attributes */ protected boolean includeAttribute(Rule rule, Attribute attr) { - return true; + return ruleAttributePredicate.apply(attr.getName()); } /** Allow filtering of aspect attributes. */ diff --git a/src/main/java/com/google/devtools/build/lib/query2/output/QueryOptions.java b/src/main/java/com/google/devtools/build/lib/query2/output/QueryOptions.java index 1e0b994f69..d116e4510f 100644 --- a/src/main/java/com/google/devtools/build/lib/query2/output/QueryOptions.java +++ b/src/main/java/com/google/devtools/build/lib/query2/output/QueryOptions.java @@ -13,12 +13,15 @@ // limitations under the License. package com.google.devtools.build.lib.query2.output; +import com.google.common.collect.ImmutableList; import com.google.devtools.build.lib.query2.CommonQueryOptions; import com.google.devtools.build.lib.query2.engine.QueryEnvironment.Setting; +import com.google.devtools.common.options.Converters.CommaSeparatedOptionListConverter; import com.google.devtools.common.options.EnumConverter; import com.google.devtools.common.options.Option; import com.google.devtools.common.options.OptionDocumentationCategory; import com.google.devtools.common.options.OptionEffectTag; +import java.util.List; import java.util.Set; /** Command-line options for the Blaze query language, revision 2. */ @@ -163,6 +166,20 @@ public class QueryOptions extends CommonQueryOptions { ) public boolean protoIncludeDefaultValues; + @Option( + name = "proto:output_rule_attrs", + converter = CommaSeparatedOptionListConverter.class, + defaultValue = "all", + category = "query", + documentationCategory = OptionDocumentationCategory.QUERY, + effectTags = {OptionEffectTag.TERMINAL_OUTPUT}, + help = + "Comma separated list of attributes to include in output. Defaults to all attributes. " + + "Set to empty string to not output any attribute. " + + "This option is applicable to --output=proto." + ) + public List protoOutputRuleAttributes = ImmutableList.of("all"); + @Option( name = "xml:line_numbers", defaultValue = "true", -- cgit v1.2.3