aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build
diff options
context:
space:
mode:
authorGravatar Googler <noreply@google.com>2018-02-28 12:21:14 -0800
committerGravatar Copybara-Service <copybara-piper@google.com>2018-02-28 12:23:08 -0800
commit49451c1f853acf3e60ef90635767da0addb8671e (patch)
tree4c0861005aaedcd46c8b35e80610b17bae5f1f69 /src/main/java/com/google/devtools/build
parente70aafe68eebfd4f7dedf3cccd19deae72d29db6 (diff)
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
Diffstat (limited to 'src/main/java/com/google/devtools/build')
-rw-r--r--src/main/java/com/google/devtools/build/lib/query2/output/ProtoOutputFormatter.java17
-rw-r--r--src/main/java/com/google/devtools/build/lib/query2/output/QueryOptions.java17
2 files changed, 33 insertions, 1 deletions
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<String> 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<String> newAttributePredicate(List<String> 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<Target> 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. */
@@ -164,6 +167,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<String> protoOutputRuleAttributes = ImmutableList.of("all");
+
+ @Option(
name = "xml:line_numbers",
defaultValue = "true",
category = "query",