in java/com/google/devtools/bazel/e4b/command/Command.java [63:88]
public int run() throws IOException, InterruptedException {
Preconditions.checkState(!executed);
executed = true;
ProcessBuilder builder = new ProcessBuilder(args);
builder.directory(directory);
builder.redirectOutput(ProcessBuilder.Redirect.PIPE);
builder.redirectError(ProcessBuilder.Redirect.PIPE);
Process process = builder.start();
Thread err = copyStream(process.getErrorStream(), stderr);
// seriously? That's stdout, why is it called getInputStream???
Thread out = copyStream(process.getInputStream(), stdout);
int r = process.waitFor();
if (err != null) {
err.join();
}
if (out != null) {
out.join();
}
synchronized (stderr) {
stderr.close();
}
synchronized (stdout) {
stdout.close();
}
return r;
}