Merge pull request #392 from alexarchambault/topic/typelevel-and-fixes

Typelevel option and fixes
This commit is contained in:
Alexandre Archambault 2016-11-15 13:56:42 +01:00 committed by GitHub
commit c35e0f851b
6 changed files with 62 additions and 9 deletions

View File

@ -6,6 +6,7 @@ import java.net.{ URL, URLClassLoader }
import java.util.jar.{ Manifest => JManifest }
import java.util.concurrent.Executors
import coursier.cli.typelevel.Typelevel
import coursier.ivy.IvyRepository
import coursier.util.{Print, Parse}
@ -287,7 +288,8 @@ class Helper(
filter = Some(dep => keepOptional || !dep.optional),
userActivations =
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 =
@ -544,7 +546,9 @@ class Helper(
subset: Set[Dependency] = null
): Seq[File] = {
val artifacts0 = artifacts(sources, javadoc, artifactTypes, subset)
val artifacts0 = artifacts(sources, javadoc, artifactTypes, subset).map { artifact =>
artifact.copy(attributes = Attributes())
}.distinct
val logger =
if (verbosityLevel >= 0)
@ -596,7 +600,17 @@ class Helper(
def contextLoader = Thread.currentThread().getContextClassLoader
def baseLoader = ClassLoader.getSystemClassLoader
def baseLoader = {
@tailrec
def rootLoader(cl: ClassLoader): ClassLoader =
Option(cl.getParent) match {
case Some(par) => rootLoader(par)
case None => cl
}
rootLoader(ClassLoader.getSystemClassLoader)
}
lazy val (parentLoader, filteredFiles) = {

View File

@ -85,6 +85,8 @@ case class CommonOptions(
@Value("profile")
@Short("F")
profile: List[String],
@Help("Swap the mainline Scala JARs by Typelevel ones")
typelevel: Boolean = false,
@Recurse
cacheOptions: CacheOptions
) {

View File

@ -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)
)
}

View File

@ -538,7 +538,8 @@ final case class Resolution(
filter: Option[Dependency => Boolean],
osInfo: Activation.Os,
jdkVersion: Option[Version],
userActivations: Option[Map[String, Boolean]]
userActivations: Option[Map[String, Boolean]],
mapDependencies: Option[Dependency => Dependency]
) {
def copyWithCache(
@ -552,6 +553,7 @@ final case class Resolution(
osInfo: Activation.Os = osInfo,
jdkVersion: Option[Version] = jdkVersion,
userActivations: Option[Map[String, Boolean]] = userActivations
// don't allow changing mapDependencies here - that would invalidate finalDependenciesCache
): Resolution =
copy(
rootDependencies,
@ -578,7 +580,8 @@ final case class Resolution(
if (deps == null)
projectCache.get(dep.moduleVersion) match {
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)
res
case None => Nil

View File

@ -75,7 +75,8 @@ package object coursier {
filter: Option[Dependency => Boolean] = None,
osInfo: Activation.Os = Activation.Os.fromProperties(sys.props.toMap),
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 =
core.Resolution(
rootDependencies,
@ -88,7 +89,8 @@ package object coursier {
filter,
osInfo,
jdkVersion,
userActivations
userActivations,
mapDependencies
)
}

View File

@ -55,8 +55,8 @@ org.webjars.npm:esprima-fb:15001.1.0-dev-harmony-fb:default
org.webjars.npm:glob:4.2.1:default
org.webjars.npm:graceful-fs:3.0.7:default
org.webjars.npm:iconv-lite:0.4.13:default
org.webjars.npm:inflight:1.0.4:default
org.webjars.npm:inherits:2.0.1:default
org.webjars.npm:inflight:1.0.6:default
org.webjars.npm:inherits:2.0.3:default
org.webjars.npm:install:0.1.8:default
org.webjars.npm:jstransform:10.1.0:default
org.webjars.npm:lru-cache:2.7.0:default