Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[6.4.0] Add --consistent_labels flag to all query commands #19567

Merged
merged 3 commits into from
Sep 19, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ java_library(
"//src/main/java/com/google/devtools/build/lib/bazel/bzlmod:repo_rule_value",
"//src/main/java/com/google/devtools/build/lib/cmdline",
"//src/main/java/com/google/devtools/build/lib/packages",
"//src/main/java/com/google/devtools/build/lib/packages:label_printer",
"//src/main/java/com/google/devtools/build/lib/query2/query/output",
"//src/main/java/com/google/devtools/build/lib/util:maybe_complete_set",
"//src/main/java/com/google/devtools/common/options",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@
import com.google.devtools.build.lib.bazel.bzlmod.modcommand.ModExecutor.ResultNode.IsExpanded;
import com.google.devtools.build.lib.bazel.bzlmod.modcommand.ModExecutor.ResultNode.IsIndirect;
import com.google.devtools.build.lib.bazel.bzlmod.modcommand.ModExecutor.ResultNode.NodeMetadata;
import com.google.devtools.build.lib.packages.LabelPrinter;
import com.google.devtools.build.lib.packages.RawAttributeMapper;
import com.google.devtools.build.lib.packages.Rule;
import com.google.devtools.build.lib.query2.query.output.BuildOutputFormatter.AttributeReader;
Expand Down Expand Up @@ -627,7 +628,8 @@ static class RuleDisplayOutputter {
new TargetOutputter(
this.printer,
(rule, attr) -> RawAttributeMapper.of(rule).isConfigurable(attr.getName()),
"\n");
"\n",
LabelPrinter.legacy());
}

private void outputRule(Rule rule) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ java_library(
"//src/main/java/com/google/devtools/build/lib/cmdline",
"//src/main/java/com/google/devtools/build/lib/events",
"//src/main/java/com/google/devtools/build/lib/packages",
"//src/main/java/com/google/devtools/build/lib/packages:label_printer",
"//src/main/java/com/google/devtools/build/lib/pkgcache",
"//src/main/java/com/google/devtools/build/lib/query2/common:abstract-blaze-query-env",
"//src/main/java/com/google/devtools/build/lib/query2/common:universe-scope",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
import com.google.devtools.build.lib.cmdline.TargetPattern;
import com.google.devtools.build.lib.cmdline.TargetPattern.Parser;
import com.google.devtools.build.lib.events.Event;
import com.google.devtools.build.lib.packages.LabelPrinter;
import com.google.devtools.build.lib.packages.Target;
import com.google.devtools.build.lib.pkgcache.PackageOptions;
import com.google.devtools.build.lib.query2.common.AbstractBlazeQueryEnvironment;
Expand Down Expand Up @@ -127,7 +128,8 @@ public BlazeCommandResult exec(CommandEnvironment env, OptionsParsingResult opti
threadsOption.threads,
EnumSet.noneOf(Setting.class),
/* useGraphlessQuery= */ true,
mainRepoTargetParser);
mainRepoTargetParser,
LabelPrinter.legacy());

// 1. Parse query:
QueryExpression expr;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
import com.google.devtools.build.lib.analysis.config.BuildConfigurationValue;
import com.google.devtools.build.lib.cmdline.TargetPattern;
import com.google.devtools.build.lib.events.Event;
import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions;
import com.google.devtools.build.lib.query2.PostAnalysisQueryEnvironment;
import com.google.devtools.build.lib.query2.PostAnalysisQueryEnvironment.TopLevelConfigurations;
import com.google.devtools.build.lib.query2.aquery.ActionGraphProtoOutputFormatterCallback;
Expand Down Expand Up @@ -53,6 +54,7 @@
import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;
import javax.annotation.Nullable;
import net.starlark.java.eval.StarlarkSemantics;

/** Performs {@code aquery} processing. */
public final class AqueryProcessor extends PostAnalysisQueryProcessor<KeyedConfiguredTargetValue> {
Expand Down Expand Up @@ -133,6 +135,9 @@ protected PostAnalysisQueryEnvironment<KeyedConfiguredTargetValue> getQueryEnvir
.build();
AqueryOptions aqueryOptions = request.getOptions(AqueryOptions.class);

StarlarkSemantics starlarkSemantics =
env.getSkyframeExecutor()
.getEffectiveStarlarkSemantics(env.getOptions().getOptions(BuildLanguageOptions.class));
ActionGraphQueryEnvironment queryEnvironment =
new ActionGraphQueryEnvironment(
request.getKeepGoing(),
Expand All @@ -143,7 +148,10 @@ protected PostAnalysisQueryEnvironment<KeyedConfiguredTargetValue> getQueryEnvir
mainRepoTargetParser,
env.getPackageManager().getPackagePath(),
() -> walkableGraph,
aqueryOptions);
aqueryOptions,
request
.getOptions(AqueryOptions.class)
.getLabelPrinter(starlarkSemantics, mainRepoTargetParser.getRepoMapping()));
queryEnvironment.setActionFilters(actionFilters);

return queryEnvironment;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
import com.google.common.collect.ImmutableList;
import com.google.devtools.build.lib.analysis.config.BuildConfigurationValue;
import com.google.devtools.build.lib.cmdline.TargetPattern;
import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions;
import com.google.devtools.build.lib.query2.PostAnalysisQueryEnvironment.TopLevelConfigurations;
import com.google.devtools.build.lib.query2.cquery.ConfiguredTargetQueryEnvironment;
import com.google.devtools.build.lib.query2.cquery.CqueryOptions;
Expand All @@ -26,6 +27,7 @@
import com.google.devtools.build.skyframe.SkyKey;
import com.google.devtools.build.skyframe.WalkableGraph;
import java.util.Collection;
import net.starlark.java.eval.StarlarkSemantics;

/** Performs {@code cquery} processing. */
public final class CqueryProcessor extends PostAnalysisQueryProcessor<KeyedConfiguredTarget> {
Expand All @@ -50,6 +52,9 @@ protected ConfiguredTargetQueryEnvironment getQueryEnvironment(
.addAll(env.getRuntime().getQueryFunctions())
.build();
CqueryOptions cqueryOptions = request.getOptions(CqueryOptions.class);
StarlarkSemantics starlarkSemantics =
env.getSkyframeExecutor()
.getEffectiveStarlarkSemantics(env.getOptions().getOptions(BuildLanguageOptions.class));
return new ConfiguredTargetQueryEnvironment(
request.getKeepGoing(),
env.getReporter(),
Expand All @@ -61,6 +66,9 @@ protected ConfiguredTargetQueryEnvironment getQueryEnvironment(
env.getPackageManager().getPackagePath(),
() -> walkableGraph,
cqueryOptions,
request.getTopLevelArtifactContext());
request.getTopLevelArtifactContext(),
request
.getOptions(CqueryOptions.class)
.getLabelPrinter(starlarkSemantics, mainRepoTargetParser.getRepoMapping()));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
import com.google.devtools.build.lib.buildtool.BuildTool.ExitException;
import com.google.devtools.build.lib.cmdline.TargetPattern;
import com.google.devtools.build.lib.events.Event;
import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions;
import com.google.devtools.build.lib.query2.NamedThreadSafeOutputFormatterCallback;
import com.google.devtools.build.lib.query2.PostAnalysisQueryEnvironment;
import com.google.devtools.build.lib.query2.PostAnalysisQueryEnvironment.TopLevelConfigurations;
Expand Down Expand Up @@ -166,7 +167,10 @@ private void doPostAnalysisQuery(
env.getSkyframeExecutor(),
hostConfiguration,
runtime.getRuleClassProvider().getTrimmingTransitionFactory(),
env.getPackageManager());
env.getPackageManager(),
env.getSkyframeExecutor()
.getEffectiveStarlarkSemantics(
env.getOptions().getOptions(BuildLanguageOptions.class)));
String outputFormat = postAnalysisQueryEnvironment.getOutputFormat();
NamedThreadSafeOutputFormatterCallback<T> callback =
NamedThreadSafeOutputFormatterCallback.selectCallback(outputFormat, callbacks);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -92,29 +92,46 @@ public static Build.Attribute getAttributeProto(
attr.getType(),
value,
explicitlySpecified,
encodeBooleanAndTriStateAsIntegerAndString);
encodeBooleanAndTriStateAsIntegerAndString,
LabelPrinter.legacy());
}

public static Build.Attribute getAttributeProto(
Attribute attr,
@Nullable Object value,
boolean explicitlySpecified,
boolean encodeBooleanAndTriStateAsIntegerAndString,
LabelPrinter labelPrinter) {
return getAttributeProto(
attr.getName(),
attr.getType(),
value,
explicitlySpecified,
encodeBooleanAndTriStateAsIntegerAndString,
labelPrinter);
}

private static Build.Attribute getAttributeProto(
String name,
Type<?> type,
@Nullable Object value,
boolean explicitlySpecified,
boolean encodeBooleanAndTriStateAsIntegerAndString) {
boolean encodeBooleanAndTriStateAsIntegerAndString,
LabelPrinter labelPrinter) {
Build.Attribute.Builder attrPb = Build.Attribute.newBuilder();
attrPb.setName(name);
attrPb.setExplicitlySpecified(explicitlySpecified);
maybeSetNoDep(type, attrPb);

if (value instanceof SelectorList<?>) {
attrPb.setType(Discriminator.SELECTOR_LIST);
writeSelectorListToBuilder(attrPb, type, (SelectorList<?>) value);
writeSelectorListToBuilder(attrPb, type, (SelectorList<?>) value, labelPrinter);
} else {
attrPb.setType(ProtoUtils.getDiscriminatorFromType(type));
if (value != null) {
AttributeBuilderAdapter adapter =
new AttributeBuilderAdapter(attrPb, encodeBooleanAndTriStateAsIntegerAndString);
writeAttributeValueToBuilder(adapter, type, value);
writeAttributeValueToBuilder(adapter, type, value, labelPrinter);
}
}

Expand All @@ -130,7 +147,10 @@ private static void maybeSetNoDep(Type<?> type, Build.Attribute.Builder attrPb)
}

private static void writeSelectorListToBuilder(
Build.Attribute.Builder attrPb, Type<?> type, SelectorList<?> selectorList) {
Build.Attribute.Builder attrPb,
Type<?> type,
SelectorList<?> selectorList,
LabelPrinter labelPrinter) {
Build.Attribute.SelectorList.Builder selectorListBuilder =
Build.Attribute.SelectorList.newBuilder();
selectorListBuilder.setType(ProtoUtils.getDiscriminatorFromType(type));
Expand All @@ -147,13 +167,16 @@ private static void writeSelectorListToBuilder(
Label condition = entry.getKey();
SelectorEntry.Builder selectorEntryBuilder =
SelectorEntry.newBuilder()
.setLabel(condition.toString())
.setLabel(labelPrinter.toString(condition))
.setIsDefaultValue(!selector.isValueSet(condition));

Object conditionValue = entry.getValue();
if (conditionValue != null) {
writeAttributeValueToBuilder(
new SelectorEntryBuilderAdapter(selectorEntryBuilder), type, conditionValue);
new SelectorEntryBuilderAdapter(selectorEntryBuilder),
type,
conditionValue,
labelPrinter);
}
selectorBuilder.addEntries(selectorEntryBuilder);
}
Expand All @@ -166,25 +189,29 @@ private static void writeSelectorListToBuilder(
* Set the appropriate type and value. Since string and string list store values for multiple
* types, use the toString() method on the objects instead of casting them.
*/
@SuppressWarnings("unchecked")
private static void writeAttributeValueToBuilder(
AttributeValueBuilderAdapter builder, Type<?> type, Object value) {
AttributeValueBuilderAdapter builder, Type<?> type, Object value, LabelPrinter labelPrinter) {
if (type == INTEGER) {
builder.setIntValue(((StarlarkInt) value).toIntUnchecked());
} else if (type == STRING
|| type == LABEL
} else if (type == STRING) {
builder.setStringValue(value.toString());
} else if (type == LABEL
|| type == NODEP_LABEL
|| type == OUTPUT
|| type == GENQUERY_SCOPE_TYPE) {

builder.setStringValue(value.toString());
} else if (type == STRING_LIST
|| type == LABEL_LIST
builder.setStringValue(labelPrinter.toString((Label) value));
} else if (type == STRING_LIST || type == DISTRIBUTIONS) {
for (Object entry : (Collection<?>) value) {
builder.addStringListValue(entry.toString());
}
} else if (type == LABEL_LIST
|| type == NODEP_LABEL_LIST
|| type == OUTPUT_LIST
|| type == DISTRIBUTIONS
|| type == GENQUERY_SCOPE_TYPE_LIST) {
for (Object entry : (Collection<?>) value) {
builder.addStringListValue(entry.toString());
for (Label entry : (Collection<Label>) value) {
builder.addStringListValue(labelPrinter.toString(entry));
}
} else if (type == INTEGER_LIST) {
for (Object elem : (Collection<?>) value) {
Expand All @@ -205,7 +232,6 @@ private static void writeAttributeValueToBuilder(
}
builder.setLicense(licensePb);
} else if (type == STRING_DICT) {
@SuppressWarnings("unchecked")
Map<String, String> dict = (Map<String, String>) value;
for (Map.Entry<String, String> keyValueList : dict.entrySet()) {
StringDictEntry.Builder entry =
Expand All @@ -215,7 +241,6 @@ private static void writeAttributeValueToBuilder(
builder.addStringDictValue(entry);
}
} else if (type == STRING_LIST_DICT) {
@SuppressWarnings("unchecked")
Map<String, List<String>> dict = (Map<String, List<String>>) value;
for (Map.Entry<String, List<String>> dictEntry : dict.entrySet()) {
StringListDictEntry.Builder entry =
Expand All @@ -226,22 +251,20 @@ private static void writeAttributeValueToBuilder(
builder.addStringListDictValue(entry);
}
} else if (type == LABEL_DICT_UNARY) {
@SuppressWarnings("unchecked")
Map<String, Label> dict = (Map<String, Label>) value;
for (Map.Entry<String, Label> dictEntry : dict.entrySet()) {
LabelDictUnaryEntry.Builder entry =
LabelDictUnaryEntry.newBuilder()
.setKey(dictEntry.getKey())
.setValue(dictEntry.getValue().toString());
.setValue(labelPrinter.toString(dictEntry.getValue()));
builder.addLabelDictUnaryValue(entry);
}
} else if (type == LABEL_KEYED_STRING_DICT) {
@SuppressWarnings("unchecked")
Map<Label, String> dict = (Map<Label, String>) value;
for (Map.Entry<Label, String> dictEntry : dict.entrySet()) {
LabelKeyedStringDictEntry.Builder entry =
LabelKeyedStringDictEntry.newBuilder()
.setKey(dictEntry.getKey().toString())
.setKey(labelPrinter.toString(dictEntry.getKey()))
.setValue(dictEntry.getValue());
builder.addLabelKeyedStringDictValue(entry);
}
Expand Down
11 changes: 11 additions & 0 deletions src/main/java/com/google/devtools/build/lib/packages/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -49,12 +49,14 @@ java_library(
"GlobberUtils.java",
"ExecGroup.java",
"ConfiguredAttributeMapper.java",
"LabelPrinter.java",
],
),
deps = [
":exec_group",
":globber",
":globber_utils",
":label_printer",
"//src/main/java/com/google/devtools/build/docgen/annot",
"//src/main/java/com/google/devtools/build/lib/actions:execution_requirements",
"//src/main/java/com/google/devtools/build/lib/actions:thread_state_receiver",
Expand Down Expand Up @@ -133,3 +135,12 @@ java_library(
"//third_party:guava",
],
)

java_library(
name = "label_printer",
srcs = ["LabelPrinter.java"],
deps = [
"//src/main/java/com/google/devtools/build/lib/cmdline",
"//src/main/java/net/starlark/java/eval",
],
)
Loading