aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/query2
diff options
context:
space:
mode:
authorGravatar juliexxia <juliexxia@google.com>2018-04-05 09:54:22 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-04-05 09:55:33 -0700
commit08dda865f6be27cb85f271e8c9343e2135bc412e (patch)
treee94b11d24dde707bf2e094fdc10d5e90f2afc305 /src/main/java/com/google/devtools/build/lib/query2
parente1ed9e9e567334fdf7c26cd0db6f20c64840f119 (diff)
Error out gracefully instead of crashing blaze when --output=transitions is used without the --transitions flag
PiperOrigin-RevId: 191755762
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/query2')
-rw-r--r--src/main/java/com/google/devtools/build/lib/query2/ConfiguredTargetQueryEnvironment.java10
-rw-r--r--src/main/java/com/google/devtools/build/lib/query2/CqueryThreadsafeCallback.java8
-rw-r--r--src/main/java/com/google/devtools/build/lib/query2/LabelAndConfigurationOutputFormatterCallback.java8
-rw-r--r--src/main/java/com/google/devtools/build/lib/query2/TransitionsOutputFormatterCallback.java20
4 files changed, 32 insertions, 14 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/query2/ConfiguredTargetQueryEnvironment.java b/src/main/java/com/google/devtools/build/lib/query2/ConfiguredTargetQueryEnvironment.java
index 0f11262099..4014f825a1 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/ConfiguredTargetQueryEnvironment.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/ConfiguredTargetQueryEnvironment.java
@@ -31,6 +31,7 @@ import com.google.devtools.build.lib.collect.compacthashset.CompactHashSet;
import com.google.devtools.build.lib.concurrent.MultisetSemaphore;
import com.google.devtools.build.lib.events.Event;
import com.google.devtools.build.lib.events.ExtendedEventHandler;
+import com.google.devtools.build.lib.events.Reporter;
import com.google.devtools.build.lib.packages.DependencyFilter;
import com.google.devtools.build.lib.packages.NoSuchTargetException;
import com.google.devtools.build.lib.packages.Rule;
@@ -207,14 +208,17 @@ public class ConfiguredTargetQueryEnvironment
public ImmutableList<CqueryThreadsafeCallback> getDefaultOutputFormatters(
TargetAccessor<ConfiguredTarget> accessor,
CqueryOptions options,
- OutputStream out,
+ Reporter reporter,
SkyframeExecutor skyframeExecutor,
BuildConfiguration hostConfiguration) {
+ OutputStream out = reporter.getOutErr().getOutputStream();
return new ImmutableList.Builder<CqueryThreadsafeCallback>()
- .add(new LabelAndConfigurationOutputFormatterCallback(options, out, skyframeExecutor))
+ .add(
+ new LabelAndConfigurationOutputFormatterCallback(
+ reporter, options, out, skyframeExecutor))
.add(
new TransitionsOutputFormatterCallback(
- options, out, skyframeExecutor, accessor, hostConfiguration))
+ reporter, options, out, skyframeExecutor, accessor, hostConfiguration))
.build();
}
diff --git a/src/main/java/com/google/devtools/build/lib/query2/CqueryThreadsafeCallback.java b/src/main/java/com/google/devtools/build/lib/query2/CqueryThreadsafeCallback.java
index b84bfb3b28..2a5a2dc060 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/CqueryThreadsafeCallback.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/CqueryThreadsafeCallback.java
@@ -18,6 +18,7 @@ import static java.util.stream.Collectors.joining;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.collect.Streams;
import com.google.devtools.build.lib.analysis.ConfiguredTarget;
+import com.google.devtools.build.lib.events.Reporter;
import com.google.devtools.build.lib.query2.engine.ThreadSafeOutputFormatterCallback;
import com.google.devtools.build.lib.query2.output.CqueryOptions;
import com.google.devtools.build.lib.skyframe.SkyframeExecutor;
@@ -34,6 +35,7 @@ import java.util.List;
public abstract class CqueryThreadsafeCallback
extends ThreadSafeOutputFormatterCallback<ConfiguredTarget> {
+ protected final Reporter reporter;
protected final CqueryOptions options;
protected PrintStream printStream = null;
protected final SkyframeExecutor skyframeExecutor;
@@ -41,7 +43,11 @@ public abstract class CqueryThreadsafeCallback
private final List<String> result = new ArrayList<>();
CqueryThreadsafeCallback(
- CqueryOptions options, OutputStream out, SkyframeExecutor skyframeExecutor) {
+ Reporter reporter,
+ CqueryOptions options,
+ OutputStream out,
+ SkyframeExecutor skyframeExecutor) {
+ this.reporter = reporter;
this.options = options;
if (out != null) {
this.printStream = new PrintStream(out);
diff --git a/src/main/java/com/google/devtools/build/lib/query2/LabelAndConfigurationOutputFormatterCallback.java b/src/main/java/com/google/devtools/build/lib/query2/LabelAndConfigurationOutputFormatterCallback.java
index cba2cb8b3e..ccc7b91fe7 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/LabelAndConfigurationOutputFormatterCallback.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/LabelAndConfigurationOutputFormatterCallback.java
@@ -16,6 +16,7 @@ package com.google.devtools.build.lib.query2;
import com.google.devtools.build.lib.analysis.ConfiguredTarget;
import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
import com.google.devtools.build.lib.events.NullEventHandler;
+import com.google.devtools.build.lib.events.Reporter;
import com.google.devtools.build.lib.query2.output.CqueryOptions;
import com.google.devtools.build.lib.skyframe.SkyframeExecutor;
import java.io.OutputStream;
@@ -24,8 +25,11 @@ import java.io.OutputStream;
public class LabelAndConfigurationOutputFormatterCallback extends CqueryThreadsafeCallback {
LabelAndConfigurationOutputFormatterCallback(
- CqueryOptions options, OutputStream out, SkyframeExecutor skyframeExecutor) {
- super(options, out, skyframeExecutor);
+ Reporter reporter,
+ CqueryOptions options,
+ OutputStream out,
+ SkyframeExecutor skyframeExecutor) {
+ super(reporter, options, out, skyframeExecutor);
}
@Override
diff --git a/src/main/java/com/google/devtools/build/lib/query2/TransitionsOutputFormatterCallback.java b/src/main/java/com/google/devtools/build/lib/query2/TransitionsOutputFormatterCallback.java
index 5d5e8e628f..06e1069fb5 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/TransitionsOutputFormatterCallback.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/TransitionsOutputFormatterCallback.java
@@ -41,7 +41,7 @@ import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
import com.google.devtools.build.lib.events.Event;
import com.google.devtools.build.lib.events.ExtendedEventHandler;
-import com.google.devtools.build.lib.events.NullEventHandler;
+import com.google.devtools.build.lib.events.Reporter;
import com.google.devtools.build.lib.packages.Attribute;
import com.google.devtools.build.lib.packages.BuildType;
import com.google.devtools.build.lib.packages.ConfiguredAttributeMapper;
@@ -83,12 +83,13 @@ public class TransitionsOutputFormatterCallback extends CqueryThreadsafeCallback
* @param hostConfiguration host configuration for this query.
*/
TransitionsOutputFormatterCallback(
+ Reporter reporter,
CqueryOptions options,
OutputStream out,
SkyframeExecutor skyframeExecutor,
TargetAccessor<ConfiguredTarget> accessor,
BuildConfiguration hostConfiguration) {
- super(options, out, skyframeExecutor);
+ super(reporter, options, out, skyframeExecutor);
this.accessor = (ConfiguredTargetAccessor) accessor;
this.hostConfiguration = hostConfiguration;
this.partialResultMap = Maps.newHashMap();
@@ -98,17 +99,20 @@ public class TransitionsOutputFormatterCallback extends CqueryThreadsafeCallback
public void processOutput(Iterable<ConfiguredTarget> partialResult)
throws IOException, InterruptedException {
CqueryOptions.Transitions verbosity = options.transitions;
- Preconditions.checkArgument(
- !verbosity.equals(CqueryOptions.Transitions.NONE),
- "Instead of using --output=transitions, set the --transition flag explicitly to 'lite' or"
- + "'full'");
+ if (verbosity.equals(CqueryOptions.Transitions.NONE)) {
+ reporter.handle(
+ Event.error(
+ "Instead of using --output=transitions, set the --transition flag"
+ + " explicitly to 'lite' or 'full'"));
+ return;
+ }
partialResult.forEach(
ct -> partialResultMap.put(ct.getLabel(), accessor.getTargetFromConfiguredTarget(ct)));
for (ConfiguredTarget configuredTarget : partialResult) {
Target target = partialResultMap.get(configuredTarget.getLabel());
BuildConfiguration config =
skyframeExecutor.getConfiguration(
- NullEventHandler.INSTANCE, configuredTarget.getConfigurationKey());
+ reporter, configuredTarget.getConfigurationKey());
addResult(
getRuleClassTransition(configuredTarget, target)
+ configuredTarget.getLabel()
@@ -128,7 +132,7 @@ public class TransitionsOutputFormatterCallback extends CqueryThreadsafeCallback
// Also, we don't actually use fromOptions in our implementation of DependencyResolver but
// passing to avoid passing a null and since we have the information anyway.
deps =
- new FormatterDependencyResolver(configuredTarget, NullEventHandler.INSTANCE)
+ new FormatterDependencyResolver(configuredTarget, reporter)
.dependentNodeMap(
new TargetAndConfiguration(target, config),
hostConfiguration,