mirror of https://github.com/sbt/sbt.git
Give slow resolvers a lower priority
This commit is contained in:
parent
8d1ff10914
commit
a91b955a9f
|
|
@ -21,6 +21,7 @@ object CoursierPlugin extends AutoPlugin {
|
|||
val coursierVerbosity = Keys.coursierVerbosity
|
||||
val mavenProfiles = Keys.mavenProfiles
|
||||
val coursierResolvers = Keys.coursierResolvers
|
||||
val coursierReorderResolvers = Keys.coursierReorderResolvers
|
||||
val coursierRecursiveResolvers = Keys.coursierRecursiveResolvers
|
||||
val coursierSbtResolvers = Keys.coursierSbtResolvers
|
||||
val coursierUseSbtCredentials = Keys.coursierUseSbtCredentials
|
||||
|
|
@ -171,7 +172,8 @@ object CoursierPlugin extends AutoPlugin {
|
|||
mavenProfiles := Set.empty,
|
||||
coursierUseSbtCredentials := true,
|
||||
coursierCredentials := Map.empty,
|
||||
coursierCache := Cache.default
|
||||
coursierCache := Cache.default,
|
||||
coursierReorderResolvers := true
|
||||
)
|
||||
|
||||
override lazy val projectSettings = coursierSettings(None, Seq(Compile, Test).map(c => c -> c.name)) ++
|
||||
|
|
|
|||
|
|
@ -23,6 +23,10 @@ object Keys {
|
|||
|
||||
val mavenProfiles = SettingKey[Set[String]]("maven-profiles")
|
||||
|
||||
val coursierReorderResolvers = SettingKey[Boolean](
|
||||
"coursier-reorder-resolvers",
|
||||
"Whether resolvers should be re-ordered so that typically slow ones are given a lower priority"
|
||||
)
|
||||
val coursierResolvers = TaskKey[Seq[Resolver]]("coursier-resolvers")
|
||||
val coursierRecursiveResolvers = TaskKey[Seq[Resolver]]("coursier-recursive-resolvers", "Resolvers of the current project, plus those of all from its inter-dependency projects")
|
||||
val coursierSbtResolvers = TaskKey[Seq[Resolver]]("coursier-sbt-resolvers")
|
||||
|
|
|
|||
|
|
@ -44,15 +44,44 @@ object Tasks {
|
|||
structure(state).allProjectRefs.filter(p => deps(p.project))
|
||||
}
|
||||
|
||||
private val slowReposBase = Seq(
|
||||
"https://repo.typesafe.com/",
|
||||
"https://repo.scala-sbt.org/",
|
||||
"http://repo.typesafe.com/",
|
||||
"http://repo.scala-sbt.org/"
|
||||
)
|
||||
|
||||
private val fastReposBase = Seq(
|
||||
"http://repo1.maven.org/",
|
||||
"https://repo1.maven.org/"
|
||||
)
|
||||
|
||||
def coursierResolversTask: Def.Initialize[sbt.Task[Seq[Resolver]]] = Def.task {
|
||||
|
||||
def url(res: Resolver): Option[String] =
|
||||
res match {
|
||||
case m: SbtCompatibility.MavenRepository =>
|
||||
Some(m.root)
|
||||
case u: sbt.URLRepository =>
|
||||
u.patterns.artifactPatterns.headOption
|
||||
.orElse(u.patterns.ivyPatterns.headOption)
|
||||
case _ =>
|
||||
None
|
||||
}
|
||||
|
||||
def fastRepo(res: Resolver): Boolean =
|
||||
url(res).exists(u => fastReposBase.exists(u.startsWith))
|
||||
def slowRepo(res: Resolver): Boolean =
|
||||
url(res).exists(u => slowReposBase.exists(u.startsWith))
|
||||
|
||||
val extRes = externalResolvers.value
|
||||
val isSbtPlugin = sbtPlugin.value
|
||||
val sbtRes = sbtResolver.value
|
||||
val bootResOpt = bootResolvers.value
|
||||
val overrideFlag = overrideBuildResolvers.value
|
||||
val reorderResolvers = coursierReorderResolvers.value
|
||||
|
||||
bootResOpt.filter(_ => overrideFlag).getOrElse {
|
||||
val result = bootResOpt.filter(_ => overrideFlag).getOrElse {
|
||||
var resolvers = extRes
|
||||
if (isSbtPlugin)
|
||||
resolvers = Seq(
|
||||
|
|
@ -61,6 +90,12 @@ object Tasks {
|
|||
) ++ resolvers
|
||||
resolvers
|
||||
}
|
||||
|
||||
if (reorderResolvers && result.exists(fastRepo) && result.exists(slowRepo)) {
|
||||
val (slow, other) = result.partition(slowRepo)
|
||||
other ++ slow
|
||||
} else
|
||||
result
|
||||
}
|
||||
|
||||
def coursierRecursiveResolversTask: Def.Initialize[sbt.Task[Seq[Resolver]]] =
|
||||
|
|
|
|||
Loading…
Reference in New Issue