Migrate writing `--explain` output to use `InstrumentationOutput` interface
PiperOrigin-RevId: 686659518
Change-Id: I4a9de1ac4880ef1c5dd01e4b5bcb1538e69029af
diff --git a/src/main/java/com/google/devtools/build/lib/buildtool/ExecutionTool.java b/src/main/java/com/google/devtools/build/lib/buildtool/ExecutionTool.java
index 9700457..0f11409 100644
--- a/src/main/java/com/google/devtools/build/lib/buildtool/ExecutionTool.java
+++ b/src/main/java/com/google/devtools/build/lib/buildtool/ExecutionTool.java
@@ -85,6 +85,8 @@
import com.google.devtools.build.lib.runtime.BlazeModule;
import com.google.devtools.build.lib.runtime.BlazeRuntime;
import com.google.devtools.build.lib.runtime.CommandEnvironment;
+import com.google.devtools.build.lib.runtime.CommonCommandOptions;
+import com.google.devtools.build.lib.runtime.InstrumentationOutput;
import com.google.devtools.build.lib.server.FailureDetails;
import com.google.devtools.build.lib.server.FailureDetails.Execution;
import com.google.devtools.build.lib.server.FailureDetails.Execution.Code;
@@ -722,7 +724,7 @@
private static BuildConfigurationValue getConfiguration(
SkyframeExecutor executor, Reporter reporter, BuildOptions options) {
try {
- return executor.getConfiguration(reporter, options, /*keepGoing=*/ false);
+ return executor.getConfiguration(reporter, options, /* keepGoing= */ false);
} catch (InvalidConfigurationException e) {
reporter.handle(
Event.warn(
@@ -846,9 +848,21 @@
}
ExplanationHandler handler;
try {
- handler =
- new ExplanationHandler(
- getWorkspace().getRelative(explanationPath).getOutputStream(), allOptions);
+ InstrumentationOutput instrumentationOutput =
+ runtime
+ .getInstrumentationOutputFactory()
+ .createInstrumentationOutput(
+ /* name= */ "explain",
+ getWorkspace().getRelative(explanationPath),
+ env.getOptions(),
+ env.getOptions()
+ .getOptions(CommonCommandOptions.class)
+ .redirectLocalInstrumentationOutputWrites,
+ getReporter(),
+ /* convenienceName= */ null,
+ /* append= */ null,
+ /* internal= */ null);
+ handler = new ExplanationHandler(instrumentationOutput.createOutputStream(), allOptions);
} catch (IOException e) {
getReporter()
.handle(
@@ -1087,9 +1101,7 @@
if (progressReceiverStarted.compareAndSet(false, true)) {
// TODO(leba): count test actions
ExecutionProgressReceiver executionProgressReceiver =
- new ExecutionProgressReceiver(
- /*exclusiveTestsCount=*/ 0,
- env.getEventBus());
+ new ExecutionProgressReceiver(/* exclusiveTestsCount= */ 0, env.getEventBus());
env.getEventBus()
.post(new ExecutionProgressReceiverAvailableEvent(executionProgressReceiver));
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/BlazeRuntime.java b/src/main/java/com/google/devtools/build/lib/runtime/BlazeRuntime.java
index 28aac27..de577eb 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/BlazeRuntime.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/BlazeRuntime.java
@@ -1517,6 +1517,10 @@
return repositoryRemoteExecutorFactory;
}
+ public InstrumentationOutputFactory getInstrumentationOutputFactory() {
+ return instrumentationOutputFactory;
+ }
+
/**
* A builder for {@link BlazeRuntime} objects. The only required fields are the {@link
* BlazeDirectories}, and the {@link com.google.devtools.build.lib.packages.RuleClassProvider}