mirror of https://github.com/sbt/sbt.git
Allow to swap Scala mainline dependencies by Typelevel ones
This commit is contained in:
parent
0ae415c55e
commit
5e0189fa7e
|
|
@ -6,6 +6,7 @@ import java.net.{ URL, URLClassLoader }
|
||||||
import java.util.jar.{ Manifest => JManifest }
|
import java.util.jar.{ Manifest => JManifest }
|
||||||
import java.util.concurrent.Executors
|
import java.util.concurrent.Executors
|
||||||
|
|
||||||
|
import coursier.cli.typelevel.Typelevel
|
||||||
import coursier.ivy.IvyRepository
|
import coursier.ivy.IvyRepository
|
||||||
import coursier.util.{Print, Parse}
|
import coursier.util.{Print, Parse}
|
||||||
|
|
||||||
|
|
@ -287,7 +288,8 @@ class Helper(
|
||||||
filter = Some(dep => keepOptional || !dep.optional),
|
filter = Some(dep => keepOptional || !dep.optional),
|
||||||
userActivations =
|
userActivations =
|
||||||
if (userEnabledProfiles.isEmpty) None
|
if (userEnabledProfiles.isEmpty) None
|
||||||
else Some(userEnabledProfiles.iterator.map(_ -> true).toMap)
|
else Some(userEnabledProfiles.iterator.map(_ -> true).toMap),
|
||||||
|
mapDependencies = if (typelevel) Some(Typelevel.swap(_)) else None
|
||||||
)
|
)
|
||||||
|
|
||||||
val loggerFallbackMode =
|
val loggerFallbackMode =
|
||||||
|
|
|
||||||
|
|
@ -85,6 +85,8 @@ case class CommonOptions(
|
||||||
@Value("profile")
|
@Value("profile")
|
||||||
@Short("F")
|
@Short("F")
|
||||||
profile: List[String],
|
profile: List[String],
|
||||||
|
@Help("Swap the mainline Scala JARs by Typelevel ones")
|
||||||
|
typelevel: Boolean = false,
|
||||||
@Recurse
|
@Recurse
|
||||||
cacheOptions: CacheOptions
|
cacheOptions: CacheOptions
|
||||||
) {
|
) {
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,32 @@
|
||||||
|
package coursier.cli.typelevel
|
||||||
|
|
||||||
|
import coursier.{Dependency, Module}
|
||||||
|
|
||||||
|
object Typelevel {
|
||||||
|
|
||||||
|
val mainLineOrg = "org.scala-lang"
|
||||||
|
val typelevelOrg = "org.typelevel"
|
||||||
|
|
||||||
|
val modules = Set(
|
||||||
|
"scala-compiler",
|
||||||
|
"scala-library",
|
||||||
|
"scala-library-all",
|
||||||
|
"scala-reflect",
|
||||||
|
"scalap"
|
||||||
|
// any other?
|
||||||
|
)
|
||||||
|
|
||||||
|
def swap(module: Module): Module =
|
||||||
|
if (module.organization == mainLineOrg && modules(module.name) && module.attributes.isEmpty)
|
||||||
|
module.copy(
|
||||||
|
organization = typelevelOrg
|
||||||
|
)
|
||||||
|
else
|
||||||
|
module
|
||||||
|
|
||||||
|
def swap(dependency: Dependency): Dependency =
|
||||||
|
dependency.copy(
|
||||||
|
module = swap(dependency.module)
|
||||||
|
)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -538,7 +538,8 @@ final case class Resolution(
|
||||||
filter: Option[Dependency => Boolean],
|
filter: Option[Dependency => Boolean],
|
||||||
osInfo: Activation.Os,
|
osInfo: Activation.Os,
|
||||||
jdkVersion: Option[Version],
|
jdkVersion: Option[Version],
|
||||||
userActivations: Option[Map[String, Boolean]]
|
userActivations: Option[Map[String, Boolean]],
|
||||||
|
mapDependencies: Option[Dependency => Dependency]
|
||||||
) {
|
) {
|
||||||
|
|
||||||
def copyWithCache(
|
def copyWithCache(
|
||||||
|
|
@ -552,6 +553,7 @@ final case class Resolution(
|
||||||
osInfo: Activation.Os = osInfo,
|
osInfo: Activation.Os = osInfo,
|
||||||
jdkVersion: Option[Version] = jdkVersion,
|
jdkVersion: Option[Version] = jdkVersion,
|
||||||
userActivations: Option[Map[String, Boolean]] = userActivations
|
userActivations: Option[Map[String, Boolean]] = userActivations
|
||||||
|
// don't allow changing mapDependencies here - that would invalidate finalDependenciesCache
|
||||||
): Resolution =
|
): Resolution =
|
||||||
copy(
|
copy(
|
||||||
rootDependencies,
|
rootDependencies,
|
||||||
|
|
@ -578,7 +580,8 @@ final case class Resolution(
|
||||||
if (deps == null)
|
if (deps == null)
|
||||||
projectCache.get(dep.moduleVersion) match {
|
projectCache.get(dep.moduleVersion) match {
|
||||||
case Some((_, proj)) =>
|
case Some((_, proj)) =>
|
||||||
val res = finalDependencies(dep, proj).filter(filter getOrElse defaultFilter)
|
val res0 = finalDependencies(dep, proj).filter(filter getOrElse defaultFilter)
|
||||||
|
val res = mapDependencies.fold(res0)(res0.map(_))
|
||||||
finalDependenciesCache0.put(dep, res)
|
finalDependenciesCache0.put(dep, res)
|
||||||
res
|
res
|
||||||
case None => Nil
|
case None => Nil
|
||||||
|
|
|
||||||
|
|
@ -75,7 +75,8 @@ package object coursier {
|
||||||
filter: Option[Dependency => Boolean] = None,
|
filter: Option[Dependency => Boolean] = None,
|
||||||
osInfo: Activation.Os = Activation.Os.fromProperties(sys.props.toMap),
|
osInfo: Activation.Os = Activation.Os.fromProperties(sys.props.toMap),
|
||||||
jdkVersion: Option[Version] = sys.props.get("java.version").flatMap(Parse.version),
|
jdkVersion: Option[Version] = sys.props.get("java.version").flatMap(Parse.version),
|
||||||
userActivations: Option[Map[String, Boolean]] = None
|
userActivations: Option[Map[String, Boolean]] = None,
|
||||||
|
mapDependencies: Option[Dependency => Dependency] = None
|
||||||
): Resolution =
|
): Resolution =
|
||||||
core.Resolution(
|
core.Resolution(
|
||||||
rootDependencies,
|
rootDependencies,
|
||||||
|
|
@ -88,7 +89,8 @@ package object coursier {
|
||||||
filter,
|
filter,
|
||||||
osInfo,
|
osInfo,
|
||||||
jdkVersion,
|
jdkVersion,
|
||||||
userActivations
|
userActivations,
|
||||||
|
mapDependencies
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue