From 7e1384608ea021ab7e4ff8aec71b33d1b5561d61 Mon Sep 17 00:00:00 2001 From: Ethan Atkins Date: Wed, 4 Nov 2020 15:44:14 -0800 Subject: [PATCH] Fix console when supershell is disabled The sbt console didn't work with supershell disabled because setting that parameter was causing the terminal type to be dumb which only works in some very specific situations. When Terminal.isAnsiSupported was false, we were setting sbt to use a dumb terminal. We really only want to use a dumb terminal if virtual io is off. It also doesn't necessarily make sense to automatically disable general ansi codes even if supershell is disabled by system property. --- .../src/main/scala/sbt/internal/util/Terminal.scala | 6 ++---- server-test/src/test/scala/testpkg/TestServer.scala | 2 +- 2 files changed, 3 insertions(+), 5 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 8c4644b32..d4adac080 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 @@ -306,9 +306,7 @@ object Terminal { case _ => sys.props.get("sbt.log.format").flatMap(parseLogOption) } } - private[this] lazy val superShellEnabled = sys.props.get("sbt.supershell").map(_ == "true") - private[sbt] lazy val isAnsiSupported: Boolean = - logFormatEnabled.orElse(superShellEnabled).getOrElse(useColorDefault) + private[sbt] lazy val isAnsiSupported: Boolean = logFormatEnabled.getOrElse(useColorDefault) private[this] val isDumbTerminal = "dumb" == System.getenv("TERM") private[this] val hasConsole = Option(java.lang.System.console).isDefined private[this] def useColorDefault: Boolean = { @@ -754,7 +752,7 @@ object Terminal { private[this] def fixTerminalProperty(): Unit = { val terminalProperty = "jline.terminal" val newValue = - if (!isAnsiSupported) "none" + if (!isAnsiSupported && System.getProperty("sbt.io.virtual", "") == "false") "none" else System.getProperty(terminalProperty) match { case "jline.UnixTerminal" => "unix" diff --git a/server-test/src/test/scala/testpkg/TestServer.scala b/server-test/src/test/scala/testpkg/TestServer.scala index a5595c09e..b2c6a2f62 100644 --- a/server-test/src/test/scala/testpkg/TestServer.scala +++ b/server-test/src/test/scala/testpkg/TestServer.scala @@ -163,7 +163,7 @@ case class TestServer( val forkOptions = ForkOptions() .withOutputStrategy(OutputStrategy.StdoutOutput) - .withRunJVMOptions(Vector("-Dsbt.ci=true", "-Dsbt.io.virtual=false")) + .withRunJVMOptions(Vector("-Djline.terminal=none", "-Dsbt.io.virtual=false")) val process = RunFromSourceMain.fork(forkOptions, baseDirectory, scalaVersion, sbtVersion, classpath)