aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/exec
diff options
context:
space:
mode:
authorGravatar kush <kush@google.com>2018-06-29 15:43:11 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-06-29 15:44:24 -0700
commit8ae7a3ba8c68278b362f6c0e5aa127c96f8f6025 (patch)
treec71926363a04e8dfb51998e990119f3442dd2e88 /src/main/java/com/google/devtools/build/lib/exec
parent55751852c1b54e83514c9ee9d961958a199e1fe5 (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.java27
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();