Merge pull request #490 from lrytz/lib-unfreeze

Add a `sameVersions` paramter to CoursierConfiguration
This commit is contained in:
Tomasz Godzik 2024-01-26 10:47:51 +01:00 committed by GitHub
commit 7b43b758dd
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 25 additions and 11 deletions

View File

@ -1,12 +1,12 @@
package lmcoursier
import java.io.File
import dataclass.{ data, since }
import dataclass.{data, since}
import coursier.cache.CacheDefaults
import coursier.params.rule.{Rule, RuleResolution}
import lmcoursier.credentials.Credentials
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 scala.concurrent.duration.{Duration, FiniteDuration}
@ -60,4 +60,5 @@ import java.net.URLClassLoader
@since
protocolHandlerDependencies: Seq[ModuleID] = Vector.empty,
retry: Option[(FiniteDuration, Int)] = None,
sameVersions: Seq[Set[InclExclRule]] = Nil,
)

View File

@ -251,7 +251,8 @@ class CoursierDependencyResolution(
.withForceVersion(conf.forceVersions.map { case (k, v) => (ToCoursier.module(k), v) }.toMap)
.withTypelevel(typelevel)
.withReconciliation(ToCoursier.reconciliation(conf.reconciliation))
.withExclusions(excludeDependencies),
.withExclusions(excludeDependencies)
.withRules(ToCoursier.sameVersions(conf.sameVersions)),
strictOpt = conf.strict.map(ToCoursier.strict),
missingOk = conf.missingOk,
retry = conf.retry.getOrElse(ResolutionParams.defaultRetry),

View File

@ -1,6 +1,7 @@
package lmcoursier.definitions
import lmcoursier.credentials.{Credentials, DirectCredentials, FileCredentials}
import sbt.librarymanagement.InclExclRule
// TODO Make private[lmcoursier]
// private[coursier]
@ -31,11 +32,14 @@ object ToCoursier {
.withHttpsOnly(authentication.httpsOnly)
.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.Organization(module.organization.value),
coursier.core.ModuleName(module.name.value),
module.attributes
coursier.core.Organization(organization),
coursier.core.ModuleName(name),
attributes
)
def moduleMatchers(matcher: ModuleMatchers): coursier.util.ModuleMatchers =
@ -61,6 +65,13 @@ object ToCoursier {
Vector[(coursier.util.ModuleMatchers, coursier.core.Reconciliation)] =
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 =
coursier.core.Dependency(
module(dependency.module),

View File

@ -39,7 +39,7 @@ object ResolutionRun {
params.mainRepositories ++
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
@ -182,7 +182,7 @@ object ResolutionRun {
SbtCoursierCache.default.resolutionOpt(params.resolutionKey).map(Right(_)).getOrElse {
val resOrError =
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(())) {
case (acc, (config, extends0)) =>
for {

View File

@ -74,7 +74,8 @@ package object syntax {
sbtClassifiers = false,
providedInCompile = false,
protocolHandlerDependencies = Vector.empty,
retry = None
retry = None,
sameVersions = Nil,
)
}