From 39fdf70c2188e97547028331bfaabbd34a56b216 Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Tue, 20 Aug 2019 12:35:13 -0400 Subject: [PATCH] reimplement stacktrace suppression Ref https://github.com/sbt/sbt/issues/4964 --- .../sbt/internal/util/ConsoleAppender.scala | 27 ++++++++++++------- .../scala/sbt/internal/util/StackTrace.scala | 3 +++ 2 files changed, 20 insertions(+), 10 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 bc30045c8..2b381540a 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 @@ -481,16 +481,23 @@ class ConsoleAppender private[ConsoleAppender] ( } private def appendTraceEvent(te: TraceEvent): Unit = { - val traceLevel = if (getTrace < 0) Int.MaxValue else getTrace - val throwableShowLines: ShowLines[Throwable] = - ShowLines[Throwable]((t: Throwable) => { - List(StackTrace.trimmed(t, traceLevel)) - }) - val codec: ShowLines[TraceEvent] = - ShowLines[TraceEvent]((t: TraceEvent) => { - throwableShowLines.showLines(t.message) - }) - codec.showLines(te).toVector foreach { appendLog(Level.Error, _) } + val traceLevel = getTrace + if (traceLevel >= 0) { + val throwableShowLines: ShowLines[Throwable] = + ShowLines[Throwable]((t: Throwable) => { + List(StackTrace.trimmed(t, traceLevel)) + }) + val codec: ShowLines[TraceEvent] = + ShowLines[TraceEvent]((t: TraceEvent) => { + throwableShowLines.showLines(t.message) + }) + codec.showLines(te).toVector foreach { appendLog(Level.Error, _) } + } + if (traceLevel <= 2) { + suppressedMessage(new SuppressedTraceContext(traceLevel, ansiCodesSupported && useFormat)) foreach { + appendLog(Level.Error, _) + } + } } private def appendProgressEvent(pe: ProgressEvent): Unit = diff --git a/internal/util-logging/src/main/scala/sbt/internal/util/StackTrace.scala b/internal/util-logging/src/main/scala/sbt/internal/util/StackTrace.scala index 37cc42400..5ff7086b7 100644 --- a/internal/util-logging/src/main/scala/sbt/internal/util/StackTrace.scala +++ b/internal/util-logging/src/main/scala/sbt/internal/util/StackTrace.scala @@ -20,6 +20,9 @@ object StackTrace { * - If d is greater than 0, then up to that many lines are included, * where the line for the Throwable is counted plus one line for each stack element. * Less lines will be included if there are not enough stack elements. + * + * See also ConsoleAppender where d <= 2 is treated specially by + * printing a prepared statement. */ def trimmedLines(t: Throwable, d: Int): List[String] = { require(d >= 0)