Move resolvers related tasks to sbt-coursier-shared

So that they can be used from sbt-lm-coursier too
This commit is contained in:
Alexandre Archambault 2018-11-20 18:01:24 +01:00
parent a592ee587a
commit ff79cab75c
5 changed files with 41 additions and 26 deletions

View File

@ -1,7 +1,7 @@
package coursier.sbtcoursier package coursier.sbtcoursiershared
import coursier.lmcoursier._ import coursier.lmcoursier._
import coursier.sbtcoursier.Keys._ import coursier.sbtcoursiershared.SbtCoursierShared.autoImport._
import coursier.sbtcoursiershared.Structure._ import coursier.sbtcoursiershared.Structure._
import sbt.{Classpaths, Def} import sbt.{Classpaths, Def}
import sbt.Keys._ import sbt.Keys._

View File

@ -2,8 +2,9 @@ package coursier.sbtcoursiershared
import coursier.core.{Configuration, Project, Publication} import coursier.core.{Configuration, Project, Publication}
import coursier.lmcoursier.SbtCoursierCache import coursier.lmcoursier.SbtCoursierCache
import sbt.{AutoPlugin, Compile, Setting, TaskKey, Test, settingKey} import sbt.{AutoPlugin, Compile, Setting, TaskKey, Test, settingKey, taskKey}
import sbt.Keys.{classpathTypes, clean} import sbt.Keys.{classpathTypes, clean}
import sbt.librarymanagement.Resolver
object SbtCoursierShared extends AutoPlugin { object SbtCoursierShared extends AutoPlugin {
@ -16,6 +17,13 @@ object SbtCoursierShared extends AutoPlugin {
val coursierProject = TaskKey[Project]("coursier-project") val coursierProject = TaskKey[Project]("coursier-project")
val coursierInterProjectDependencies = TaskKey[Seq[Project]]("coursier-inter-project-dependencies", "Projects the current project depends on, possibly transitively") val coursierInterProjectDependencies = TaskKey[Seq[Project]]("coursier-inter-project-dependencies", "Projects the current project depends on, possibly transitively")
val coursierPublications = TaskKey[Seq[(Configuration, Publication)]]("coursier-publications") val coursierPublications = TaskKey[Seq[(Configuration, Publication)]]("coursier-publications")
val coursierKeepPreloaded = settingKey[Boolean]("Whether to take into account sbt preloaded repositories or not")
val coursierReorderResolvers = settingKey[Boolean](
"Whether resolvers should be re-ordered so that typically slow ones are given a lower priority"
)
val coursierResolvers = taskKey[Seq[Resolver]]("")
val coursierRecursiveResolvers = taskKey[Seq[Resolver]]("Resolvers of the current project, plus those of all from its inter-dependency projects")
} }
import autoImport._ import autoImport._
@ -23,7 +31,15 @@ object SbtCoursierShared extends AutoPlugin {
def publicationsSetting(packageConfigs: Seq[(sbt.Configuration, Configuration)]): Setting[_] = def publicationsSetting(packageConfigs: Seq[(sbt.Configuration, Configuration)]): Setting[_] =
coursierPublications := ArtifactsTasks.coursierPublicationsTask(packageConfigs: _*).value coursierPublications := ArtifactsTasks.coursierPublicationsTask(packageConfigs: _*).value
override def projectSettings = override def buildSettings: Seq[Setting[_]] =
Seq(
coursierReorderResolvers := true,
coursierKeepPreloaded := false
)
override def projectSettings = settings(pubSettings = true)
def settings(pubSettings: Boolean) =
Seq[Setting[_]]( Seq[Setting[_]](
clean := { clean := {
val noWarningPlz = clean.value val noWarningPlz = clean.value
@ -31,12 +47,25 @@ object SbtCoursierShared extends AutoPlugin {
}, },
coursierGenerateIvyXml := true, coursierGenerateIvyXml := true,
coursierProject := InputsTasks.coursierProjectTask.value, coursierProject := InputsTasks.coursierProjectTask.value,
coursierInterProjectDependencies := InputsTasks.coursierInterProjectDependenciesTask.value, coursierInterProjectDependencies := InputsTasks.coursierInterProjectDependenciesTask.value
publicationsSetting(Seq(Compile, Test).map(c => c -> Configuration(c.name))), ) ++ {
if (pubSettings)
Seq(
publicationsSetting(Seq(Compile, Test).map(c => c -> Configuration(c.name)))
)
else
Nil
} ++ Seq(
// Tests artifacts from Maven repositories are given this type. // Tests artifacts from Maven repositories are given this type.
// Adding it here so that these work straightaway. // Adding it here so that these work straightaway.
classpathTypes += "test-jar" classpathTypes += "test-jar", // FIXME Should this go in buildSettings?
) ++ coursierResolvers := RepositoriesTasks.coursierResolversTask.value,
coursierRecursiveResolvers := RepositoriesTasks.coursierRecursiveResolversTask.value,
) ++ {
if (pubSettings)
IvyXml.generateIvyXmlSettings() IvyXml.generateIvyXmlSettings()
else
Nil
}
} }

View File

@ -21,12 +21,8 @@ object CoursierPlugin extends AutoPlugin {
val coursierArtifactsChecksums = Keys.coursierArtifactsChecksums val coursierArtifactsChecksums = Keys.coursierArtifactsChecksums
val coursierCachePolicies = Keys.coursierCachePolicies val coursierCachePolicies = Keys.coursierCachePolicies
val coursierTtl = Keys.coursierTtl val coursierTtl = Keys.coursierTtl
val coursierKeepPreloaded = Keys.coursierKeepPreloaded
val coursierVerbosity = Keys.coursierVerbosity val coursierVerbosity = Keys.coursierVerbosity
val mavenProfiles = Keys.mavenProfiles val mavenProfiles = Keys.mavenProfiles
val coursierResolvers = Keys.coursierResolvers
val coursierReorderResolvers = Keys.coursierReorderResolvers
val coursierRecursiveResolvers = Keys.coursierRecursiveResolvers
val coursierSbtResolvers = Keys.coursierSbtResolvers val coursierSbtResolvers = Keys.coursierSbtResolvers
val coursierUseSbtCredentials = Keys.coursierUseSbtCredentials val coursierUseSbtCredentials = Keys.coursierUseSbtCredentials
val coursierCredentials = Keys.coursierCredentials val coursierCredentials = Keys.coursierCredentials
@ -147,8 +143,6 @@ object CoursierPlugin extends AutoPlugin {
def coursierSettings( def coursierSettings(
shadedConfigOpt: Option[(String, Configuration)] = None shadedConfigOpt: Option[(String, Configuration)] = None
): Seq[Setting[_]] = hackHack ++ Seq( ): Seq[Setting[_]] = hackHack ++ Seq(
coursierResolvers := RepositoriesTasks.coursierResolversTask.value,
coursierRecursiveResolvers := RepositoriesTasks.coursierRecursiveResolversTask.value,
coursierSbtResolvers := { coursierSbtResolvers := {
// TODO Add docker-based integration test for that, see https://github.com/coursier/coursier/issues/632 // TODO Add docker-based integration test for that, see https://github.com/coursier/coursier/issues/632
@ -173,7 +167,7 @@ object CoursierPlugin extends AutoPlugin {
else else
resolvers resolvers
if (coursierKeepPreloaded.value) if (SbtCoursierShared.autoImport.coursierKeepPreloaded.value)
resolvers0 resolvers0
else else
resolvers0.filter { r => resolvers0.filter { r =>
@ -280,8 +274,6 @@ object CoursierPlugin extends AutoPlugin {
coursierUseSbtCredentials := true, coursierUseSbtCredentials := true,
coursierCredentials := Map.empty, coursierCredentials := Map.empty,
coursierCache := Cache.default, coursierCache := Cache.default,
coursierReorderResolvers := true,
coursierKeepPreloaded := false,
coursierCreateLogger := { () => new TermDisplay(new OutputStreamWriter(System.err)) } coursierCreateLogger := { () => new TermDisplay(new OutputStreamWriter(System.err)) }
) )

View File

@ -17,19 +17,12 @@ object Keys {
val coursierArtifactsChecksums = SettingKey[Seq[Option[String]]]("coursier-artifacts-checksums") val coursierArtifactsChecksums = SettingKey[Seq[Option[String]]]("coursier-artifacts-checksums")
val coursierCachePolicies = SettingKey[Seq[CachePolicy]]("coursier-cache-policies") val coursierCachePolicies = SettingKey[Seq[CachePolicy]]("coursier-cache-policies")
val coursierTtl = SettingKey[Option[Duration]]("coursier-ttl") 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 coursierCreateLogger = TaskKey[() => Cache.Logger]("coursier-create-logger") val coursierCreateLogger = TaskKey[() => Cache.Logger]("coursier-create-logger")
val coursierVerbosity = SettingKey[Int]("coursier-verbosity") val coursierVerbosity = SettingKey[Int]("coursier-verbosity")
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 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")
val coursierUseSbtCredentials = SettingKey[Boolean]("coursier-use-sbt-credentials") val coursierUseSbtCredentials = SettingKey[Boolean]("coursier-use-sbt-credentials")
val coursierCredentials = TaskKey[Map[String, Credentials]]("coursier-credentials") val coursierCredentials = TaskKey[Map[String, Credentials]]("coursier-credentials")

View File

@ -97,6 +97,7 @@ object ShadingPlugin extends AutoPlugin {
sbt.Classpaths.ivyBaseSettings ++ sbt.Classpaths.ivyBaseSettings ++
sbt.Classpaths.ivyPublishSettings ++ sbt.Classpaths.ivyPublishSettings ++
shadingJvmPublishSettings ++ shadingJvmPublishSettings ++
SbtCoursierShared.settings(pubSettings = false) ++
CoursierPlugin.coursierSettings( CoursierPlugin.coursierSettings(
Some(baseDependencyConfiguration.value -> Configuration(Shaded.name)) Some(baseDependencyConfiguration.value -> Configuration(Shaded.name))
) ++ ) ++
@ -107,7 +108,7 @@ object ShadingPlugin extends AutoPlugin {
configuration := baseSbtConfiguration, // wuw configuration := baseSbtConfiguration, // wuw
ivyConfigurations := ivyConfigurations.in(baseSbtConfiguration).value ivyConfigurations := ivyConfigurations.in(baseSbtConfiguration).value
.filter(_.name != Shaded.name) .filter(_.name != Shaded.name)
.map(c => c.withExtendsConfigs(c.extendsConfigs.toVector.filter(_.name != Shaded.name))), .map(c => c.withExtendsConfigs(c.extendsConfigs.filter(_.name != Shaded.name))),
libraryDependencies := libraryDependencies.in(baseSbtConfiguration).value.filter { dep => libraryDependencies := libraryDependencies.in(baseSbtConfiguration).value.filter { dep =>
val isShaded = dep.configurations.exists { mappings => val isShaded = dep.configurations.exists { mappings =>
ivyXmlMappings(mappings).exists(_._1 == Configuration(Shaded.name)) ivyXmlMappings(mappings).exists(_._1 == Configuration(Shaded.name))