in java/io/bazel/rules/closure/worker/PersistentWorker.java [123:160]
private int runAsPersistentWorker() throws IOException, InterruptedException {
InputStream realStdIn = System.in;
PrintStream realStdOut = System.out;
PrintStream realStdErr = System.err;
try (InputStream emptyIn = new ByteArrayInputStream(new byte[0]);
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
PrintStream ps = new PrintStream(buffer)) {
System.setIn(emptyIn);
System.setOut(ps);
System.setErr(ps);
while (true) {
WorkRequest request = WorkRequest.parseDelimitedFrom(realStdIn);
if (request == null) {
return 0;
}
for (Input input : request.getInputsList()) {
inputDigests.put(
fs.getPath(input.getPath()), HashCode.fromBytes(input.getDigest().toByteArray()));
}
arguments.addAll(request.getArgumentsList());
loadArguments(true);
int exitCode = runProgram(ps, Collections.unmodifiableMap(inputDigests));
WorkResponse.newBuilder()
.setOutput(new String(buffer.toByteArray(), UTF_8))
.setExitCode(exitCode)
.build()
.writeDelimitedTo(realStdOut);
realStdOut.flush();
buffer.reset();
arguments.clear();
inputDigests.clear();
}
} finally {
System.setIn(realStdIn);
System.setOut(realStdOut);
System.setErr(realStdErr);
}
}