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 coursierVerbosity = Keys.coursierVerbosity
|
||||||
val mavenProfiles = Keys.mavenProfiles
|
val mavenProfiles = Keys.mavenProfiles
|
||||||
val coursierResolvers = Keys.coursierResolvers
|
val coursierResolvers = Keys.coursierResolvers
|
||||||
|
val coursierReorderResolvers = Keys.coursierReorderResolvers
|
||||||
val coursierRecursiveResolvers = Keys.coursierRecursiveResolvers
|
val coursierRecursiveResolvers = Keys.coursierRecursiveResolvers
|
||||||
val coursierSbtResolvers = Keys.coursierSbtResolvers
|
val coursierSbtResolvers = Keys.coursierSbtResolvers
|
||||||
val coursierUseSbtCredentials = Keys.coursierUseSbtCredentials
|
val coursierUseSbtCredentials = Keys.coursierUseSbtCredentials
|
||||||
|
|
@ -171,7 +172,8 @@ object CoursierPlugin extends AutoPlugin {
|
||||||
mavenProfiles := Set.empty,
|
mavenProfiles := Set.empty,
|
||||||
coursierUseSbtCredentials := true,
|
coursierUseSbtCredentials := true,
|
||||||
coursierCredentials := Map.empty,
|
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)) ++
|
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 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 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 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")
|
val coursierSbtResolvers = TaskKey[Seq[Resolver]]("coursier-sbt-resolvers")
|
||||||
|
|
|
||||||
|
|
@ -44,15 +44,44 @@ object Tasks {
|
||||||
structure(state).allProjectRefs.filter(p => deps(p.project))
|
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 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 extRes = externalResolvers.value
|
||||||
val isSbtPlugin = sbtPlugin.value
|
val isSbtPlugin = sbtPlugin.value
|
||||||
val sbtRes = sbtResolver.value
|
val sbtRes = sbtResolver.value
|
||||||
val bootResOpt = bootResolvers.value
|
val bootResOpt = bootResolvers.value
|
||||||
val overrideFlag = overrideBuildResolvers.value
|
val overrideFlag = overrideBuildResolvers.value
|
||||||
|
val reorderResolvers = coursierReorderResolvers.value
|
||||||
|
|
||||||
bootResOpt.filter(_ => overrideFlag).getOrElse {
|
val result = bootResOpt.filter(_ => overrideFlag).getOrElse {
|
||||||
var resolvers = extRes
|
var resolvers = extRes
|
||||||
if (isSbtPlugin)
|
if (isSbtPlugin)
|
||||||
resolvers = Seq(
|
resolvers = Seq(
|
||||||
|
|
@ -61,6 +90,12 @@ object Tasks {
|
||||||
) ++ resolvers
|
) ++ resolvers
|
||||||
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]]] =
|
def coursierRecursiveResolversTask: Def.Initialize[sbt.Task[Seq[Resolver]]] =
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue