From ad703938ac2082a37733b90a100e12fc48b85852 Mon Sep 17 00:00:00 2001 From: Guillaume Nodet Date: Mon, 6 Dec 2021 16:40:21 +0100 Subject: [PATCH] Fix client not responding when using help with an output redirection, fixes #519 (#521) --- .../java/org/mvndaemon/mvnd/client/DefaultClient.java | 7 ++++++- .../org/mvndaemon/mvnd/common/logging/TerminalOutput.java | 8 +++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/client/src/main/java/org/mvndaemon/mvnd/client/DefaultClient.java b/client/src/main/java/org/mvndaemon/mvnd/client/DefaultClient.java index 503419a47..f4dabe473 100644 --- a/client/src/main/java/org/mvndaemon/mvnd/client/DefaultClient.java +++ b/client/src/main/java/org/mvndaemon/mvnd/client/DefaultClient.java @@ -250,7 +250,12 @@ public ExecutionResult execute(ClientOutput output, List argv) { .or(() -> Optional.ofNullable(parameters.mavenRepoLocal()).map(Path::toString)); repo.ifPresent(r -> Environment.MAVEN_REPO_LOCAL.addCommandLineOption(args, r)); - Environment.MVND_TERMINAL_WIDTH.addCommandLineOption(args, Integer.toString(output.getTerminalWidth())); + String width = Optional.ofNullable(Environment.MVND_TERMINAL_WIDTH.removeCommandLineOption(args)) + .orElseGet(() -> { + int w = output.getTerminalWidth(); + return Integer.toString(w > 0 ? Math.max(w, 80) : 120); + }); + Environment.MVND_TERMINAL_WIDTH.addCommandLineOption(args, width); Path dir; if (Environment.MAVEN_FILE.hasCommandLineOption(args)) { diff --git a/common/src/main/java/org/mvndaemon/mvnd/common/logging/TerminalOutput.java b/common/src/main/java/org/mvndaemon/mvnd/common/logging/TerminalOutput.java index 397886409..5e99eeccd 100644 --- a/common/src/main/java/org/mvndaemon/mvnd/common/logging/TerminalOutput.java +++ b/common/src/main/java/org/mvndaemon/mvnd/common/logging/TerminalOutput.java @@ -35,6 +35,7 @@ import java.util.function.Consumer; import java.util.stream.Collector; import java.util.stream.Collectors; +import org.fusesource.jansi.internal.CLibrary; import org.jline.terminal.Size; import org.jline.terminal.Terminal; import org.jline.terminal.TerminalBuilder; @@ -147,7 +148,12 @@ public Project(String id) { public TerminalOutput(boolean noBuffering, int rollingWindowSize, Path logFile) throws IOException { this.start = System.currentTimeMillis(); - this.terminal = TerminalBuilder.terminal(); + TerminalBuilder builder = TerminalBuilder.builder(); + boolean outRedirected = CLibrary.isatty(0) == 1 && CLibrary.isatty(1) == 0; + if (outRedirected) { + builder.dumb(true); + } + this.terminal = builder.build(); this.dumb = terminal.getType().startsWith("dumb"); this.noBuffering = noBuffering; this.linesPerProject = rollingWindowSize;