From 3d179cda756f0b9e1e3556c906a6445be927e1f9 Mon Sep 17 00:00:00 2001 From: Ethan Atkins Date: Tue, 20 Oct 2020 11:51:52 -0700 Subject: [PATCH] Enable ansi codes if supershell is enabled Running sbt with -Dsbt.supershell=true and -Dsbt.color=true doesn't work well because the isAnsiSupported flag is set to false when -Dsbt.color=false. This causes the processing that ensures that supershell lines do not get interleaved with normal log lines to be skipped. To fix this, we can enable ansi codes when supershell is explicitly enabled. --- .../src/main/scala/sbt/internal/util/Terminal.scala | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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 775cb1f07..3357a0c51 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,8 +306,9 @@ 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.getOrElse(useColorDefault && !isCI) + logFormatEnabled.orElse(superShellEnabled).getOrElse(useColorDefault && !isCI) private[this] val isDumbTerminal = "dumb" == System.getenv("TERM") private[this] val hasConsole = Option(java.lang.System.console).isDefined private[this] def useColorDefault: Boolean = {