Filter out preloaded repos by default

These sometimes have POMs without the corresponding JARs for some
dependencies, which coursier doesn't allow for now (if a repo has
POMs, it must the corresponding JARs).

Plus preloaded stuff aren't that useful with sbt-coursier enabled.
This commit is contained in:
Alexandre Archambault 2017-09-08 16:29:47 +02:00
parent ca5ac162f2
commit ef669e68e4
3 changed files with 53 additions and 24 deletions

View File

@ -18,6 +18,7 @@ object CoursierPlugin extends AutoPlugin {
val coursierArtifactsChecksums = Keys.coursierArtifactsChecksums
val coursierCachePolicies = Keys.coursierCachePolicies
val coursierTtl = Keys.coursierTtl
val coursierKeepPreloaded = Keys.coursierKeepPreloaded
val coursierVerbosity = Keys.coursierVerbosity
val mavenProfiles = Keys.mavenProfiles
val coursierResolvers = Keys.coursierResolvers
@ -138,6 +139,11 @@ object CoursierPlugin extends AutoPlugin {
}
)
private val preloadedBase = {
val rawPattern = "file:///${sbt.preloaded-${sbt.global.base-${user.home}/.sbt}/preloaded/}"
Tasks.exceptionPatternParser().apply(rawPattern).string
}
def coursierSettings(
shadedConfigOpt: Option[(String, String)],
packageConfigs: Seq[(Configuration, String)]
@ -162,10 +168,18 @@ object CoursierPlugin extends AutoPlugin {
case _ => false
}
if (pluginIvySnapshotsFound && !resolvers.contains(Classpaths.sbtPluginReleases))
resolvers :+ Classpaths.sbtPluginReleases
val resolvers0 =
if (pluginIvySnapshotsFound && !resolvers.contains(Classpaths.sbtPluginReleases))
resolvers :+ Classpaths.sbtPluginReleases
else
resolvers
if (coursierKeepPreloaded.value)
resolvers0
else
resolvers
resolvers0.filter { r =>
!r.name.startsWith("local-preloaded")
}
},
coursierFallbackDependencies := Tasks.coursierFallbackDependenciesTask.value,
coursierArtifacts := Tasks.artifactFilesOrErrors(withClassifiers = false).value,
@ -275,7 +289,8 @@ object CoursierPlugin extends AutoPlugin {
coursierUseSbtCredentials := true,
coursierCredentials := Map.empty,
coursierCache := Cache.default,
coursierReorderResolvers := true
coursierReorderResolvers := true,
coursierKeepPreloaded := false
)
override lazy val projectSettings = coursierSettings(None, Seq(Compile, Test).map(c => c -> c.name)) ++

View File

@ -18,6 +18,7 @@ object Keys {
val coursierArtifactsChecksums = SettingKey[Seq[Option[String]]]("coursier-artifacts-checksums")
val coursierCachePolicies = SettingKey[Seq[CachePolicy]]("coursier-cache-policies")
val coursierTtl = SettingKey[Option[Duration]]("coursier-ttl")
val coursierKeepPreloaded = SettingKey[Boolean]("coursier-keep-preloaded", "Whether to take into account sbt preloaded repositories or not")
val coursierVerbosity = SettingKey[Int]("coursier-verbosity")

View File

@ -99,12 +99,21 @@ object Tasks {
Def.task {
val result = resultTask.value
val reorderResolvers = coursierReorderResolvers.value
val keepPreloaded = coursierKeepPreloaded.value
if (reorderResolvers && result.exists(fastRepo) && result.exists(slowRepo)) {
val (slow, other) = result.partition(slowRepo)
other ++ slow
} else
result
val result0 =
if (reorderResolvers && result.exists(fastRepo) && result.exists(slowRepo)) {
val (slow, other) = result.partition(slowRepo)
other ++ slow
} else
result
if (keepPreloaded)
result0
else
result0.filter { r =>
!r.name.startsWith("local-preloaded")
}
}
}
@ -423,7 +432,7 @@ object Tasks {
private def createLogger() = new TermDisplay(new OutputStreamWriter(System.err))
private def globalPluginPatterns(sbtVersion: String): Seq[coursier.ivy.Pattern] = {
private[coursier] def exceptionPatternParser(): String => coursier.ivy.Pattern = {
val props = sys.props.toMap
@ -438,21 +447,25 @@ object Tasks {
addUriProp("sbt.global.base")
addUriProp("user.home")
def pattern(s: String): coursier.ivy.Pattern = {
val p = PropertiesPattern.parse(s) match {
case -\/(err) =>
throw new Exception(s"Cannot parse pattern $s: $err")
case \/-(p) =>
p
}
{
s =>
val p = PropertiesPattern.parse(s) match {
case -\/(err) =>
throw new Exception(s"Cannot parse pattern $s: $err")
case \/-(p) =>
p
}
p.substituteProperties(props ++ extraProps) match {
case -\/(err) =>
throw new Exception(err)
case \/-(p) =>
p
}
p.substituteProperties(props ++ extraProps) match {
case -\/(err) =>
throw new Exception(err)
case \/-(p) =>
p
}
}
}
private def globalPluginPatterns(sbtVersion: String): Seq[coursier.ivy.Pattern] = {
// FIXME get the 0.13 automatically?
val defaultRawPattern = s"$${sbt.global.base.uri-$${user.home.uri}/.sbt/$sbtVersion}/plugins/target" +
@ -468,7 +481,7 @@ object Tasks {
Seq(
defaultRawPattern,
extraRawPattern
).map(pattern)
).map(exceptionPatternParser())
}
def parentProjectCacheTask: Def.Initialize[sbt.Task[Map[Seq[sbt.Resolver],Seq[coursier.ProjectCache]]]] =