Use graphless query when possible. Next step is to explore whether we can change the default of --order_output. RELNOTES: None PiperOrigin-RevId: 277465149
diff --git a/src/main/java/com/google/devtools/build/lib/query2/query/output/QueryOptions.java b/src/main/java/com/google/devtools/build/lib/query2/query/output/QueryOptions.java index fd4e726..902e5bc 100644 --- a/src/main/java/com/google/devtools/build/lib/query2/query/output/QueryOptions.java +++ b/src/main/java/com/google/devtools/build/lib/query2/query/output/QueryOptions.java
@@ -19,6 +19,7 @@ import com.google.devtools.common.options.Option; import com.google.devtools.common.options.OptionDocumentationCategory; import com.google.devtools.common.options.OptionEffectTag; +import com.google.devtools.common.options.TriState; import java.util.Set; /** Command-line options for the Blaze query language, revision 2. */ @@ -198,14 +199,14 @@ @Option( name = "experimental_graphless_query", - defaultValue = "false", + defaultValue = "auto", documentationCategory = OptionDocumentationCategory.QUERY, effectTags = {OptionEffectTag.BUILD_FILE_SEMANTICS, OptionEffectTag.EAGERNESS_TO_EXIT}, help = "If true, uses a Query implementation that does not make a copy of the graph. The new" + " implementation only supports --order_output=no, as well as only a subset of" + " output formatters.") - public boolean useGraphlessQuery; + public TriState useGraphlessQuery; /** Ugly workaround since line terminator option default has to be constant expression. */ public String getLineTerminator() {
diff --git a/src/main/java/com/google/devtools/build/lib/rules/genquery/GenQuery.java b/src/main/java/com/google/devtools/build/lib/rules/genquery/GenQuery.java index 59de946..29b05d8 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/genquery/GenQuery.java +++ b/src/main/java/com/google/devtools/build/lib/rules/genquery/GenQuery.java
@@ -92,6 +92,7 @@ import com.google.devtools.build.skyframe.ValueOrException; import com.google.devtools.common.options.OptionsParser; import com.google.devtools.common.options.OptionsParsingException; +import com.google.devtools.common.options.TriState; import com.google.protobuf.ByteString; import java.io.IOException; import java.io.OutputStream; @@ -163,11 +164,11 @@ } if (ruleContext.getConfiguration().getOptions().get(CoreOptions.class).useGraphlessQuery) { queryOptions.orderOutput = OrderOutput.NO; - queryOptions.useGraphlessQuery = true; + queryOptions.useGraphlessQuery = TriState.YES; } else { // Force results to be deterministic. queryOptions.orderOutput = OrderOutput.FULL; - queryOptions.useGraphlessQuery = false; + queryOptions.useGraphlessQuery = TriState.NO; } // force relative_locations to true so it has a deterministic output across machines. @@ -362,7 +363,7 @@ /*extraFunctions=*/ ImmutableList.of(), /*packagePath=*/ null, /*blockUniverseEvaluationErrors=*/ false, - /*useGraphlessQuery=*/ queryOptions.useGraphlessQuery); + /*useGraphlessQuery=*/ queryOptions.useGraphlessQuery == TriState.YES); QueryExpression expr = QueryExpression.parse(query, queryEnvironment); formatter.verifyCompatible(queryEnvironment, expr); targets = QueryUtil.newOrderedAggregateAllOutputFormatterCallback(queryEnvironment);
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/commands/QueryEnvironmentBasedCommand.java b/src/main/java/com/google/devtools/build/lib/runtime/commands/QueryEnvironmentBasedCommand.java index 073c00c..f4f1f2c 100644 --- a/src/main/java/com/google/devtools/build/lib/runtime/commands/QueryEnvironmentBasedCommand.java +++ b/src/main/java/com/google/devtools/build/lib/runtime/commands/QueryEnvironmentBasedCommand.java
@@ -48,6 +48,7 @@ import com.google.devtools.build.skyframe.WalkableGraph; import com.google.devtools.common.options.OptionsParser; import com.google.devtools.common.options.OptionsParsingResult; +import com.google.devtools.common.options.TriState; import java.io.IOException; import java.nio.charset.StandardCharsets; import java.util.List; @@ -143,7 +144,10 @@ Set<Setting> settings = queryOptions.toSettings(); boolean streamResults = QueryOutputUtils.shouldStreamResults(queryOptions, formatter); - if (queryOptions.useGraphlessQuery && !streamResults) { + boolean useGraphlessQuery = + queryOptions.useGraphlessQuery == TriState.YES + || (queryOptions.useGraphlessQuery == TriState.AUTO && streamResults); + if (useGraphlessQuery && !streamResults) { env.getReporter() .handle( Event.error( @@ -165,7 +169,7 @@ queryOptions.universeScope, options.getOptions(LoadingPhaseThreadsOption.class).threads, settings, - queryOptions.useGraphlessQuery)) { + useGraphlessQuery)) { result = doQuery( query, env, queryOptions, streamResults, formatter, queryEnv, queryRuntimeHelper);