From 1ec2cd85cdc43f07748113af403a2f88a2b945f0 Mon Sep 17 00:00:00 2001 From: Ethan Atkins Date: Thu, 10 Sep 2020 09:45:16 -0700 Subject: [PATCH] Fix output when starting sbt from thin client When starting sbt via the thin client with 1.4.0-RC1, there is no output until sbt finishes booting up which is poor ux. The reason is that sbt only uses virtual io when sbt.io.virtual == true or formatEnabledInEnv == true and not ci. The default value for formatEnabledInEnv is set based on whether color is enabled in the environment. This had copied old logic that turned on color if ansi was enabled but it makes more sense to check the color property (which is set by the thin client via an environment variable when it launches sbt) and fall back to whether or not java.lang.System.console is defined. We also can explicitly set "-Dsbt.io.virtual=true" when the thin client launches sbt since the thin client relies on this behavior. By doing it in both places, the sbtn for 1.4.0-RC1 will display boot output for newer versions of sbt. Bonus: don't call ConsoleAppender.formatEnabledInEnv which just calls back to Terminal.formatEnabledInEnv --- .../src/main/scala/sbt/internal/util/Terminal.scala | 5 ++--- .../src/main/scala/sbt/internal/client/NetworkClient.scala | 1 + 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/internal/util-logging/src/main/scala/sbt/internal/util/Terminal.scala b/internal/util-logging/src/main/scala/sbt/internal/util/Terminal.scala index d44b7b91d..e5465fe63 100644 --- a/internal/util-logging/src/main/scala/sbt/internal/util/Terminal.scala +++ b/internal/util-logging/src/main/scala/sbt/internal/util/Terminal.scala @@ -297,7 +297,7 @@ object Terminal { // This approximates that both stdin and stdio are connected, // so by default color will be turned off for pipes and redirects. val hasConsole = Option(java.lang.System.console).isDefined - props.map(_.ansi).getOrElse(true) && hasConsole + props.map(_.color).getOrElse(hasConsole) } sys.props.get("sbt.log.noformat") match { case Some(_) => !java.lang.Boolean.getBoolean("sbt.log.noformat") @@ -852,8 +852,7 @@ object Terminal { term.setEchoEnabled(true) } } - override def isColorEnabled: Boolean = - props.map(_.color).getOrElse(ConsoleAppender.formatEnabledInEnv) + override def isColorEnabled: Boolean = props.map(_.color).getOrElse(formatEnabledInEnv) override def isSupershellEnabled: Boolean = props diff --git a/main-command/src/main/scala/sbt/internal/client/NetworkClient.scala b/main-command/src/main/scala/sbt/internal/client/NetworkClient.scala index 7dcf49569..0250dfe86 100644 --- a/main-command/src/main/scala/sbt/internal/client/NetworkClient.scala +++ b/main-command/src/main/scala/sbt/internal/client/NetworkClient.scala @@ -1006,6 +1006,7 @@ object NetworkClient { i += 1 } val base = new File("").getCanonicalFile + if (!sbtArguments.contains("-Dsbt.io.virtual=true")) sbtArguments += "-Dsbt.io.virtual=true" new Arguments(base, sbtArguments, commandArgs, completionArguments, sbtScript) }