diff options
author | kush <kush@google.com> | 2018-06-29 15:43:11 -0700 |
---|---|---|
committer | Copybara-Service <copybara-piper@google.com> | 2018-06-29 15:44:24 -0700 |
commit | 8ae7a3ba8c68278b362f6c0e5aa127c96f8f6025 (patch) | |
tree | c71926363a04e8dfb51998e990119f3442dd2e88 /src/main/java/com/google/devtools/build/lib/exec | |
parent | 55751852c1b54e83514c9ee9d961958a199e1fe5 (diff) |
Refactor TemplateExpansionAction so that various strategies can be used to implement it.
Also clarify the behavior of the expand_template API in the presence of multiple-substitutions.
RELNOTES: None
PiperOrigin-RevId: 202719656
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/exec')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/exec/FileWriteStrategy.java | 27 |
1 files changed, 16 insertions, 11 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/exec/FileWriteStrategy.java b/src/main/java/com/google/devtools/build/lib/exec/FileWriteStrategy.java index d2d8668ede..e3a4f2d513 100644 --- a/src/main/java/com/google/devtools/build/lib/exec/FileWriteStrategy.java +++ b/src/main/java/com/google/devtools/build/lib/exec/FileWriteStrategy.java @@ -16,12 +16,14 @@ package com.google.devtools.build.lib.exec; import com.google.common.collect.ImmutableList; import com.google.common.collect.Iterables; +import com.google.devtools.build.lib.actions.AbstractAction; import com.google.devtools.build.lib.actions.ActionExecutionContext; import com.google.devtools.build.lib.actions.EnvironmentalExecException; import com.google.devtools.build.lib.actions.ExecException; import com.google.devtools.build.lib.actions.ExecutionStrategy; import com.google.devtools.build.lib.actions.SpawnResult; import com.google.devtools.build.lib.analysis.actions.AbstractFileWriteAction; +import com.google.devtools.build.lib.analysis.actions.AbstractFileWriteAction.DeterministicWriter; import com.google.devtools.build.lib.analysis.actions.FileWriteActionContext; import com.google.devtools.build.lib.profiler.AutoProfiler; import com.google.devtools.build.lib.vfs.Path; @@ -43,26 +45,29 @@ public final class FileWriteStrategy implements FileWriteActionContext { } @Override - public List<SpawnResult> exec( - AbstractFileWriteAction action, ActionExecutionContext actionExecutionContext) - throws ExecException, InterruptedException { + public List<SpawnResult> writeOutputToFile( + AbstractAction action, + ActionExecutionContext actionExecutionContext, + DeterministicWriter deterministicWriter, + boolean makeExecutable, boolean isRemotable) + throws ExecException { + Path outputPath = + actionExecutionContext.getInputPath(Iterables.getOnlyElement(action.getOutputs())); // TODO(ulfjack): Consider acquiring local resources here before trying to write the file. try (AutoProfiler p = AutoProfiler.logged( - "running " + action.prettyPrint(), logger, /*minTimeForLoggingInMilliseconds=*/ 100)) { + "running write for action " + action.prettyPrint(), + logger, + /*minTimeForLoggingInMilliseconds=*/ 100)) { try { - Path outputPath = - actionExecutionContext.getInputPath(Iterables.getOnlyElement(action.getOutputs())); try (OutputStream out = new BufferedOutputStream(outputPath.getOutputStream())) { - action.newDeterministicWriter(actionExecutionContext).writeOutputFile(out); + deterministicWriter.writeOutputFile(out); } - if (action.makeExecutable()) { + if (makeExecutable) { outputPath.setExecutable(true); } } catch (IOException e) { - throw new EnvironmentalExecException("failed to create file '" - + Iterables.getOnlyElement(action.getOutputs()).prettyPrint() - + "' due to I/O error: " + e.getMessage(), e); + throw new EnvironmentalExecException("IOException during file write", e); } } return ImmutableList.of(); |