Skip to content

Commit 182be4b

Browse files
Don't keep coursier progress bars on screen
1 parent ece824e commit 182be4b

File tree

16 files changed

+406
-51
lines changed

16 files changed

+406
-51
lines changed

modules/build/src/main/scala/scala/build/Artifacts.scala

Lines changed: 44 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import scala.build.errors.{
1919
}
2020
import scala.build.internal.Constants
2121
import scala.build.internal.Constants._
22+
import scala.build.internal.CsLoggerUtil._
2223
import scala.build.internal.Util.ScalaDependencyOps
2324

2425
final case class Artifacts(
@@ -94,6 +95,8 @@ object Artifacts {
9495
Seq(
9596
dep"org.scala-lang:scala-compiler:${params.scalaVersion}"
9697
)
98+
val compilerDependenciesMessage =
99+
s"Downloading Scala ${params.scalaVersion} compiler"
97100

98101
val jvmRunnerDependencies =
99102
if (addJvmRunner.getOrElse(true))
@@ -146,13 +149,35 @@ object Artifacts {
146149
nativeTestInterfaceDependencies.map(Positioned.none(_)) ++
147150
jmhDependencies.map(Positioned.none(_))
148151

152+
val updatedDependenciesMessage = {
153+
val b = new StringBuilder("Downloading ")
154+
val depLen = dependencies.length
155+
val extraDepLen = updatedDependencies.length - depLen
156+
depLen match {
157+
case 1 => b.append("one dependency")
158+
case n if n > 1 => b.append(s"$n dependencies")
159+
case _ =>
160+
}
161+
162+
if (depLen > 0 && extraDepLen > 0)
163+
b.append(" and ")
164+
165+
extraDepLen match {
166+
case 1 => b.append("one internal dependency")
167+
case n if n > 1 => b.append(s"$n internal dependencies")
168+
case _ =>
169+
}
170+
171+
b.result()
172+
}
173+
149174
val compilerArtifacts = value {
150175
artifacts(
151176
Positioned.none(compilerDependencies),
152177
allExtraRepositories,
153178
params,
154179
logger,
155-
cache
180+
cache.withMessage(compilerDependenciesMessage)
156181
)
157182
}
158183

@@ -162,7 +187,7 @@ object Artifacts {
162187
allExtraRepositories,
163188
params,
164189
logger,
165-
cache,
190+
cache.withMessage(updatedDependenciesMessage),
166191
classifiersOpt = Some(Set("_") ++ (if (fetchSources) Set("sources") else Set.empty))
167192
)
168193
}
@@ -176,7 +201,7 @@ object Artifacts {
176201
allExtraRepositories,
177202
params,
178203
logger,
179-
cache,
204+
cache.withMessage("Downloading Scala Native CLI"),
180205
None
181206
)
182207
}
@@ -199,7 +224,7 @@ object Artifacts {
199224
allExtraRepositories,
200225
params,
201226
logger,
202-
cache
227+
cache.withMessage("Downloading internal stub dependency")
203228
).map(_.map(_._2))
204229
}
205230
else
@@ -210,8 +235,13 @@ object Artifacts {
210235
.map { posDep =>
211236
val posDep0 =
212237
posDep.map(dep => dep.copy(userParams = dep.userParams + ("intransitive" -> None)))
213-
artifacts(posDep0.map(Seq(_)), allExtraRepositories, params, logger, cache)
214-
.map(_.map { case (url, path) => (posDep0.value, url, path) })
238+
artifacts(
239+
posDep0.map(Seq(_)),
240+
allExtraRepositories,
241+
params,
242+
logger,
243+
cache.withMessage(s"Downloading compiler plugin ${posDep.value.render}")
244+
).map(_.map { case (url, path) => (posDep0.value, url, path) })
215245
}
216246
.sequence
217247
.left.map(CompositeBuildException(_))
@@ -221,7 +251,8 @@ object Artifacts {
221251
val javacPlugins0 = value {
222252
javacPluginDependencies
223253
.map { posDep =>
224-
artifacts(posDep.map(Seq(_)), allExtraRepositories, params, logger, cache)
254+
val cache0 = cache.withMessage(s"Downloading javac plugin ${posDep.value.render}")
255+
artifacts(posDep.map(Seq(_)), allExtraRepositories, params, logger, cache0)
225256
.map(_.map { case (url, path) => (posDep.value, url, path) })
226257
}
227258
.sequence
@@ -253,12 +284,12 @@ object Artifacts {
253284
cache: FileCache[Task],
254285
classifiersOpt: Option[Set[String]] = None
255286
): Either[BuildException, Seq[(String, Path)]] = either {
256-
val result =
257-
value(fetch(dependencies, extraRepositories, params, logger, cache, classifiersOpt))
258-
.artifacts
259-
.iterator
260-
.map { case (a, f) => (a.url, f.toPath) }
261-
.toList
287+
val res = value(fetch(dependencies, extraRepositories, params, logger, cache, classifiersOpt))
288+
val result = res
289+
.artifacts
290+
.iterator
291+
.map { case (a, f) => (a.url, f.toPath) }
292+
.toList
262293
logger.debug {
263294
val elems = Seq(s"Found ${result.length} artifacts:") ++
264295
result.map(" " + _._2) ++

modules/build/src/main/scala/scala/build/Bloop.scala

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import java.io.File
1111
import scala.build.EitherCps.{either, value}
1212
import scala.build.blooprifle.BloopRifleConfig
1313
import scala.build.errors.{BuildException, ModuleFormatError}
14+
import scala.build.internal.CsLoggerUtil._
1415
import scala.concurrent.duration.FiniteDuration
1516
import scala.jdk.CollectionConverters._
1617

@@ -51,8 +52,16 @@ object Bloop {
5152
cache: FileCache[Task]
5253
): Either[BuildException, Seq[File]] =
5354
either {
54-
value(Artifacts.artifacts(Positioned.none(Seq(dep)), Nil, params, logger, cache))
55-
.map(_._2.toFile)
55+
val res = value {
56+
Artifacts.artifacts(
57+
Positioned.none(Seq(dep)),
58+
Nil,
59+
params,
60+
logger,
61+
cache.withMessage(s"Downloading compilation server ${dep.version}")
62+
)
63+
}
64+
res.map(_._2.toFile)
5665
}
5766

5867
def bloopClassPath(logger: Logger, cache: FileCache[Task]): Either[BuildException, Seq[File]] =

modules/build/src/main/scala/scala/build/Logger.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ trait Logger {
2626
def log(ex: BuildException): Unit
2727
def exit(ex: BuildException): Nothing
2828

29-
def coursierLogger: coursier.cache.CacheLogger
29+
def coursierLogger(printBefore: String): coursier.cache.CacheLogger
3030
def bloopRifleLogger: BloopRifleLogger
3131
def scalaJsLogger: ScalaJsLogger
3232
def scalaNativeTestLogger: sn.Logger
@@ -47,7 +47,7 @@ object Logger {
4747
def exit(ex: BuildException): Nothing =
4848
throw new Exception(ex)
4949

50-
def coursierLogger: coursier.cache.CacheLogger =
50+
def coursierLogger(printBefore: String): coursier.cache.CacheLogger =
5151
coursier.cache.CacheLogger.nop
5252
def bloopRifleLogger: BloopRifleLogger =
5353
BloopRifleLogger.nop

modules/build/src/main/scala/scala/build/PersistentDiagnosticLogger.scala

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,8 @@ class PersistentDiagnosticLogger(parent: Logger) extends Logger {
2727
def log(ex: BuildException): Unit = parent.log(ex)
2828
def exit(ex: BuildException): Nothing = parent.exit(ex)
2929

30-
def coursierLogger: coursier.cache.CacheLogger = parent.coursierLogger
30+
def coursierLogger(printBefore: String): coursier.cache.CacheLogger =
31+
parent.coursierLogger(printBefore)
3132
def bloopRifleLogger: BloopRifleLogger = parent.bloopRifleLogger
3233
def scalaJsLogger: ScalaJsLogger = parent.scalaJsLogger
3334
def scalaNativeTestLogger: sn.Logger = parent.scalaNativeTestLogger

modules/build/src/main/scala/scala/build/ReplArtifacts.scala

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import java.nio.file.Path
88

99
import scala.build.EitherCps.{either, value}
1010
import scala.build.errors.BuildException
11+
import scala.build.internal.CsLoggerUtil._
1112

1213
final case class ReplArtifacts(
1314
replArtifacts: Seq[(String, Path)],
@@ -46,14 +47,19 @@ object ReplArtifacts {
4647
): Either[BuildException, ReplArtifacts] = either {
4748
val localRepoOpt = LocalRepo.localRepo(directories.localRepoDir)
4849
val allDeps = dependencies ++ Seq(dep"com.lihaoyi:::ammonite:$ammoniteVersion")
49-
val replArtifacts =
50-
Artifacts.artifacts(Positioned.none(allDeps), localRepoOpt.toSeq, scalaParams, logger, cache)
50+
val replArtifacts = Artifacts.artifacts(
51+
Positioned.none(allDeps),
52+
localRepoOpt.toSeq,
53+
scalaParams,
54+
logger,
55+
cache.withMessage(s"Downloading Ammonite $ammoniteVersion")
56+
)
5157
val replSourceArtifacts = Artifacts.artifacts(
5258
Positioned.none(allDeps),
5359
localRepoOpt.toSeq,
5460
scalaParams,
5561
logger,
56-
cache,
62+
cache.withMessage(s"Downloading Ammonite $ammoniteVersion sources"),
5763
classifiersOpt = Some(Set("sources"))
5864
)
5965
ReplArtifacts(
@@ -85,7 +91,7 @@ object ReplArtifacts {
8591
repositories,
8692
scalaParams,
8793
logger,
88-
cache
94+
cache.withMessage(s"Downloading Scala compiler ${scalaParams.scalaVersion}")
8995
)
9096
val mainClass =
9197
if (isScala2) "scala.tools.nsc.MainGenericRunner"
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package scala.build.internal
2+
3+
import coursier.cache.FileCache
4+
import coursier.cache.loggers.RefreshLogger
5+
import coursier.jvm.JavaHome
6+
import coursier.util.Task
7+
8+
object CsLoggerUtil {
9+
10+
// All of these methods are a bit flaky…
11+
12+
implicit class CsCacheExtensions(private val cache: FileCache[Task]) extends AnyVal {
13+
def withMessage(message: String): FileCache[Task] =
14+
cache.logger match {
15+
case _: RefreshLogger =>
16+
var displayed = false
17+
val logger = RefreshLogger.create(
18+
CustomProgressBarRefreshDisplay.create(
19+
keepOnScreen = false,
20+
if (!displayed) {
21+
System.err.println(message)
22+
displayed = true
23+
},
24+
()
25+
)
26+
)
27+
cache.withLogger(logger)
28+
case _ => cache
29+
}
30+
}
31+
implicit class CsJavaHomeExtensions(private val javaHome: JavaHome) extends AnyVal {
32+
def withMessage(message: String): JavaHome =
33+
javaHome.cache.map(_.archiveCache.cache) match {
34+
case Some(f: FileCache[Task]) =>
35+
val cache0 = f.withMessage(message)
36+
javaHome.withCache(
37+
javaHome.cache.map(c => c.withArchiveCache(c.archiveCache.withCache(cache0)))
38+
)
39+
case _ => javaHome
40+
}
41+
}
42+
}

0 commit comments

Comments
 (0)