Capture build-runfiles output.
As https://github.com/bazelbuild/bazel/issues/6176 shows, it's very hard to debug runfiles building failures when all output is eaten.
Closes #6305.
PiperOrigin-RevId: 216717016
diff --git a/src/main/java/com/google/devtools/build/lib/exec/SymlinkTreeHelper.java b/src/main/java/com/google/devtools/build/lib/exec/SymlinkTreeHelper.java
index 2dd9d3a..88a9452 100644
--- a/src/main/java/com/google/devtools/build/lib/exec/SymlinkTreeHelper.java
+++ b/src/main/java/com/google/devtools/build/lib/exec/SymlinkTreeHelper.java
@@ -27,10 +27,12 @@
import com.google.devtools.build.lib.actions.SimpleSpawn;
import com.google.devtools.build.lib.actions.Spawn;
import com.google.devtools.build.lib.actions.UserExecException;
+import com.google.devtools.build.lib.shell.Command;
import com.google.devtools.build.lib.shell.CommandException;
import com.google.devtools.build.lib.util.CommandBuilder;
import com.google.devtools.build.lib.util.CommandUtils;
import com.google.devtools.build.lib.util.OsUtils;
+import com.google.devtools.build.lib.util.io.OutErr;
import com.google.devtools.build.lib.vfs.FileSystemUtils;
import com.google.devtools.build.lib.vfs.Path;
import com.google.devtools.build.lib.vfs.PathFragment;
@@ -85,16 +87,20 @@
* @throws CommandException
*/
public void createSymlinksUsingCommand(
- Path execRoot, BinTools binTools, ImmutableMap<String, String> shellEnvironment)
+ Path execRoot,
+ BinTools binTools,
+ ImmutableMap<String, String> shellEnvironment,
+ OutErr outErr)
throws CommandException {
List<String> argv = getSpawnArgumentList(execRoot, binTools.getExecPath(BUILD_RUNFILES));
Preconditions.checkNotNull(shellEnvironment);
- new CommandBuilder()
- .addArgs(argv)
- .setWorkingDir(execRoot)
- .setEnv(shellEnvironment)
- .build()
- .execute();
+ Command command =
+ new CommandBuilder().addArgs(argv).setWorkingDir(execRoot).setEnv(shellEnvironment).build();
+ if (outErr != null) {
+ command.execute(outErr.getOutputStream(), outErr.getErrorStream());
+ } else {
+ command.execute();
+ }
}
/**
@@ -115,7 +121,10 @@
if (enableRunfiles) {
try {
createSymlinksUsingCommand(
- actionExecutionContext.getExecRoot(), binTools, shellEnvironment);
+ actionExecutionContext.getExecRoot(),
+ binTools,
+ shellEnvironment,
+ actionExecutionContext.getFileOutErr());
} catch (CommandException e) {
throw new UserExecException(CommandUtils.describeCommandFailure(true, e), e);
}
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/commands/RunCommand.java b/src/main/java/com/google/devtools/build/lib/runtime/commands/RunCommand.java
index 22b38d9..c7dd465 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/commands/RunCommand.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/commands/RunCommand.java
@@ -511,7 +511,8 @@
runfilesSupport.getRunfilesDirectory(),
false);
helper.createSymlinksUsingCommand(
- env.getExecRoot(), env.getBlazeWorkspace().getBinTools(), ImmutableMap.of());
+ env.getExecRoot(), env.getBlazeWorkspace().getBinTools(),
+ /* shellEnvironment= */ ImmutableMap.of(), /* outErr= */ null);
return workingDir;
}