From 8efc3ef049381c18addbdeca0cdbfe7b2b870301 Mon Sep 17 00:00:00 2001 From: Dmitry Lomov Date: Wed, 17 Feb 2016 09:50:03 +0000 Subject: Use absolute paths in ProcessBuilder invocations. Needed for #276. -- MOS_MIGRATED_REVID=114838538 --- src/main/java/com/google/devtools/build/lib/worker/Worker.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'src/main/java/com/google/devtools/build/lib/worker') diff --git a/src/main/java/com/google/devtools/build/lib/worker/Worker.java b/src/main/java/com/google/devtools/build/lib/worker/Worker.java index 8ad0a75c7f..cb8d4923cc 100644 --- a/src/main/java/com/google/devtools/build/lib/worker/Worker.java +++ b/src/main/java/com/google/devtools/build/lib/worker/Worker.java @@ -19,6 +19,7 @@ import com.google.devtools.build.lib.events.Reporter; import com.google.devtools.build.lib.util.Preconditions; import com.google.devtools.build.lib.vfs.Path; +import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; @@ -58,8 +59,15 @@ final class Worker { int workerId = pidCounter.getAndIncrement(); Path logFile = logDir.getRelative("worker-" + workerId + "-" + key.getMnemonic() + ".log"); + String[] command = key.getArgs().toArray(new String[0]); + + // Follows the logic of {@link com.google.devtools.build.lib.shell.Command}. + File executable = new File(command[0]); + if (!executable.isAbsolute() && executable.getParent() != null) { + command[0] = new File(key.getWorkDir().getPathFile(), command[0]).getAbsolutePath(); + } ProcessBuilder processBuilder = - new ProcessBuilder(key.getArgs().toArray(new String[0])) + new ProcessBuilder(command) .directory(key.getWorkDir().getPathFile()) .redirectError(Redirect.appendTo(logFile.getPathFile())); processBuilder.environment().putAll(key.getEnv()); -- cgit v1.2.3