From 3ab5040bc7828e000b7280263f53142c66ab6f1e Mon Sep 17 00:00:00 2001 From: Ethan Atkins Date: Thu, 3 Oct 2019 11:17:18 -0700 Subject: [PATCH] Clear supershell lines before suppressed task I noticed that when entering the console, I'd often be left with a supershell line at the bottom of the screen that would eventually get interlaced with my console commands. This can be eliminated by clearing the supershell progress before evaluating the task if it is one of the skip tasks. --- .../scala/sbt/internal/TaskProgress.scala | 20 ++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/main/src/main/scala/sbt/internal/TaskProgress.scala b/main/src/main/scala/sbt/internal/TaskProgress.scala index 675e75f9c..93138ea2e 100644 --- a/main/src/main/scala/sbt/internal/TaskProgress.scala +++ b/main/src/main/scala/sbt/internal/TaskProgress.scala @@ -57,6 +57,10 @@ private[sbt] final class TaskProgress(log: ManagedLogger) ConsoleAppender.setTerminalWidth(JLine.terminal.getWidth) } + override def beforeWork(task: Task[_]): Unit = { + super.beforeWork(task) + if (containsSkipTasks(Vector(task)) || lastTaskCount.get == 0) report() + } override def afterReady(task: Task[_]): Unit = () override def afterCompleted[A](task: Task[A], result: Result[A]): Unit = () @@ -76,10 +80,10 @@ private[sbt] final class TaskProgress(log: ManagedLogger) val currentTasks = activeTasks.toVector.filterNot(Def.isDummy) val ltc = lastTaskCount.get val currentTasksCount = currentTasks.size - def report0(): Unit = { + def report0(tasks: Vector[Task[_]]): Unit = { val event = ProgressEvent( "Info", - currentTasks + tasks .map { task => val elapsed = timings.get(task).currentElapsedMicros ProgressItem(taskName(task), elapsed) @@ -92,9 +96,15 @@ private[sbt] final class TaskProgress(log: ManagedLogger) import sbt.internal.util.codec.JsonProtocol._ log.logEvent(Level.Info, event) } - if (containsSkipTasks(currentTasks)) () - else report0() - lastTaskCount.set(currentTasksCount) + if (containsSkipTasks(currentTasks)) { + if (ltc > 0) { + lastTaskCount.set(0) + report0(Vector.empty) + } + } else { + lastTaskCount.set(currentTasksCount) + report0(currentTasks) + } } private[this] def containsSkipTasks(tasks: Vector[Task[_]]): Boolean = {