in multiversion/src/main/scala/multiversion/configs/ThirdpartyConfig.scala [131:169]
def toResolve(
dep: DependencyConfig,
previousIndex: Option[ResolutionIndex],
cache: FileCache[Task],
progressBar: ResolveProgressRenderer,
cdep: Dependency,
retryCount: Int
): Result[Task[Result[DependencyResolution]]] =
Result.fromResults(decodeForceVersions(dep)).map { decodedForceVersions =>
val allDependencies = for {
d <- rootDependencies(dep, previousIndex)
} yield d.withExclusions(d.exclusions)
val repos = repositories.flatMap(_.coursierRepository)
val resolve =
Resolve(cache.withLogger(progressBar.loggers.newCacheLogger(cdep)))
.addDependencies(allDependencies: _*)
.withResolutionParams(
ResolutionParams()
.addForceVersion(decodedForceVersions: _*)
.withReconciliation(relaxedForAllModules)
)
.withRepositories(
if (repos.isEmpty) Resolve.defaultRepositories else repos
)
def retry(m: Int) =
Task.tailRecM[Int, Resolution](m) { (n: Int) =>
if (n <= 0) resolve.io.map(Right(_))
else
resolve.io.attempt map {
case Right(r) => Right(r)
case Left(e) if e.getMessage.contains("concurrent download") =>
Thread.sleep(100)
Left(n - 1)
case Left(e) => throw e
}
}
retry(retryCount).map(r => DependencyResolution(dep, r)).toResult
}