diff --git a/modules/lm-coursier/src/main/scala/lmcoursier/internal/ArtifactsRun.scala b/modules/lm-coursier/src/main/scala/lmcoursier/internal/ArtifactsRun.scala index 839cc7868..c7cbad951 100644 --- a/modules/lm-coursier/src/main/scala/lmcoursier/internal/ArtifactsRun.scala +++ b/modules/lm-coursier/src/main/scala/lmcoursier/internal/ArtifactsRun.scala @@ -24,11 +24,6 @@ object ArtifactsRun { else "" - // Ensuring only one resolution / artifact fetching runs at a time when the logger - // may rely on progress bars, as two progress bar loggers can't display stuff at the - // same time. - val needsLock = params.loggerOpt.nonEmpty || !RefreshLogger.defaultFallbackMode - val coursierLogger = params.loggerOpt.getOrElse { RefreshLogger.create( if (RefreshLogger.defaultFallbackMode) @@ -45,12 +40,9 @@ object ArtifactsRun { ) } - if (needsLock) - Lock.lock.synchronized { - result(params, coursierLogger) - } - else + Lock.maybeSynchronized(needsLock = params.loggerOpt.nonEmpty || !RefreshLogger.defaultFallbackMode){ result(params, coursierLogger) + } } private def result( diff --git a/modules/lm-coursier/src/main/scala/lmcoursier/internal/Lock.scala b/modules/lm-coursier/src/main/scala/lmcoursier/internal/Lock.scala index 6100302ed..33a5cf7c8 100644 --- a/modules/lm-coursier/src/main/scala/lmcoursier/internal/Lock.scala +++ b/modules/lm-coursier/src/main/scala/lmcoursier/internal/Lock.scala @@ -1,10 +1,10 @@ package lmcoursier.internal private[lmcoursier] object Lock { + private val lock = new Object - // Wrap blocks downloading stuff (resolution / artifact downloads) in lock.synchronized. - // Downloads are already parallel, no need to parallelize further, and this results in - // a clearer output. - val lock = new Object - + /* Progress bars require us to only work on one module at the time. Without those we can go faster */ + def maybeSynchronized[T](needsLock: Boolean)(f: => T): T = + if (needsLock) lock.synchronized(f) + else f } diff --git a/modules/lm-coursier/src/main/scala/lmcoursier/internal/ResolutionRun.scala b/modules/lm-coursier/src/main/scala/lmcoursier/internal/ResolutionRun.scala index a5e0ebed4..9ca6942d8 100644 --- a/modules/lm-coursier/src/main/scala/lmcoursier/internal/ResolutionRun.scala +++ b/modules/lm-coursier/src/main/scala/lmcoursier/internal/ResolutionRun.scala @@ -137,10 +137,8 @@ object ResolutionRun { } SbtCoursierCache.default.resolutionOpt(params.resolutionKey).map(Right(_)).getOrElse { - // Let's update only one module at once, for a better output. - // Downloads are already parallel, no need to parallelize further, anyway. val resOrError = - Lock.lock.synchronized { + Lock.maybeSynchronized(needsLock = params.loggerOpt.nonEmpty || !RefreshLogger.defaultFallbackMode) { var map = new mutable.HashMap[Configuration, Resolution] val either = params.orderedConfigs.foldLeft[Either[coursier.error.ResolutionError, Unit]](Right(())) { case (acc, (config, extends0)) => diff --git a/modules/lm-coursier/src/main/scala/lmcoursier/internal/UpdateRun.scala b/modules/lm-coursier/src/main/scala/lmcoursier/internal/UpdateRun.scala index 6b5fcb571..702fb2b2c 100644 --- a/modules/lm-coursier/src/main/scala/lmcoursier/internal/UpdateRun.scala +++ b/modules/lm-coursier/src/main/scala/lmcoursier/internal/UpdateRun.scala @@ -1,5 +1,6 @@ package lmcoursier.internal +import coursier.cache.loggers.RefreshLogger import coursier.core.Resolution.ModuleVersion import coursier.core._ import coursier.util.Print @@ -55,8 +56,7 @@ object UpdateRun { params: UpdateParams, verbosityLevel: Int, log: Logger - ): UpdateReport = Lock.lock.synchronized { - + ): UpdateReport = Lock.maybeSynchronized(needsLock = !RefreshLogger.defaultFallbackMode) { val depsByConfig = grouped(params.dependencies) if (verbosityLevel >= 2) {