diff --git a/build.sbt b/build.sbt index ce45200eb..e293db71c 100644 --- a/build.sbt +++ b/build.sbt @@ -15,7 +15,7 @@ inThisBuild(List( ) )) -val coursierVersion = "1.1.0-M10" +val coursierVersion = "1.1.0-M11-1" lazy val `lm-coursier` = project .in(file("modules/lm-coursier")) diff --git a/modules/lm-coursier/src/main/scala/coursier/lmcoursier/ArtifactsParams.scala b/modules/lm-coursier/src/main/scala/coursier/lmcoursier/ArtifactsParams.scala index 5e8006033..60ef7c829 100644 --- a/modules/lm-coursier/src/main/scala/coursier/lmcoursier/ArtifactsParams.scala +++ b/modules/lm-coursier/src/main/scala/coursier/lmcoursier/ArtifactsParams.scala @@ -1,23 +1,15 @@ package coursier.lmcoursier -import java.io.File - import coursier.cache.CacheLogger -import coursier.{Cache, CachePolicy} import coursier.core.{Classifier, Resolution} - -import scala.concurrent.duration.Duration +import coursier.params.CacheParams final case class ArtifactsParams( classifiers: Option[Seq[Classifier]], - res: Seq[Resolution], + resolutions: Seq[Resolution], includeSignatures: Boolean, - parallelDownloads: Int, - createLogger: () => CacheLogger, - cache: File, - artifactsChecksums: Seq[Option[String]], - ttl: Option[Duration], - cachePolicies: Seq[CachePolicy], + logger: CacheLogger, projectName: String, - sbtClassifiers: Boolean + sbtClassifiers: Boolean, + cacheParams: CacheParams ) diff --git a/modules/lm-coursier/src/main/scala/coursier/lmcoursier/ArtifactsRun.scala b/modules/lm-coursier/src/main/scala/coursier/lmcoursier/ArtifactsRun.scala index ba18b1a90..9e94806d7 100644 --- a/modules/lm-coursier/src/main/scala/coursier/lmcoursier/ArtifactsRun.scala +++ b/modules/lm-coursier/src/main/scala/coursier/lmcoursier/ArtifactsRun.scala @@ -18,7 +18,7 @@ object ArtifactsRun { log: Logger ): Either[ResolutionError.UnknownDownloadException, Map[Artifact, Either[FileError, File]]] = { - val allArtifacts0 = params.res.flatMap(_.dependencyArtifacts(params.classifiers)).map(_._3) + val allArtifacts0 = params.resolutions.flatMap(_.dependencyArtifacts(params.classifiers)).map(_._3) val allArtifacts = if (params.includeSignatures) @@ -39,23 +39,18 @@ object ArtifactsRun { val printOptionalMessage = verbosityLevel >= 0 && verbosityLevel <= 1 val artifactFilesOrErrors = try { - pool = Schedulable.fixedThreadPool(params.parallelDownloads) - artifactsLogger = params.createLogger() + pool = Schedulable.fixedThreadPool(params.cacheParams.parallel) val artifactFileOrErrorTasks = allArtifacts.toVector.distinct.map { a => - def f(p: CachePolicy) = - Cache.file[Task]( - a, - params.cache, - p, - checksums = params.artifactsChecksums, - logger = Some(artifactsLogger), - pool = pool, - ttl = params.ttl - ) - - params.cachePolicies.tail - .foldLeft(f(params.cachePolicies.head))(_ orElse f(_)) + Cache.file[Task]( + a, + params.cacheParams.cacheLocation, + params.cacheParams.cachePolicies, + checksums = params.cacheParams.checksum, + logger = Some(params.logger), + pool = pool, + ttl = params.cacheParams.ttl + ) .run .map((a, _)) } @@ -70,6 +65,7 @@ object ArtifactsRun { if (verbosityLevel >= 2) log.info(artifactInitialMessage) + artifactsLogger = params.logger artifactsLogger.init(if (printOptionalMessage) log.info(artifactInitialMessage)) Task.gather.gather(artifactFileOrErrorTasks).attempt.unsafeRun()(ExecutionContext.fromExecutorService(pool)) match { diff --git a/modules/lm-coursier/src/main/scala/coursier/lmcoursier/CoursierDependencyResolution.scala b/modules/lm-coursier/src/main/scala/coursier/lmcoursier/CoursierDependencyResolution.scala index 5aaa0559b..15d71812d 100644 --- a/modules/lm-coursier/src/main/scala/coursier/lmcoursier/CoursierDependencyResolution.scala +++ b/modules/lm-coursier/src/main/scala/coursier/lmcoursier/CoursierDependencyResolution.scala @@ -2,12 +2,13 @@ package coursier.lmcoursier import java.io.{File, OutputStreamWriter} -import _root_.coursier.{Artifact, Cache, CachePolicy, FileError, Organization, Resolution, TermDisplay, organizationString} +import _root_.coursier.{Artifact, CachePolicy, FileError, Organization, Resolution, TermDisplay, organizationString} import _root_.coursier.core.{Classifier, Configuration, ModuleName} import _root_.coursier.extra.Typelevel import _root_.coursier.ivy.IvyRepository import _root_.coursier.lmcoursier.Inputs.withAuthenticationByHost import coursier.cache.CacheDefaults +import coursier.params.CacheParams import sbt.internal.librarymanagement.IvySbt import sbt.librarymanagement._ import sbt.util.Logger @@ -76,7 +77,7 @@ class CoursierDependencyResolution(conf: CoursierConfiguration) extends Dependen val verbosityLevel = 0 val ttl = CacheDefaults.ttl - val createLogger = conf.createLogger.map(_.create).getOrElse { () => + val logger = conf.createLogger.map(_.create()).getOrElse { new TermDisplay(new OutputStreamWriter(System.err), fallbackMode = true) } val cache = conf.cache.getOrElse(CacheDefaults.location) @@ -143,40 +144,44 @@ class CoursierDependencyResolution(conf: CoursierConfiguration) extends Dependen dependencies = dependencies, fallbackDependencies = conf.fallbackDependencies, configGraphs = configGraphs, - autoScalaLib = conf.autoScalaLibrary, + autoScalaLibOpt = if (conf.autoScalaLibrary) Some((so, sv)) else None, mainRepositories = mainRepositories, parentProjectCache = Map.empty, interProjectDependencies = conf.interProjectDependencies, internalRepositories = internalRepositories, - userEnabledProfiles = conf.mavenProfiles.toSet, - userForceVersions = Map.empty, typelevel = typelevel, - so = so, - sv = sv, sbtClassifiers = false, - parallelDownloads = conf.parallelDownloads, projectName = projectName, - maxIterations = conf.maxIterations, - createLogger = createLogger, - cache = cache, - cachePolicies = cachePolicies, - ttl = ttl, - checksums = checksums + logger = logger, + cacheParams = coursier.params.CacheParams( + cacheLocation = cache, + cachePolicies = cachePolicies, + ttl = ttl, + checksum = checksums, + parallel = conf.parallelDownloads + ), + params = coursier.params.ResolutionParams( + maxIterations = conf.maxIterations, + profiles = conf.mavenProfiles.toSet, + forceVersion = Map.empty + ) ) def artifactsParams(resolutions: Map[Set[Configuration], Resolution]) = ArtifactsParams( classifiers = classifiers, - res = resolutions.values.toSeq, + resolutions = resolutions.values.toSeq, includeSignatures = false, - parallelDownloads = conf.parallelDownloads, - createLogger = createLogger, - cache = cache, - artifactsChecksums = checksums, - ttl = ttl, - cachePolicies = cachePolicies, + logger = logger, projectName = projectName, - sbtClassifiers = false + sbtClassifiers = false, + cacheParams = CacheParams( + parallel = conf.parallelDownloads, + cacheLocation = cache, + checksum = checksums, + ttl = ttl, + cachePolicies = cachePolicies + ) ) val sbtBootJarOverrides = SbtBootJars( diff --git a/modules/lm-coursier/src/main/scala/coursier/lmcoursier/InterProjectRepository.scala b/modules/lm-coursier/src/main/scala/coursier/lmcoursier/InterProjectRepository.scala index 6748ea87d..153821df5 100644 --- a/modules/lm-coursier/src/main/scala/coursier/lmcoursier/InterProjectRepository.scala +++ b/modules/lm-coursier/src/main/scala/coursier/lmcoursier/InterProjectRepository.scala @@ -1,6 +1,5 @@ package coursier.lmcoursier -import coursier.Fetch import coursier.core._ import coursier.util.{EitherT, Monad} @@ -13,7 +12,7 @@ final case class InterProjectRepository(projects: Seq[Project]) extends Reposito def find[F[_]]( module: Module, version: String, - fetch: Fetch.Content[F] + fetch: Repository.Fetch[F] )(implicit F: Monad[F] ): EitherT[F, String, (Artifact.Source, Project)] = { diff --git a/modules/lm-coursier/src/main/scala/coursier/lmcoursier/ResolutionParams.scala b/modules/lm-coursier/src/main/scala/coursier/lmcoursier/ResolutionParams.scala index b34f3bf3a..e561b5ea4 100644 --- a/modules/lm-coursier/src/main/scala/coursier/lmcoursier/ResolutionParams.scala +++ b/modules/lm-coursier/src/main/scala/coursier/lmcoursier/ResolutionParams.scala @@ -1,41 +1,31 @@ package coursier.lmcoursier import java.io.File -import java.net.URL import coursier.cache.CacheLogger -import coursier.{Cache, CachePolicy, FallbackDependenciesRepository, ProjectCache, Resolution, moduleNameString} +import coursier.{FallbackDependenciesRepository, ProjectCache, Resolution, moduleNameString} import coursier.core._ import coursier.extra.Typelevel import coursier.ivy.PropertiesPattern import sbt.librarymanagement.{Resolver, URLRepository} import scala.collection.mutable.ArrayBuffer -import scala.concurrent.duration.Duration final case class ResolutionParams( dependencies: Seq[(Configuration, Dependency)], fallbackDependencies: Seq[FallbackDependency], configGraphs: Seq[Set[Configuration]], - autoScalaLib: Boolean, + autoScalaLibOpt: Option[(Organization, String)], mainRepositories: Seq[Repository], parentProjectCache: ProjectCache, interProjectDependencies: Seq[Project], internalRepositories: Seq[Repository], - userEnabledProfiles: Set[String], - userForceVersions: Map[Module, String], typelevel: Boolean, - so: Organization, - sv: String, sbtClassifiers: Boolean, - parallelDownloads: Int, projectName: String, - maxIterations: Int, - createLogger: () => CacheLogger, - cache: File, - cachePolicies: Seq[CachePolicy], - ttl: Option[Duration], - checksums: Seq[Option[String]] + logger: CacheLogger, + cacheParams: coursier.params.CacheParams, + params: coursier.params.ResolutionParams ) { val fallbackDependenciesRepositories = @@ -76,18 +66,20 @@ final case class ResolutionParams( .collect { case (config, dep) if configs(config) => dep - } - .toSet, + }, filter = noOptionalFilter, userActivations = - if (userEnabledProfiles.isEmpty) + if (params.profiles.isEmpty) None else - Some(userEnabledProfiles.iterator.map(_ -> true).toMap), + Some(params.profiles.iterator.map(_ -> true).toMap), forceVersions = // order matters here - userForceVersions ++ - (if (autoScalaLib && (configs(Configuration.compile) || configs(Configuration("scala-tool")))) forcedScalaModules(so, sv) else Map()) ++ + params.forceVersion ++ + autoScalaLibOpt + .filter(_ => configs(Configuration.compile) || configs(Configuration("scala-tool"))) + .map { case (so, sv) => forcedScalaModules(so, sv) } + .getOrElse(Map.empty) ++ interProjectDependencies.map(_.moduleVersion), projectCache = parentProjectCache, mapDependencies = if (typelevel && (configs(Configuration.compile) || configs(Configuration("scala-tool")))) typelevelOrgSwap else None @@ -98,7 +90,7 @@ final case class ResolutionParams( lazy val resolutionKey = SbtCoursierCache.ResolutionKey( dependencies, repositories, - userEnabledProfiles, + params.profiles, allStartRes, sbtClassifiers ) diff --git a/modules/lm-coursier/src/main/scala/coursier/lmcoursier/ResolutionRun.scala b/modules/lm-coursier/src/main/scala/coursier/lmcoursier/ResolutionRun.scala index 7212e72bb..73ddf8109 100644 --- a/modules/lm-coursier/src/main/scala/coursier/lmcoursier/ResolutionRun.scala +++ b/modules/lm-coursier/src/main/scala/coursier/lmcoursier/ResolutionRun.scala @@ -3,7 +3,7 @@ package coursier.lmcoursier import java.util.concurrent.ExecutorService import coursier.cache.CacheLogger -import coursier.{Cache, Fetch, Resolution} +import coursier.{Cache, Resolution} import coursier.core._ import coursier.ivy.IvyRepository import coursier.maven.MavenRepository @@ -29,15 +29,14 @@ object ResolutionRun { val printOptionalMessage = verbosityLevel >= 0 && verbosityLevel <= 1 val resOrError: Either[ResolutionError, Resolution] = try { - pool = Schedulable.fixedThreadPool(params.parallelDownloads) - resLogger = params.createLogger() + pool = Schedulable.fixedThreadPool(params.cacheParams.parallel) + resLogger = params.logger - val fetch = Fetch.from( + val fetchs = Cache.fetchs[Task](params.cacheParams.cacheLocation, params.cacheParams.cachePolicies, checksums = params.cacheParams.checksum, logger = Some(params.logger), pool = pool, ttl = params.cacheParams.ttl) + + val fetch = ResolutionProcess.fetch( params.repositories, - Cache.fetch[Task](params.cache, params.cachePolicies.head, checksums = params.checksums, logger = Some(resLogger), pool = pool, ttl = params.ttl), - params.cachePolicies.tail.map(p => - Cache.fetch[Task](params.cache, p, checksums = params.checksums, logger = Some(resLogger), pool = pool, ttl = params.ttl) - ): _* + fetchs.head, fetchs.tail: _* ) def depsRepr(deps: Seq[(Configuration, Dependency)]) = @@ -81,11 +80,12 @@ object ResolutionRun { if (verbosityLevel >= 2) log.info(initialMessage) + resLogger = params.logger resLogger.init(if (printOptionalMessage) log.info(initialMessage)) startRes .process - .run(fetch, params.maxIterations) + .run(fetch, params.params.maxIterations) .attempt .unsafeRun()(ExecutionContext.fromExecutorService(pool)) .left diff --git a/modules/lm-coursier/src/main/scala/coursier/lmcoursier/ToSbt.scala b/modules/lm-coursier/src/main/scala/coursier/lmcoursier/ToSbt.scala index 2a969138d..258dd163b 100644 --- a/modules/lm-coursier/src/main/scala/coursier/lmcoursier/ToSbt.scala +++ b/modules/lm-coursier/src/main/scala/coursier/lmcoursier/ToSbt.scala @@ -218,7 +218,7 @@ object ToSbt { val configReports = configs.map { case (config, extends0) => - val configDeps = extends0.flatMap(configDependencies.getOrElse(_, Nil)) + val configDeps = extends0.toSeq.sortBy(_.value).flatMap(configDependencies.getOrElse(_, Nil)) val subRes = resolutions(config).subset(configDeps) val reports = ToSbt.moduleReports( diff --git a/modules/lm-coursier/src/main/scala/coursier/lmcoursier/UpdateRun.scala b/modules/lm-coursier/src/main/scala/coursier/lmcoursier/UpdateRun.scala index 8ddfe312f..cdecaf1ff 100644 --- a/modules/lm-coursier/src/main/scala/coursier/lmcoursier/UpdateRun.scala +++ b/modules/lm-coursier/src/main/scala/coursier/lmcoursier/UpdateRun.scala @@ -11,7 +11,7 @@ object UpdateRun { // Move back to coursier.util (in core module) after 1.0? private def allDependenciesByConfig( res: Map[Configuration, Resolution], - depsByConfig: Map[Configuration, Set[Dependency]], + depsByConfig: Map[Configuration, Seq[Dependency]], configs: Map[Configuration, Set[Configuration]] ): Map[Configuration, Set[Dependency]] = { @@ -35,7 +35,7 @@ object UpdateRun { // Move back to coursier.util (in core module) after 1.0? private def dependenciesWithConfig( res: Map[Configuration, Resolution], - depsByConfig: Map[Configuration, Set[Dependency]], + depsByConfig: Map[Configuration, Seq[Dependency]], configs: Map[Configuration, Set[Configuration]] ): Set[Dependency] = allDependenciesByConfig(res, depsByConfig, configs) @@ -74,7 +74,7 @@ object UpdateRun { if (verbosityLevel >= 2) { val finalDeps = dependenciesWithConfig( configResolutions, - depsByConfig.map { case (k, l) => k -> l.toSet }, + depsByConfig, params.configs ) diff --git a/modules/sbt-coursier/src/main/scala/coursier/sbtcoursier/ArtifactsTasks.scala b/modules/sbt-coursier/src/main/scala/coursier/sbtcoursier/ArtifactsTasks.scala index 97000ae64..1db2a4057 100644 --- a/modules/sbt-coursier/src/main/scala/coursier/sbtcoursier/ArtifactsTasks.scala +++ b/modules/sbt-coursier/src/main/scala/coursier/sbtcoursier/ArtifactsTasks.scala @@ -5,6 +5,7 @@ import java.io.File import coursier.{Artifact, FileError} import coursier.core._ import coursier.lmcoursier._ +import coursier.params.CacheParams import coursier.sbtcoursier.Keys._ import coursier.sbtcoursiershared.SbtCoursierShared.autoImport.{coursierCache, coursierCreateLogger} import sbt.Def @@ -53,17 +54,19 @@ object ArtifactsTasks { val res = resTask.value val params = ArtifactsParams( - classifiers, - res, - includeSignatures, - parallelDownloads, - createLogger.create, - cache, - artifactsChecksums, - ttl, - cachePolicies, - projectName, - sbtClassifiers + classifiers = classifiers, + resolutions = res, + includeSignatures = includeSignatures, + logger = createLogger.create(), + projectName = projectName, + sbtClassifiers = sbtClassifiers, + cacheParams = CacheParams( + parallel = parallelDownloads, + cacheLocation = cache, + checksum = artifactsChecksums, + ttl = ttl, + cachePolicies = cachePolicies + ) ) val resOrError = ArtifactsRun.artifacts( diff --git a/modules/sbt-coursier/src/main/scala/coursier/sbtcoursier/DisplayTasks.scala b/modules/sbt-coursier/src/main/scala/coursier/sbtcoursier/DisplayTasks.scala index 1e853a1e7..0da889b8f 100644 --- a/modules/sbt-coursier/src/main/scala/coursier/sbtcoursier/DisplayTasks.scala +++ b/modules/sbt-coursier/src/main/scala/coursier/sbtcoursier/DisplayTasks.scala @@ -4,7 +4,6 @@ import coursier.core._ import coursier.lmcoursier._ import coursier.sbtcoursier.Keys._ import coursier.sbtcoursiershared.SbtCoursierShared.autoImport._ -import coursier.util.Print.Colors import coursier.util.{Parse, Print} import sbt.Def import sbt.Keys._ @@ -67,7 +66,7 @@ object DisplayTasks { (dep.module.organization, dep.module.name, dep.version) } - val subRes = res.subset(dependencies0.toSet) + val subRes = res.subset(dependencies0) ResolutionResult(subGraphConfigs, subRes, dependencies0) } @@ -87,8 +86,8 @@ object DisplayTasks { println( s"$projectName (configurations ${subGraphConfigs.toVector.sorted.mkString(", ")})" + "\n" + Print.dependencyTree( - dependencies, resolution, + dependencies, printExclusions = true, inverse, colors = !sys.props.get("sbt.log.noformat").toSeq.contains("true") @@ -112,10 +111,19 @@ object DisplayTasks { val resolutions = coursierResolutionTask(sbtClassifiers, ignoreArtifactErrors).value val result = new mutable.StringBuilder for (ResolutionResult(subGraphConfigs, resolution, _) <- resolutions) { - val roots: Seq[Dependency] = resolution.transitiveDependencies.filter(f => f.module == module) + val roots = resolution + .minDependencies + .filter(f => f.module == module) + .toVector + .sortBy(_.toString) // elements already have the same module, there's not much left for sorting… val strToPrint = s"$projectName (configurations ${subGraphConfigs.toVector.sorted.map(_.value).mkString(", ")})" + "\n" + - Print.reverseTree(roots, resolution, withExclusions = true) - .render(_.repr(Colors.get(!sys.props.get("sbt.log.noformat").toSeq.contains("true")))) + Print.dependencyTree( + resolution, + roots, + printExclusions = true, + reverse = true, + colors = !sys.props.get("sbt.log.noformat").toSeq.contains("true") + ) println(strToPrint) result.append(strToPrint) result.append("\n") diff --git a/modules/sbt-coursier/src/main/scala/coursier/sbtcoursier/ResolutionTasks.scala b/modules/sbt-coursier/src/main/scala/coursier/sbtcoursier/ResolutionTasks.scala index 3f3025666..adeefec11 100644 --- a/modules/sbt-coursier/src/main/scala/coursier/sbtcoursier/ResolutionTasks.scala +++ b/modules/sbt-coursier/src/main/scala/coursier/sbtcoursier/ResolutionTasks.scala @@ -123,28 +123,30 @@ object ResolutionTasks { val resOrError = ResolutionRun.resolutions( ResolutionParams( - currentProject.dependencies, - fallbackDependencies, - configGraphs, - autoScalaLib, - mainRepositories, - parentProjectCache, - interProjectDependencies, - internalRepositories, - userEnabledProfiles, - userForceVersions, - typelevel, - so, - sv, - sbtClassifiers, - parallelDownloads, - projectName, - maxIterations, - createLogger.create, - cache, - cachePolicies, - ttl, - checksums + dependencies = currentProject.dependencies, + fallbackDependencies = fallbackDependencies, + configGraphs = configGraphs, + autoScalaLibOpt = if (autoScalaLib) Some((so, sv)) else None, + mainRepositories = mainRepositories, + parentProjectCache = parentProjectCache, + interProjectDependencies = interProjectDependencies, + internalRepositories = internalRepositories, + typelevel = typelevel, + sbtClassifiers = sbtClassifiers, + projectName = projectName, + logger = createLogger.create(), + cacheParams = coursier.params.CacheParams( + cacheLocation = cache, + cachePolicies = cachePolicies, + ttl = ttl, + checksum = checksums, + parallel = parallelDownloads + ), + params = coursier.params.ResolutionParams( + maxIterations = maxIterations, + profiles = userEnabledProfiles, + forceVersion = userForceVersions + ) ), verbosityLevel, log diff --git a/modules/sbt-coursier/src/sbt-test/sbt-coursier/dependency-graph/build.sbt b/modules/sbt-coursier/src/sbt-test/sbt-coursier/dependency-graph/build.sbt index c628273cb..1cd3d6a13 100644 --- a/modules/sbt-coursier/src/sbt-test/sbt-coursier/dependency-graph/build.sbt +++ b/modules/sbt-coursier/src/sbt-test/sbt-coursier/dependency-graph/build.sbt @@ -1,6 +1,9 @@ scalaVersion := "2.11.8" -libraryDependencies += "org.apache.zookeeper" % "zookeeper" % "3.5.0-alpha" +libraryDependencies += { + sys.props("sbt.log.noformat") = "true" // disables colors in coursierWhatDependsOn output + "org.apache.zookeeper" % "zookeeper" % "3.5.0-alpha" +} lazy val whatDependsOnCheck = TaskKey[Unit]("whatDependsOnCheck") diff --git a/modules/sbt-coursier/src/sbt-test/sbt-coursier/dependency-graph/whatDependsOnResult.log b/modules/sbt-coursier/src/sbt-test/sbt-coursier/dependency-graph/whatDependsOnResult.log index 365ee39a0..e0e5a5377 100644 --- a/modules/sbt-coursier/src/sbt-test/sbt-coursier/dependency-graph/whatDependsOnResult.log +++ b/modules/sbt-coursier/src/sbt-test/sbt-coursier/dependency-graph/whatDependsOnResult.log @@ -1,9 +1,5 @@ dependency-graph (configurations compile, compile-internal, optional, provided, runtime, runtime-internal, test, test-internal) -├─ log4j:log4j:1.2.16 -│ ├─ org.apache.zookeeper:zookeeper:3.5.0-alpha log4j:log4j:1.2.16 -> 1.2.17 -│ └─ org.slf4j:slf4j-log4j12:1.7.5 -│ └─ org.apache.zookeeper:zookeeper:3.5.0-alpha └─ log4j:log4j:1.2.17 - ├─ org.apache.zookeeper:zookeeper:3.5.0-alpha log4j:log4j:1.2.16 -> 1.2.17 + ├─ org.apache.zookeeper:zookeeper:3.5.0-alpha log4j:log4j:1.2.16 -> 1.2.17 └─ org.slf4j:slf4j-log4j12:1.7.5 └─ org.apache.zookeeper:zookeeper:3.5.0-alpha diff --git a/modules/sbt-shading/src/main/scala/coursier/Shading.scala b/modules/sbt-shading/src/main/scala/coursier/Shading.scala index b410aa10d..5334205c7 100644 --- a/modules/sbt-shading/src/main/scala/coursier/Shading.scala +++ b/modules/sbt-shading/src/main/scala/coursier/Shading.scala @@ -65,16 +65,16 @@ object Shading { def configDependencies(config: Configuration) = { - def minDependencies(dependencies: Set[Dependency]): Set[Dependency] = + def minDependencies(dependencies: Seq[Dependency]): Seq[Dependency] = Orders.minDependencies( - dependencies, + dependencies.toSet, dep => res .projectCache .get(dep) .map(_._2.configurations) .getOrElse(Map.empty) - ) + ).toSeq // sort so that this is deterministic? val includedConfigs = configs.getOrElse(config, Set.empty) + config @@ -85,7 +85,6 @@ object Shading { case (cfg, dep) if includedConfigs(cfg) => dep } - .toSet ) } @@ -105,7 +104,7 @@ object Shading { val compileDeps = configDependencies(baseConfig) val shadedDeps = configDependencies(shadedConf) - val compileOnlyDeps = compileDeps.filterNot(shadedDeps) + val compileOnlyDeps = compileDeps.filterNot(shadedDeps.toSet) log.debug( s"Found ${compileDeps.size} dependencies in $baseConfig\n" + @@ -120,7 +119,7 @@ object Shading { shadedDeps.toVector.map(" " + _).sorted.mkString("\n") ) - def files(deps: Set[Dependency]) = res + def files(deps: Seq[Dependency]) = res .subset(deps) .dependencies .toSeq