mirror of https://github.com/sbt/sbt.git
Merge pull request #490 from lrytz/lib-unfreeze
Add a `sameVersions` paramter to CoursierConfiguration
This commit is contained in:
commit
7b43b758dd
|
|
@ -1,12 +1,12 @@
|
||||||
package lmcoursier
|
package lmcoursier
|
||||||
|
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
import dataclass.{data, since}
|
||||||
import dataclass.{ data, since }
|
|
||||||
import coursier.cache.CacheDefaults
|
import coursier.cache.CacheDefaults
|
||||||
|
import coursier.params.rule.{Rule, RuleResolution}
|
||||||
import lmcoursier.credentials.Credentials
|
import lmcoursier.credentials.Credentials
|
||||||
import lmcoursier.definitions.{Authentication, CacheLogger, CachePolicy, FromCoursier, Module, ModuleMatchers, Project, Reconciliation, Strict}
|
import lmcoursier.definitions.{Authentication, CacheLogger, CachePolicy, FromCoursier, Module, ModuleMatchers, Project, Reconciliation, Strict}
|
||||||
import sbt.librarymanagement.{Resolver, UpdateConfiguration, ModuleID, CrossVersion, ModuleInfo, ModuleDescriptorConfiguration}
|
import sbt.librarymanagement.{CrossVersion, InclExclRule, ModuleDescriptorConfiguration, ModuleID, ModuleInfo, Resolver, UpdateConfiguration}
|
||||||
import xsbti.Logger
|
import xsbti.Logger
|
||||||
|
|
||||||
import scala.concurrent.duration.{Duration, FiniteDuration}
|
import scala.concurrent.duration.{Duration, FiniteDuration}
|
||||||
|
|
@ -60,4 +60,5 @@ import java.net.URLClassLoader
|
||||||
@since
|
@since
|
||||||
protocolHandlerDependencies: Seq[ModuleID] = Vector.empty,
|
protocolHandlerDependencies: Seq[ModuleID] = Vector.empty,
|
||||||
retry: Option[(FiniteDuration, Int)] = None,
|
retry: Option[(FiniteDuration, Int)] = None,
|
||||||
|
sameVersions: Seq[Set[InclExclRule]] = Nil,
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -251,7 +251,8 @@ class CoursierDependencyResolution(
|
||||||
.withForceVersion(conf.forceVersions.map { case (k, v) => (ToCoursier.module(k), v) }.toMap)
|
.withForceVersion(conf.forceVersions.map { case (k, v) => (ToCoursier.module(k), v) }.toMap)
|
||||||
.withTypelevel(typelevel)
|
.withTypelevel(typelevel)
|
||||||
.withReconciliation(ToCoursier.reconciliation(conf.reconciliation))
|
.withReconciliation(ToCoursier.reconciliation(conf.reconciliation))
|
||||||
.withExclusions(excludeDependencies),
|
.withExclusions(excludeDependencies)
|
||||||
|
.withRules(ToCoursier.sameVersions(conf.sameVersions)),
|
||||||
strictOpt = conf.strict.map(ToCoursier.strict),
|
strictOpt = conf.strict.map(ToCoursier.strict),
|
||||||
missingOk = conf.missingOk,
|
missingOk = conf.missingOk,
|
||||||
retry = conf.retry.getOrElse(ResolutionParams.defaultRetry),
|
retry = conf.retry.getOrElse(ResolutionParams.defaultRetry),
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
package lmcoursier.definitions
|
package lmcoursier.definitions
|
||||||
|
|
||||||
import lmcoursier.credentials.{Credentials, DirectCredentials, FileCredentials}
|
import lmcoursier.credentials.{Credentials, DirectCredentials, FileCredentials}
|
||||||
|
import sbt.librarymanagement.InclExclRule
|
||||||
|
|
||||||
// TODO Make private[lmcoursier]
|
// TODO Make private[lmcoursier]
|
||||||
// private[coursier]
|
// private[coursier]
|
||||||
|
|
@ -31,11 +32,14 @@ object ToCoursier {
|
||||||
.withHttpsOnly(authentication.httpsOnly)
|
.withHttpsOnly(authentication.httpsOnly)
|
||||||
.withPassOnRedirect(authentication.passOnRedirect)
|
.withPassOnRedirect(authentication.passOnRedirect)
|
||||||
|
|
||||||
def module(module: Module): coursier.core.Module =
|
def module(mod: Module): coursier.core.Module =
|
||||||
|
module(mod.organization.value, mod.name.value, mod.attributes)
|
||||||
|
|
||||||
|
def module(organization: String, name: String, attributes: Map[String, String] = Map.empty): coursier.core.Module =
|
||||||
coursier.core.Module(
|
coursier.core.Module(
|
||||||
coursier.core.Organization(module.organization.value),
|
coursier.core.Organization(organization),
|
||||||
coursier.core.ModuleName(module.name.value),
|
coursier.core.ModuleName(name),
|
||||||
module.attributes
|
attributes
|
||||||
)
|
)
|
||||||
|
|
||||||
def moduleMatchers(matcher: ModuleMatchers): coursier.util.ModuleMatchers =
|
def moduleMatchers(matcher: ModuleMatchers): coursier.util.ModuleMatchers =
|
||||||
|
|
@ -61,6 +65,13 @@ object ToCoursier {
|
||||||
Vector[(coursier.util.ModuleMatchers, coursier.core.Reconciliation)] =
|
Vector[(coursier.util.ModuleMatchers, coursier.core.Reconciliation)] =
|
||||||
rs map { case (m, r) => (moduleMatchers(m), reconciliation(r)) }
|
rs map { case (m, r) => (moduleMatchers(m), reconciliation(r)) }
|
||||||
|
|
||||||
|
def sameVersions(sv: Seq[Set[InclExclRule]]):
|
||||||
|
Seq[(coursier.params.rule.SameVersion, coursier.params.rule.RuleResolution)] =
|
||||||
|
sv.map { libs =>
|
||||||
|
val matchers = libs.map(rule => coursier.util.ModuleMatcher(module(rule.organization, rule.name)))
|
||||||
|
coursier.params.rule.SameVersion(matchers) -> coursier.params.rule.RuleResolution.TryResolve
|
||||||
|
}
|
||||||
|
|
||||||
def dependency(dependency: Dependency): coursier.core.Dependency =
|
def dependency(dependency: Dependency): coursier.core.Dependency =
|
||||||
coursier.core.Dependency(
|
coursier.core.Dependency(
|
||||||
module(dependency.module),
|
module(dependency.module),
|
||||||
|
|
|
||||||
|
|
@ -39,7 +39,7 @@ object ResolutionRun {
|
||||||
params.mainRepositories ++
|
params.mainRepositories ++
|
||||||
params.fallbackDependenciesRepositories
|
params.fallbackDependenciesRepositories
|
||||||
|
|
||||||
val rules = params.strictOpt.map(s => Seq((s, RuleResolution.Fail))).getOrElse(Nil)
|
val rules = params.params.rules ++ params.strictOpt.map(s => Seq((s, RuleResolution.Fail))).getOrElse(Nil)
|
||||||
|
|
||||||
val printOptionalMessage = verbosityLevel >= 0 && verbosityLevel <= 1
|
val printOptionalMessage = verbosityLevel >= 0 && verbosityLevel <= 1
|
||||||
|
|
||||||
|
|
@ -182,7 +182,7 @@ object ResolutionRun {
|
||||||
SbtCoursierCache.default.resolutionOpt(params.resolutionKey).map(Right(_)).getOrElse {
|
SbtCoursierCache.default.resolutionOpt(params.resolutionKey).map(Right(_)).getOrElse {
|
||||||
val resOrError =
|
val resOrError =
|
||||||
Lock.maybeSynchronized(needsLock = params.loggerOpt.nonEmpty || !RefreshLogger.defaultFallbackMode) {
|
Lock.maybeSynchronized(needsLock = params.loggerOpt.nonEmpty || !RefreshLogger.defaultFallbackMode) {
|
||||||
var map = new mutable.HashMap[Configuration, Resolution]
|
val map = new mutable.HashMap[Configuration, Resolution]
|
||||||
val either = params.orderedConfigs.foldLeft[Either[coursier.error.ResolutionError, Unit]](Right(())) {
|
val either = params.orderedConfigs.foldLeft[Either[coursier.error.ResolutionError, Unit]](Right(())) {
|
||||||
case (acc, (config, extends0)) =>
|
case (acc, (config, extends0)) =>
|
||||||
for {
|
for {
|
||||||
|
|
|
||||||
|
|
@ -74,7 +74,8 @@ package object syntax {
|
||||||
sbtClassifiers = false,
|
sbtClassifiers = false,
|
||||||
providedInCompile = false,
|
providedInCompile = false,
|
||||||
protocolHandlerDependencies = Vector.empty,
|
protocolHandlerDependencies = Vector.empty,
|
||||||
retry = None
|
retry = None,
|
||||||
|
sameVersions = Nil,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue