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 970045776364c5..0f11409d8d7dcb 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 void createActionLogDirectory() throws AbruptExitException { 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 @@ private ExplanationHandler installExplanationHandler( } 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 @@ public void setupExecutionProgressReceiver(SomeExecutionStartedEvent event) { 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 28aac27dcd1cf0..de577ebb6144a2 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 @@ public RepositoryRemoteExecutorFactory getRepositoryRemoteExecutorFactory() { 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}