def toResolve()

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
    }