From 3b09ff6af7c4e108152e8dfdb10f6a1f05c4ab34 Mon Sep 17 00:00:00 2001 From: Ethan Atkins Date: Wed, 4 Nov 2020 13:25:52 -0800 Subject: [PATCH] Support ansi by default if color is supported Scalatest will check the ansiCodesSupported value of a console appender to decide whether or not to colorize its output. We were setting isAnsiSupported to false by default in ci to prevent the ConsoleAppender from adding ansi codes to the output. The only place though where we were doing that was in adding a ClearScreenAfterCursor to the end of each log line. This was done for supershell but there is actually other logic in supershell processing that adds these anyway. --- .../src/main/scala/sbt/internal/util/ConsoleAppender.scala | 6 ++---- .../src/main/scala/sbt/internal/util/Terminal.scala | 2 +- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/internal/util-logging/src/main/scala/sbt/internal/util/ConsoleAppender.scala b/internal/util-logging/src/main/scala/sbt/internal/util/ConsoleAppender.scala index 55b0fe5d8..7cfed50e6 100644 --- a/internal/util-logging/src/main/scala/sbt/internal/util/ConsoleAppender.scala +++ b/internal/util-logging/src/main/scala/sbt/internal/util/ConsoleAppender.scala @@ -460,8 +460,7 @@ trait Appender extends AutoCloseable { // according to https://github.com/sbt/sbt/issues/5608, sometimes we get a null message if (message == null) () else { - val len = - labelColor.length + label.length + messageColor.length + reset.length * 3 + ClearScreenAfterCursor.length + val len = labelColor.length + label.length + messageColor.length + reset.length * 3 val builder: StringBuilder = new StringBuilder(len) message.linesIterator.foreach { line => builder.ensureCapacity(len + line.length + 4) @@ -477,7 +476,6 @@ trait Appender extends AutoCloseable { fmted(labelColor, label) builder.append("] ") fmted(messageColor, line) - if (ansiCodesSupported) builder.append(ClearScreenAfterCursor) write(builder.toString) } } @@ -495,7 +493,7 @@ trait Appender extends AutoCloseable { // the output may have unwanted colors but it would still be legible. This should // only be relevant if the log message string itself contains ansi escape sequences // other than color codes which is very unlikely. - val toWrite = if (!ansiCodesSupported || !useFormat && msg.getBytes.contains(27.toByte)) { + val toWrite = if ((!ansiCodesSupported || !useFormat) && msg.getBytes.contains(27.toByte)) { val (bytes, len) = EscHelpers.strip(msg.getBytes, stripAnsi = !ansiCodesSupported, stripColor = !useFormat) new String(bytes, 0, len) 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 e037be9f1..8c4644b32 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 @@ -308,7 +308,7 @@ object Terminal { } private[this] lazy val superShellEnabled = sys.props.get("sbt.supershell").map(_ == "true") private[sbt] lazy val isAnsiSupported: Boolean = - logFormatEnabled.orElse(superShellEnabled).getOrElse(useColorDefault && !isCI) + logFormatEnabled.orElse(superShellEnabled).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 = {