S8 apply Palantir formatting to maintained Java sources
All checks were successful
Build, test and publish / verify (push) Successful in 1m39s
All checks were successful
Build, test and publish / verify (push) Successful in 1m39s
This commit is contained in:
@@ -13,20 +13,37 @@ class Commands {
|
||||
return output.strip();
|
||||
}
|
||||
}
|
||||
|
||||
static class Failure extends RuntimeException {
|
||||
final int exitCode;
|
||||
Failure(int exitCode, String message) { super(message); this.exitCode = exitCode; }
|
||||
|
||||
Failure(int exitCode, String message) {
|
||||
super(message);
|
||||
this.exitCode = exitCode;
|
||||
}
|
||||
}
|
||||
|
||||
Instant deadline;
|
||||
volatile Process active;
|
||||
Path log;
|
||||
void renew(Duration timeout) { deadline = Instant.now().plus(timeout); }
|
||||
void cancel() { Process process = active; if (process != null) stop(process); }
|
||||
Commands(Duration timeout) { deadline = Instant.now().plus(timeout); }
|
||||
|
||||
void renew(Duration timeout) {
|
||||
deadline = Instant.now().plus(timeout);
|
||||
}
|
||||
|
||||
void cancel() {
|
||||
Process process = active;
|
||||
if (process != null) stop(process);
|
||||
}
|
||||
|
||||
Commands(Duration timeout) {
|
||||
deadline = Instant.now().plus(timeout);
|
||||
}
|
||||
|
||||
Result execute(List<String> args, Path cwd, Map<String, String> env, String input, boolean echo) throws Exception {
|
||||
if (!Instant.now().isBefore(deadline)) throw new Failure(124, "CI time limit exceeded");
|
||||
ProcessBuilder builder = new ProcessBuilder(args).directory(cwd.toFile()).redirectErrorStream(true);
|
||||
ProcessBuilder builder =
|
||||
new ProcessBuilder(args).directory(cwd.toFile()).redirectErrorStream(true);
|
||||
builder.environment().clear();
|
||||
builder.environment().putAll(env);
|
||||
Process process = builder.start();
|
||||
@@ -36,22 +53,30 @@ class Commands {
|
||||
try (var executor = Executors.newVirtualThreadPerTaskExecutor()) {
|
||||
Future<?> reader = executor.submit(() -> {
|
||||
try (InputStream stream = process.getInputStream();
|
||||
OutputStream file = destination == null ? OutputStream.nullOutputStream()
|
||||
: Files.newOutputStream(destination, StandardOpenOption.CREATE, StandardOpenOption.APPEND)) {
|
||||
OutputStream file = destination == null
|
||||
? OutputStream.nullOutputStream()
|
||||
: Files.newOutputStream(
|
||||
destination, StandardOpenOption.CREATE, StandardOpenOption.APPEND)) {
|
||||
byte[] buffer = new byte[8192];
|
||||
int count;
|
||||
while ((count = stream.read(buffer)) != -1) {
|
||||
captured.write(buffer, 0, count);
|
||||
if (echo) { System.out.write(buffer, 0, count); System.out.flush(); }
|
||||
if (echo) {
|
||||
System.out.write(buffer, 0, count);
|
||||
System.out.flush();
|
||||
}
|
||||
file.write(buffer, 0, count);
|
||||
}
|
||||
} catch (IOException e) { throw new UncheckedIOException(e); }
|
||||
} catch (IOException e) {
|
||||
throw new UncheckedIOException(e);
|
||||
}
|
||||
});
|
||||
try {
|
||||
try (OutputStream stdin = process.getOutputStream()) {
|
||||
if (input != null) stdin.write(input.getBytes(StandardCharsets.UTF_8));
|
||||
}
|
||||
if (!process.waitFor(Math.max(1, Duration.between(Instant.now(), deadline).toMillis()), TimeUnit.MILLISECONDS)) {
|
||||
if (!process.waitFor(
|
||||
Math.max(1, Duration.between(Instant.now(), deadline).toMillis()), TimeUnit.MILLISECONDS)) {
|
||||
stop(process);
|
||||
throw new Failure(124, "CI time limit exceeded");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user