From 5bf5058c3150a6ad826ad713484452057f2cadc2 Mon Sep 17 00:00:00 2001 From: Alexandre Archambault Date: Thu, 22 Nov 2018 13:04:35 +0100 Subject: [PATCH 1/5] Add profile handling to sbt-lm-coursier --- .../lmcoursier/CoursierConfiguration.scala | 22 +++++++++++-------- .../src/main/contraband/lm-coursier.json | 6 +++++ .../CoursierDependencyResolution.scala | 2 +- .../sbtcoursiershared/SbtCoursierShared.scala | 5 ++++- .../coursier/sbtcoursier/CoursierPlugin.scala | 2 -- .../scala/coursier/sbtcoursier/Keys.scala | 2 -- .../profiles/build.sbt | 0 .../profiles/output | 0 .../profiles/project/plugins.sbt | 0 .../profiles/src/main/scala/Main.scala | 0 .../profiles/test | 0 .../sbtlmcoursier/LmCoursierPlugin.scala | 2 ++ 12 files changed, 26 insertions(+), 15 deletions(-) rename modules/sbt-coursier/src/sbt-test/{sbt-coursier-group-2 => shared-2}/profiles/build.sbt (100%) rename modules/sbt-coursier/src/sbt-test/{sbt-coursier-group-2 => shared-2}/profiles/output (100%) rename modules/sbt-coursier/src/sbt-test/{sbt-coursier-group-2 => shared-2}/profiles/project/plugins.sbt (100%) rename modules/sbt-coursier/src/sbt-test/{sbt-coursier-group-2 => shared-2}/profiles/src/main/scala/Main.scala (100%) rename modules/sbt-coursier/src/sbt-test/{sbt-coursier-group-2 => shared-2}/profiles/test (100%) diff --git a/modules/lm-coursier/src/main/contraband-scala/coursier/lmcoursier/CoursierConfiguration.scala b/modules/lm-coursier/src/main/contraband-scala/coursier/lmcoursier/CoursierConfiguration.scala index 66bb85f46..c64df48a0 100644 --- a/modules/lm-coursier/src/main/contraband-scala/coursier/lmcoursier/CoursierConfiguration.scala +++ b/modules/lm-coursier/src/main/contraband-scala/coursier/lmcoursier/CoursierConfiguration.scala @@ -18,22 +18,23 @@ final class CoursierConfiguration private ( val fallbackDependencies: Vector[coursier.lmcoursier.FallbackDependency], val autoScalaLibrary: Boolean, val hasClassifiers: Boolean, - val classifiers: Vector[String]) extends Serializable { + val classifiers: Vector[String], + val mavenProfiles: Vector[String]) extends Serializable { - private def this() = this(None, sbt.librarymanagement.Resolver.defaults, true, 6, 100, None, None, Vector.empty, Vector.empty, Vector.empty, Vector.empty, true, false, Vector.empty) + private def this() = this(None, sbt.librarymanagement.Resolver.defaults, true, 6, 100, None, None, Vector.empty, Vector.empty, Vector.empty, Vector.empty, true, false, Vector.empty, Vector.empty) override def equals(o: Any): Boolean = o match { - case x: CoursierConfiguration => (this.log == x.log) && (this.resolvers == x.resolvers) && (this.reorderResolvers == x.reorderResolvers) && (this.parallelDownloads == x.parallelDownloads) && (this.maxIterations == x.maxIterations) && (this.sbtScalaOrganization == x.sbtScalaOrganization) && (this.sbtScalaVersion == x.sbtScalaVersion) && (this.sbtScalaJars == x.sbtScalaJars) && (this.interProjectDependencies == x.interProjectDependencies) && (this.excludeDependencies == x.excludeDependencies) && (this.fallbackDependencies == x.fallbackDependencies) && (this.autoScalaLibrary == x.autoScalaLibrary) && (this.hasClassifiers == x.hasClassifiers) && (this.classifiers == x.classifiers) + case x: CoursierConfiguration => (this.log == x.log) && (this.resolvers == x.resolvers) && (this.reorderResolvers == x.reorderResolvers) && (this.parallelDownloads == x.parallelDownloads) && (this.maxIterations == x.maxIterations) && (this.sbtScalaOrganization == x.sbtScalaOrganization) && (this.sbtScalaVersion == x.sbtScalaVersion) && (this.sbtScalaJars == x.sbtScalaJars) && (this.interProjectDependencies == x.interProjectDependencies) && (this.excludeDependencies == x.excludeDependencies) && (this.fallbackDependencies == x.fallbackDependencies) && (this.autoScalaLibrary == x.autoScalaLibrary) && (this.hasClassifiers == x.hasClassifiers) && (this.classifiers == x.classifiers) && (this.mavenProfiles == x.mavenProfiles) case _ => false } override def hashCode: Int = { - 37 * (37 * (37 * (37 * (37 * (37 * (37 * (37 * (37 * (37 * (37 * (37 * (37 * (37 * (37 * (17 + "coursier.lmcoursier.CoursierConfiguration".##) + log.##) + resolvers.##) + reorderResolvers.##) + parallelDownloads.##) + maxIterations.##) + sbtScalaOrganization.##) + sbtScalaVersion.##) + sbtScalaJars.##) + interProjectDependencies.##) + excludeDependencies.##) + fallbackDependencies.##) + autoScalaLibrary.##) + hasClassifiers.##) + classifiers.##) + 37 * (37 * (37 * (37 * (37 * (37 * (37 * (37 * (37 * (37 * (37 * (37 * (37 * (37 * (37 * (37 * (17 + "coursier.lmcoursier.CoursierConfiguration".##) + log.##) + resolvers.##) + reorderResolvers.##) + parallelDownloads.##) + maxIterations.##) + sbtScalaOrganization.##) + sbtScalaVersion.##) + sbtScalaJars.##) + interProjectDependencies.##) + excludeDependencies.##) + fallbackDependencies.##) + autoScalaLibrary.##) + hasClassifiers.##) + classifiers.##) + mavenProfiles.##) } override def toString: String = { - "CoursierConfiguration(" + log + ", " + resolvers + ", " + reorderResolvers + ", " + parallelDownloads + ", " + maxIterations + ", " + sbtScalaOrganization + ", " + sbtScalaVersion + ", " + sbtScalaJars + ", " + interProjectDependencies + ", " + excludeDependencies + ", " + fallbackDependencies + ", " + autoScalaLibrary + ", " + hasClassifiers + ", " + classifiers + ")" + "CoursierConfiguration(" + log + ", " + resolvers + ", " + reorderResolvers + ", " + parallelDownloads + ", " + maxIterations + ", " + sbtScalaOrganization + ", " + sbtScalaVersion + ", " + sbtScalaJars + ", " + interProjectDependencies + ", " + excludeDependencies + ", " + fallbackDependencies + ", " + autoScalaLibrary + ", " + hasClassifiers + ", " + classifiers + ", " + mavenProfiles + ")" } - private[this] def copy(log: Option[xsbti.Logger] = log, resolvers: Vector[sbt.librarymanagement.Resolver] = resolvers, reorderResolvers: Boolean = reorderResolvers, parallelDownloads: Int = parallelDownloads, maxIterations: Int = maxIterations, sbtScalaOrganization: Option[String] = sbtScalaOrganization, sbtScalaVersion: Option[String] = sbtScalaVersion, sbtScalaJars: Vector[java.io.File] = sbtScalaJars, interProjectDependencies: Vector[coursier.core.Project] = interProjectDependencies, excludeDependencies: Vector[(String, String)] = excludeDependencies, fallbackDependencies: Vector[coursier.lmcoursier.FallbackDependency] = fallbackDependencies, autoScalaLibrary: Boolean = autoScalaLibrary, hasClassifiers: Boolean = hasClassifiers, classifiers: Vector[String] = classifiers): CoursierConfiguration = { - new CoursierConfiguration(log, resolvers, reorderResolvers, parallelDownloads, maxIterations, sbtScalaOrganization, sbtScalaVersion, sbtScalaJars, interProjectDependencies, excludeDependencies, fallbackDependencies, autoScalaLibrary, hasClassifiers, classifiers) + private[this] def copy(log: Option[xsbti.Logger] = log, resolvers: Vector[sbt.librarymanagement.Resolver] = resolvers, reorderResolvers: Boolean = reorderResolvers, parallelDownloads: Int = parallelDownloads, maxIterations: Int = maxIterations, sbtScalaOrganization: Option[String] = sbtScalaOrganization, sbtScalaVersion: Option[String] = sbtScalaVersion, sbtScalaJars: Vector[java.io.File] = sbtScalaJars, interProjectDependencies: Vector[coursier.core.Project] = interProjectDependencies, excludeDependencies: Vector[(String, String)] = excludeDependencies, fallbackDependencies: Vector[coursier.lmcoursier.FallbackDependency] = fallbackDependencies, autoScalaLibrary: Boolean = autoScalaLibrary, hasClassifiers: Boolean = hasClassifiers, classifiers: Vector[String] = classifiers, mavenProfiles: Vector[String] = mavenProfiles): CoursierConfiguration = { + new CoursierConfiguration(log, resolvers, reorderResolvers, parallelDownloads, maxIterations, sbtScalaOrganization, sbtScalaVersion, sbtScalaJars, interProjectDependencies, excludeDependencies, fallbackDependencies, autoScalaLibrary, hasClassifiers, classifiers, mavenProfiles) } def withLog(log: Option[xsbti.Logger]): CoursierConfiguration = { copy(log = log) @@ -86,10 +87,13 @@ final class CoursierConfiguration private ( def withClassifiers(classifiers: Vector[String]): CoursierConfiguration = { copy(classifiers = classifiers) } + def withMavenProfiles(mavenProfiles: Vector[String]): CoursierConfiguration = { + copy(mavenProfiles = mavenProfiles) + } } object CoursierConfiguration { def apply(): CoursierConfiguration = new CoursierConfiguration() - def apply(log: Option[xsbti.Logger], resolvers: Vector[sbt.librarymanagement.Resolver], reorderResolvers: Boolean, parallelDownloads: Int, maxIterations: Int, sbtScalaOrganization: Option[String], sbtScalaVersion: Option[String], sbtScalaJars: Vector[java.io.File], interProjectDependencies: Vector[coursier.core.Project], excludeDependencies: Vector[(String, String)], fallbackDependencies: Vector[coursier.lmcoursier.FallbackDependency], autoScalaLibrary: Boolean, hasClassifiers: Boolean, classifiers: Vector[String]): CoursierConfiguration = new CoursierConfiguration(log, resolvers, reorderResolvers, parallelDownloads, maxIterations, sbtScalaOrganization, sbtScalaVersion, sbtScalaJars, interProjectDependencies, excludeDependencies, fallbackDependencies, autoScalaLibrary, hasClassifiers, classifiers) - def apply(log: xsbti.Logger, resolvers: Vector[sbt.librarymanagement.Resolver], reorderResolvers: Boolean, parallelDownloads: Int, maxIterations: Int, sbtScalaOrganization: String, sbtScalaVersion: String, sbtScalaJars: Vector[java.io.File], interProjectDependencies: Vector[coursier.core.Project], excludeDependencies: Vector[(String, String)], fallbackDependencies: Vector[coursier.lmcoursier.FallbackDependency], autoScalaLibrary: Boolean, hasClassifiers: Boolean, classifiers: Vector[String]): CoursierConfiguration = new CoursierConfiguration(Option(log), resolvers, reorderResolvers, parallelDownloads, maxIterations, Option(sbtScalaOrganization), Option(sbtScalaVersion), sbtScalaJars, interProjectDependencies, excludeDependencies, fallbackDependencies, autoScalaLibrary, hasClassifiers, classifiers) + def apply(log: Option[xsbti.Logger], resolvers: Vector[sbt.librarymanagement.Resolver], reorderResolvers: Boolean, parallelDownloads: Int, maxIterations: Int, sbtScalaOrganization: Option[String], sbtScalaVersion: Option[String], sbtScalaJars: Vector[java.io.File], interProjectDependencies: Vector[coursier.core.Project], excludeDependencies: Vector[(String, String)], fallbackDependencies: Vector[coursier.lmcoursier.FallbackDependency], autoScalaLibrary: Boolean, hasClassifiers: Boolean, classifiers: Vector[String], mavenProfiles: Vector[String]): CoursierConfiguration = new CoursierConfiguration(log, resolvers, reorderResolvers, parallelDownloads, maxIterations, sbtScalaOrganization, sbtScalaVersion, sbtScalaJars, interProjectDependencies, excludeDependencies, fallbackDependencies, autoScalaLibrary, hasClassifiers, classifiers, mavenProfiles) + def apply(log: xsbti.Logger, resolvers: Vector[sbt.librarymanagement.Resolver], reorderResolvers: Boolean, parallelDownloads: Int, maxIterations: Int, sbtScalaOrganization: String, sbtScalaVersion: String, sbtScalaJars: Vector[java.io.File], interProjectDependencies: Vector[coursier.core.Project], excludeDependencies: Vector[(String, String)], fallbackDependencies: Vector[coursier.lmcoursier.FallbackDependency], autoScalaLibrary: Boolean, hasClassifiers: Boolean, classifiers: Vector[String], mavenProfiles: Vector[String]): CoursierConfiguration = new CoursierConfiguration(Option(log), resolvers, reorderResolvers, parallelDownloads, maxIterations, Option(sbtScalaOrganization), Option(sbtScalaVersion), sbtScalaJars, interProjectDependencies, excludeDependencies, fallbackDependencies, autoScalaLibrary, hasClassifiers, classifiers, mavenProfiles) } diff --git a/modules/lm-coursier/src/main/contraband/lm-coursier.json b/modules/lm-coursier/src/main/contraband/lm-coursier.json index 8a96a16cc..e6b825954 100644 --- a/modules/lm-coursier/src/main/contraband/lm-coursier.json +++ b/modules/lm-coursier/src/main/contraband/lm-coursier.json @@ -90,6 +90,12 @@ "type": "String*", "default": "Vector.empty", "since": "0.0.1" + }, + { + "name": "mavenProfiles", + "type": "String*", + "default": "Vector.empty", + "since": "0.0.1" } ] } diff --git a/modules/lm-coursier/src/main/scala/coursier/lmcoursier/CoursierDependencyResolution.scala b/modules/lm-coursier/src/main/scala/coursier/lmcoursier/CoursierDependencyResolution.scala index 73ace8ad6..fb56c19cb 100644 --- a/modules/lm-coursier/src/main/scala/coursier/lmcoursier/CoursierDependencyResolution.scala +++ b/modules/lm-coursier/src/main/scala/coursier/lmcoursier/CoursierDependencyResolution.scala @@ -131,7 +131,7 @@ class CoursierDependencyResolution(conf: CoursierConfiguration) extends Dependen parentProjectCache = Map.empty, interProjectDependencies = conf.interProjectDependencies, internalRepositories = internalRepositories, - userEnabledProfiles = Set.empty, + userEnabledProfiles = conf.mavenProfiles.toSet, userForceVersions = Map.empty, typelevel = false, so = so, diff --git a/modules/sbt-coursier-shared/src/main/scala/coursier/sbtcoursiershared/SbtCoursierShared.scala b/modules/sbt-coursier-shared/src/main/scala/coursier/sbtcoursiershared/SbtCoursierShared.scala index 5f00bbe09..981ac0e9f 100644 --- a/modules/sbt-coursier-shared/src/main/scala/coursier/sbtcoursiershared/SbtCoursierShared.scala +++ b/modules/sbt-coursier-shared/src/main/scala/coursier/sbtcoursiershared/SbtCoursierShared.scala @@ -27,6 +27,8 @@ object SbtCoursierShared extends AutoPlugin { val coursierSbtResolvers = taskKey[Seq[Resolver]]("") val coursierFallbackDependencies = taskKey[Seq[FallbackDependency]]("") + + val mavenProfiles = settingKey[Set[String]]("") } import autoImport._ @@ -136,7 +138,8 @@ object SbtCoursierShared extends AutoPlugin { ) confs ++ extraSources.toSeq ++ extraDocs.toSeq - } + }, + mavenProfiles := Set.empty ) ++ { if (pubSettings) IvyXml.generateIvyXmlSettings() diff --git a/modules/sbt-coursier/src/main/scala/coursier/sbtcoursier/CoursierPlugin.scala b/modules/sbt-coursier/src/main/scala/coursier/sbtcoursier/CoursierPlugin.scala index a33dac17e..f57d9ad44 100644 --- a/modules/sbt-coursier/src/main/scala/coursier/sbtcoursier/CoursierPlugin.scala +++ b/modules/sbt-coursier/src/main/scala/coursier/sbtcoursier/CoursierPlugin.scala @@ -22,7 +22,6 @@ object CoursierPlugin extends AutoPlugin { val coursierCachePolicies = Keys.coursierCachePolicies val coursierTtl = Keys.coursierTtl val coursierVerbosity = Keys.coursierVerbosity - val mavenProfiles = Keys.mavenProfiles val coursierUseSbtCredentials = Keys.coursierUseSbtCredentials val coursierCredentials = Keys.coursierCredentials val coursierCache = Keys.coursierCache @@ -195,7 +194,6 @@ object CoursierPlugin extends AutoPlugin { coursierCachePolicies := CachePolicy.default, coursierTtl := Cache.defaultTtl, coursierVerbosity := Settings.defaultVerbosityLevel(sLog.value), - mavenProfiles := Set.empty, coursierUseSbtCredentials := true, coursierCredentials := Map.empty, coursierCache := Cache.default, diff --git a/modules/sbt-coursier/src/main/scala/coursier/sbtcoursier/Keys.scala b/modules/sbt-coursier/src/main/scala/coursier/sbtcoursier/Keys.scala index ef2727385..1405bc429 100644 --- a/modules/sbt-coursier/src/main/scala/coursier/sbtcoursier/Keys.scala +++ b/modules/sbt-coursier/src/main/scala/coursier/sbtcoursier/Keys.scala @@ -21,8 +21,6 @@ object Keys { val coursierVerbosity = SettingKey[Int]("coursier-verbosity") - val mavenProfiles = SettingKey[Set[String]]("maven-profiles") - val coursierUseSbtCredentials = SettingKey[Boolean]("coursier-use-sbt-credentials") val coursierCredentials = TaskKey[Map[String, Credentials]]("coursier-credentials") diff --git a/modules/sbt-coursier/src/sbt-test/sbt-coursier-group-2/profiles/build.sbt b/modules/sbt-coursier/src/sbt-test/shared-2/profiles/build.sbt similarity index 100% rename from modules/sbt-coursier/src/sbt-test/sbt-coursier-group-2/profiles/build.sbt rename to modules/sbt-coursier/src/sbt-test/shared-2/profiles/build.sbt diff --git a/modules/sbt-coursier/src/sbt-test/sbt-coursier-group-2/profiles/output b/modules/sbt-coursier/src/sbt-test/shared-2/profiles/output similarity index 100% rename from modules/sbt-coursier/src/sbt-test/sbt-coursier-group-2/profiles/output rename to modules/sbt-coursier/src/sbt-test/shared-2/profiles/output diff --git a/modules/sbt-coursier/src/sbt-test/sbt-coursier-group-2/profiles/project/plugins.sbt b/modules/sbt-coursier/src/sbt-test/shared-2/profiles/project/plugins.sbt similarity index 100% rename from modules/sbt-coursier/src/sbt-test/sbt-coursier-group-2/profiles/project/plugins.sbt rename to modules/sbt-coursier/src/sbt-test/shared-2/profiles/project/plugins.sbt diff --git a/modules/sbt-coursier/src/sbt-test/sbt-coursier-group-2/profiles/src/main/scala/Main.scala b/modules/sbt-coursier/src/sbt-test/shared-2/profiles/src/main/scala/Main.scala similarity index 100% rename from modules/sbt-coursier/src/sbt-test/sbt-coursier-group-2/profiles/src/main/scala/Main.scala rename to modules/sbt-coursier/src/sbt-test/shared-2/profiles/src/main/scala/Main.scala diff --git a/modules/sbt-coursier/src/sbt-test/sbt-coursier-group-2/profiles/test b/modules/sbt-coursier/src/sbt-test/shared-2/profiles/test similarity index 100% rename from modules/sbt-coursier/src/sbt-test/sbt-coursier-group-2/profiles/test rename to modules/sbt-coursier/src/sbt-test/shared-2/profiles/test diff --git a/modules/sbt-lm-coursier/src/main/scala/coursier/sbtlmcoursier/LmCoursierPlugin.scala b/modules/sbt-lm-coursier/src/main/scala/coursier/sbtlmcoursier/LmCoursierPlugin.scala index 249257bf0..8e4884666 100644 --- a/modules/sbt-lm-coursier/src/main/scala/coursier/sbtlmcoursier/LmCoursierPlugin.scala +++ b/modules/sbt-lm-coursier/src/main/scala/coursier/sbtlmcoursier/LmCoursierPlugin.scala @@ -72,6 +72,7 @@ object LmCoursierPlugin extends AutoPlugin { ) val fallbackDeps = coursierFallbackDependencies.value val autoScalaLib = autoScalaLibrary.value + val profiles = mavenProfiles.value val internalSbtScalaProvider = appConfiguration.value.provider.scalaProvider val sbtBootJars = internalSbtScalaProvider.jars() @@ -99,6 +100,7 @@ object LmCoursierPlugin extends AutoPlugin { .withSbtScalaOrganization(sbtScalaOrganization) .withClassifiers(classifiers.toVector.flatten.map(_.value)) .withHasClassifiers(classifiers.nonEmpty) + .withMavenProfiles(profiles.toVector.sorted) .withLog(s.log) } } From 3cbb1e3c2eea25e5f3ecd872a712655a460b9bfb Mon Sep 17 00:00:00 2001 From: Alexandre Archambault Date: Thu, 22 Nov 2018 13:07:10 +0100 Subject: [PATCH 2/5] Tweak scala organization handling in sbt-lm-coursier --- .../lmcoursier/CoursierConfiguration.scala | 32 +++++++++++++------ .../src/main/contraband/lm-coursier.json | 12 +++++++ .../CoursierDependencyResolution.scala | 12 +++++-- .../typelevel-with-dependencies/build.sbt | 0 .../project/plugins.sbt | 0 .../src/main/scala/Foo.scala | 0 .../typelevel-with-dependencies/test | 0 .../sbtlmcoursier/LmCoursierPlugin.scala | 8 +++-- 8 files changed, 50 insertions(+), 14 deletions(-) rename modules/sbt-coursier/src/sbt-test/{sbt-coursier-group-2 => shared-2}/typelevel-with-dependencies/build.sbt (100%) rename modules/sbt-coursier/src/sbt-test/{sbt-coursier-group-2 => shared-2}/typelevel-with-dependencies/project/plugins.sbt (100%) rename modules/sbt-coursier/src/sbt-test/{sbt-coursier-group-2 => shared-2}/typelevel-with-dependencies/src/main/scala/Foo.scala (100%) rename modules/sbt-coursier/src/sbt-test/{sbt-coursier-group-2 => shared-2}/typelevel-with-dependencies/test (100%) diff --git a/modules/lm-coursier/src/main/contraband-scala/coursier/lmcoursier/CoursierConfiguration.scala b/modules/lm-coursier/src/main/contraband-scala/coursier/lmcoursier/CoursierConfiguration.scala index c64df48a0..74023547e 100644 --- a/modules/lm-coursier/src/main/contraband-scala/coursier/lmcoursier/CoursierConfiguration.scala +++ b/modules/lm-coursier/src/main/contraband-scala/coursier/lmcoursier/CoursierConfiguration.scala @@ -19,22 +19,24 @@ final class CoursierConfiguration private ( val autoScalaLibrary: Boolean, val hasClassifiers: Boolean, val classifiers: Vector[String], - val mavenProfiles: Vector[String]) extends Serializable { + val mavenProfiles: Vector[String], + val scalaOrganization: Option[String], + val scalaVersion: Option[String]) extends Serializable { - private def this() = this(None, sbt.librarymanagement.Resolver.defaults, true, 6, 100, None, None, Vector.empty, Vector.empty, Vector.empty, Vector.empty, true, false, Vector.empty, Vector.empty) + private def this() = this(None, sbt.librarymanagement.Resolver.defaults, true, 6, 100, None, None, Vector.empty, Vector.empty, Vector.empty, Vector.empty, true, false, Vector.empty, Vector.empty, None, None) override def equals(o: Any): Boolean = o match { - case x: CoursierConfiguration => (this.log == x.log) && (this.resolvers == x.resolvers) && (this.reorderResolvers == x.reorderResolvers) && (this.parallelDownloads == x.parallelDownloads) && (this.maxIterations == x.maxIterations) && (this.sbtScalaOrganization == x.sbtScalaOrganization) && (this.sbtScalaVersion == x.sbtScalaVersion) && (this.sbtScalaJars == x.sbtScalaJars) && (this.interProjectDependencies == x.interProjectDependencies) && (this.excludeDependencies == x.excludeDependencies) && (this.fallbackDependencies == x.fallbackDependencies) && (this.autoScalaLibrary == x.autoScalaLibrary) && (this.hasClassifiers == x.hasClassifiers) && (this.classifiers == x.classifiers) && (this.mavenProfiles == x.mavenProfiles) + case x: CoursierConfiguration => (this.log == x.log) && (this.resolvers == x.resolvers) && (this.reorderResolvers == x.reorderResolvers) && (this.parallelDownloads == x.parallelDownloads) && (this.maxIterations == x.maxIterations) && (this.sbtScalaOrganization == x.sbtScalaOrganization) && (this.sbtScalaVersion == x.sbtScalaVersion) && (this.sbtScalaJars == x.sbtScalaJars) && (this.interProjectDependencies == x.interProjectDependencies) && (this.excludeDependencies == x.excludeDependencies) && (this.fallbackDependencies == x.fallbackDependencies) && (this.autoScalaLibrary == x.autoScalaLibrary) && (this.hasClassifiers == x.hasClassifiers) && (this.classifiers == x.classifiers) && (this.mavenProfiles == x.mavenProfiles) && (this.scalaOrganization == x.scalaOrganization) && (this.scalaVersion == x.scalaVersion) case _ => false } override def hashCode: Int = { - 37 * (37 * (37 * (37 * (37 * (37 * (37 * (37 * (37 * (37 * (37 * (37 * (37 * (37 * (37 * (37 * (17 + "coursier.lmcoursier.CoursierConfiguration".##) + log.##) + resolvers.##) + reorderResolvers.##) + parallelDownloads.##) + maxIterations.##) + sbtScalaOrganization.##) + sbtScalaVersion.##) + sbtScalaJars.##) + interProjectDependencies.##) + excludeDependencies.##) + fallbackDependencies.##) + autoScalaLibrary.##) + hasClassifiers.##) + classifiers.##) + mavenProfiles.##) + 37 * (37 * (37 * (37 * (37 * (37 * (37 * (37 * (37 * (37 * (37 * (37 * (37 * (37 * (37 * (37 * (37 * (37 * (17 + "coursier.lmcoursier.CoursierConfiguration".##) + log.##) + resolvers.##) + reorderResolvers.##) + parallelDownloads.##) + maxIterations.##) + sbtScalaOrganization.##) + sbtScalaVersion.##) + sbtScalaJars.##) + interProjectDependencies.##) + excludeDependencies.##) + fallbackDependencies.##) + autoScalaLibrary.##) + hasClassifiers.##) + classifiers.##) + mavenProfiles.##) + scalaOrganization.##) + scalaVersion.##) } override def toString: String = { - "CoursierConfiguration(" + log + ", " + resolvers + ", " + reorderResolvers + ", " + parallelDownloads + ", " + maxIterations + ", " + sbtScalaOrganization + ", " + sbtScalaVersion + ", " + sbtScalaJars + ", " + interProjectDependencies + ", " + excludeDependencies + ", " + fallbackDependencies + ", " + autoScalaLibrary + ", " + hasClassifiers + ", " + classifiers + ", " + mavenProfiles + ")" + "CoursierConfiguration(" + log + ", " + resolvers + ", " + reorderResolvers + ", " + parallelDownloads + ", " + maxIterations + ", " + sbtScalaOrganization + ", " + sbtScalaVersion + ", " + sbtScalaJars + ", " + interProjectDependencies + ", " + excludeDependencies + ", " + fallbackDependencies + ", " + autoScalaLibrary + ", " + hasClassifiers + ", " + classifiers + ", " + mavenProfiles + ", " + scalaOrganization + ", " + scalaVersion + ")" } - private[this] def copy(log: Option[xsbti.Logger] = log, resolvers: Vector[sbt.librarymanagement.Resolver] = resolvers, reorderResolvers: Boolean = reorderResolvers, parallelDownloads: Int = parallelDownloads, maxIterations: Int = maxIterations, sbtScalaOrganization: Option[String] = sbtScalaOrganization, sbtScalaVersion: Option[String] = sbtScalaVersion, sbtScalaJars: Vector[java.io.File] = sbtScalaJars, interProjectDependencies: Vector[coursier.core.Project] = interProjectDependencies, excludeDependencies: Vector[(String, String)] = excludeDependencies, fallbackDependencies: Vector[coursier.lmcoursier.FallbackDependency] = fallbackDependencies, autoScalaLibrary: Boolean = autoScalaLibrary, hasClassifiers: Boolean = hasClassifiers, classifiers: Vector[String] = classifiers, mavenProfiles: Vector[String] = mavenProfiles): CoursierConfiguration = { - new CoursierConfiguration(log, resolvers, reorderResolvers, parallelDownloads, maxIterations, sbtScalaOrganization, sbtScalaVersion, sbtScalaJars, interProjectDependencies, excludeDependencies, fallbackDependencies, autoScalaLibrary, hasClassifiers, classifiers, mavenProfiles) + private[this] def copy(log: Option[xsbti.Logger] = log, resolvers: Vector[sbt.librarymanagement.Resolver] = resolvers, reorderResolvers: Boolean = reorderResolvers, parallelDownloads: Int = parallelDownloads, maxIterations: Int = maxIterations, sbtScalaOrganization: Option[String] = sbtScalaOrganization, sbtScalaVersion: Option[String] = sbtScalaVersion, sbtScalaJars: Vector[java.io.File] = sbtScalaJars, interProjectDependencies: Vector[coursier.core.Project] = interProjectDependencies, excludeDependencies: Vector[(String, String)] = excludeDependencies, fallbackDependencies: Vector[coursier.lmcoursier.FallbackDependency] = fallbackDependencies, autoScalaLibrary: Boolean = autoScalaLibrary, hasClassifiers: Boolean = hasClassifiers, classifiers: Vector[String] = classifiers, mavenProfiles: Vector[String] = mavenProfiles, scalaOrganization: Option[String] = scalaOrganization, scalaVersion: Option[String] = scalaVersion): CoursierConfiguration = { + new CoursierConfiguration(log, resolvers, reorderResolvers, parallelDownloads, maxIterations, sbtScalaOrganization, sbtScalaVersion, sbtScalaJars, interProjectDependencies, excludeDependencies, fallbackDependencies, autoScalaLibrary, hasClassifiers, classifiers, mavenProfiles, scalaOrganization, scalaVersion) } def withLog(log: Option[xsbti.Logger]): CoursierConfiguration = { copy(log = log) @@ -90,10 +92,22 @@ final class CoursierConfiguration private ( def withMavenProfiles(mavenProfiles: Vector[String]): CoursierConfiguration = { copy(mavenProfiles = mavenProfiles) } + def withScalaOrganization(scalaOrganization: Option[String]): CoursierConfiguration = { + copy(scalaOrganization = scalaOrganization) + } + def withScalaOrganization(scalaOrganization: String): CoursierConfiguration = { + copy(scalaOrganization = Option(scalaOrganization)) + } + def withScalaVersion(scalaVersion: Option[String]): CoursierConfiguration = { + copy(scalaVersion = scalaVersion) + } + def withScalaVersion(scalaVersion: String): CoursierConfiguration = { + copy(scalaVersion = Option(scalaVersion)) + } } object CoursierConfiguration { def apply(): CoursierConfiguration = new CoursierConfiguration() - def apply(log: Option[xsbti.Logger], resolvers: Vector[sbt.librarymanagement.Resolver], reorderResolvers: Boolean, parallelDownloads: Int, maxIterations: Int, sbtScalaOrganization: Option[String], sbtScalaVersion: Option[String], sbtScalaJars: Vector[java.io.File], interProjectDependencies: Vector[coursier.core.Project], excludeDependencies: Vector[(String, String)], fallbackDependencies: Vector[coursier.lmcoursier.FallbackDependency], autoScalaLibrary: Boolean, hasClassifiers: Boolean, classifiers: Vector[String], mavenProfiles: Vector[String]): CoursierConfiguration = new CoursierConfiguration(log, resolvers, reorderResolvers, parallelDownloads, maxIterations, sbtScalaOrganization, sbtScalaVersion, sbtScalaJars, interProjectDependencies, excludeDependencies, fallbackDependencies, autoScalaLibrary, hasClassifiers, classifiers, mavenProfiles) - def apply(log: xsbti.Logger, resolvers: Vector[sbt.librarymanagement.Resolver], reorderResolvers: Boolean, parallelDownloads: Int, maxIterations: Int, sbtScalaOrganization: String, sbtScalaVersion: String, sbtScalaJars: Vector[java.io.File], interProjectDependencies: Vector[coursier.core.Project], excludeDependencies: Vector[(String, String)], fallbackDependencies: Vector[coursier.lmcoursier.FallbackDependency], autoScalaLibrary: Boolean, hasClassifiers: Boolean, classifiers: Vector[String], mavenProfiles: Vector[String]): CoursierConfiguration = new CoursierConfiguration(Option(log), resolvers, reorderResolvers, parallelDownloads, maxIterations, Option(sbtScalaOrganization), Option(sbtScalaVersion), sbtScalaJars, interProjectDependencies, excludeDependencies, fallbackDependencies, autoScalaLibrary, hasClassifiers, classifiers, mavenProfiles) + def apply(log: Option[xsbti.Logger], resolvers: Vector[sbt.librarymanagement.Resolver], reorderResolvers: Boolean, parallelDownloads: Int, maxIterations: Int, sbtScalaOrganization: Option[String], sbtScalaVersion: Option[String], sbtScalaJars: Vector[java.io.File], interProjectDependencies: Vector[coursier.core.Project], excludeDependencies: Vector[(String, String)], fallbackDependencies: Vector[coursier.lmcoursier.FallbackDependency], autoScalaLibrary: Boolean, hasClassifiers: Boolean, classifiers: Vector[String], mavenProfiles: Vector[String], scalaOrganization: Option[String], scalaVersion: Option[String]): CoursierConfiguration = new CoursierConfiguration(log, resolvers, reorderResolvers, parallelDownloads, maxIterations, sbtScalaOrganization, sbtScalaVersion, sbtScalaJars, interProjectDependencies, excludeDependencies, fallbackDependencies, autoScalaLibrary, hasClassifiers, classifiers, mavenProfiles, scalaOrganization, scalaVersion) + def apply(log: xsbti.Logger, resolvers: Vector[sbt.librarymanagement.Resolver], reorderResolvers: Boolean, parallelDownloads: Int, maxIterations: Int, sbtScalaOrganization: String, sbtScalaVersion: String, sbtScalaJars: Vector[java.io.File], interProjectDependencies: Vector[coursier.core.Project], excludeDependencies: Vector[(String, String)], fallbackDependencies: Vector[coursier.lmcoursier.FallbackDependency], autoScalaLibrary: Boolean, hasClassifiers: Boolean, classifiers: Vector[String], mavenProfiles: Vector[String], scalaOrganization: String, scalaVersion: String): CoursierConfiguration = new CoursierConfiguration(Option(log), resolvers, reorderResolvers, parallelDownloads, maxIterations, Option(sbtScalaOrganization), Option(sbtScalaVersion), sbtScalaJars, interProjectDependencies, excludeDependencies, fallbackDependencies, autoScalaLibrary, hasClassifiers, classifiers, mavenProfiles, Option(scalaOrganization), Option(scalaVersion)) } diff --git a/modules/lm-coursier/src/main/contraband/lm-coursier.json b/modules/lm-coursier/src/main/contraband/lm-coursier.json index e6b825954..ff779b349 100644 --- a/modules/lm-coursier/src/main/contraband/lm-coursier.json +++ b/modules/lm-coursier/src/main/contraband/lm-coursier.json @@ -96,6 +96,18 @@ "type": "String*", "default": "Vector.empty", "since": "0.0.1" + }, + { + "name": "scalaOrganization", + "type": "String?", + "default": "None", + "since": "0.0.1" + }, + { + "name": "scalaVersion", + "type": "String?", + "default": "None", + "since": "0.0.1" } ] } diff --git a/modules/lm-coursier/src/main/scala/coursier/lmcoursier/CoursierDependencyResolution.scala b/modules/lm-coursier/src/main/scala/coursier/lmcoursier/CoursierDependencyResolution.scala index fb56c19cb..ca1e98ee0 100644 --- a/modules/lm-coursier/src/main/scala/coursier/lmcoursier/CoursierDependencyResolution.scala +++ b/modules/lm-coursier/src/main/scala/coursier/lmcoursier/CoursierDependencyResolution.scala @@ -5,6 +5,7 @@ import java.io.{File, OutputStreamWriter} import _root_.coursier.{Artifact, Cache, CachePolicy, FileError, Organization, Resolution, TermDisplay, organizationString} import _root_.coursier.core.{Classifier, Configuration, ModuleName} import _root_.coursier.ivy.IvyRepository +import coursier.extra.Typelevel import sbt.internal.librarymanagement.IvySbt import sbt.librarymanagement._ import sbt.util.Logger @@ -52,8 +53,11 @@ class CoursierDependencyResolution(conf: CoursierConfiguration) extends Dependen sys.error(s"unrecognized ModuleDescriptor type: $module") } - val so = module0.scalaModuleInfo.fold(org"org.scala-lang")(m => Organization(m.scalaOrganization)) - val sv = module0.scalaModuleInfo.map(_.scalaFullVersion) + val so = conf.scalaOrganization.map(Organization(_)) + .orElse(module0.scalaModuleInfo.map(m => Organization(m.scalaOrganization))) + .getOrElse(org"org.scala-lang") + val sv = conf.scalaVersion + .orElse(module0.scalaModuleInfo.map(_.scalaFullVersion)) // FIXME Manage to do stuff below without a scala version? .getOrElse(scala.util.Properties.versionNumberString) @@ -122,6 +126,8 @@ class CoursierDependencyResolution(conf: CoursierConfiguration) extends Dependen Inputs.configExtends(module0.configurations) ) + val typelevel = so == Typelevel.typelevelOrg + val resolutionParams = ResolutionParams( dependencies = dependencies, fallbackDependencies = conf.fallbackDependencies, @@ -133,7 +139,7 @@ class CoursierDependencyResolution(conf: CoursierConfiguration) extends Dependen internalRepositories = internalRepositories, userEnabledProfiles = conf.mavenProfiles.toSet, userForceVersions = Map.empty, - typelevel = false, + typelevel = typelevel, so = so, sv = sv, sbtClassifiers = false, diff --git a/modules/sbt-coursier/src/sbt-test/sbt-coursier-group-2/typelevel-with-dependencies/build.sbt b/modules/sbt-coursier/src/sbt-test/shared-2/typelevel-with-dependencies/build.sbt similarity index 100% rename from modules/sbt-coursier/src/sbt-test/sbt-coursier-group-2/typelevel-with-dependencies/build.sbt rename to modules/sbt-coursier/src/sbt-test/shared-2/typelevel-with-dependencies/build.sbt diff --git a/modules/sbt-coursier/src/sbt-test/sbt-coursier-group-2/typelevel-with-dependencies/project/plugins.sbt b/modules/sbt-coursier/src/sbt-test/shared-2/typelevel-with-dependencies/project/plugins.sbt similarity index 100% rename from modules/sbt-coursier/src/sbt-test/sbt-coursier-group-2/typelevel-with-dependencies/project/plugins.sbt rename to modules/sbt-coursier/src/sbt-test/shared-2/typelevel-with-dependencies/project/plugins.sbt diff --git a/modules/sbt-coursier/src/sbt-test/sbt-coursier-group-2/typelevel-with-dependencies/src/main/scala/Foo.scala b/modules/sbt-coursier/src/sbt-test/shared-2/typelevel-with-dependencies/src/main/scala/Foo.scala similarity index 100% rename from modules/sbt-coursier/src/sbt-test/sbt-coursier-group-2/typelevel-with-dependencies/src/main/scala/Foo.scala rename to modules/sbt-coursier/src/sbt-test/shared-2/typelevel-with-dependencies/src/main/scala/Foo.scala diff --git a/modules/sbt-coursier/src/sbt-test/sbt-coursier-group-2/typelevel-with-dependencies/test b/modules/sbt-coursier/src/sbt-test/shared-2/typelevel-with-dependencies/test similarity index 100% rename from modules/sbt-coursier/src/sbt-test/sbt-coursier-group-2/typelevel-with-dependencies/test rename to modules/sbt-coursier/src/sbt-test/shared-2/typelevel-with-dependencies/test diff --git a/modules/sbt-lm-coursier/src/main/scala/coursier/sbtlmcoursier/LmCoursierPlugin.scala b/modules/sbt-lm-coursier/src/main/scala/coursier/sbtlmcoursier/LmCoursierPlugin.scala index 8e4884666..f84e2c3d6 100644 --- a/modules/sbt-lm-coursier/src/main/scala/coursier/sbtlmcoursier/LmCoursierPlugin.scala +++ b/modules/sbt-lm-coursier/src/main/scala/coursier/sbtlmcoursier/LmCoursierPlugin.scala @@ -6,7 +6,7 @@ import coursier.sbtcoursiershared.SbtCoursierShared import sbt.{AutoPlugin, Classpaths, Def, Setting, Task, taskKey} import sbt.Project.inTask import sbt.KeyRanks.DTask -import sbt.Keys.{appConfiguration, autoScalaLibrary, dependencyResolution, excludeDependencies, scalaBinaryVersion, scalaVersion, streams, updateClassifiers, updateSbtClassifiers} +import sbt.Keys.{appConfiguration, autoScalaLibrary, dependencyResolution, excludeDependencies, scalaBinaryVersion, scalaOrganization, scalaVersion, streams, updateClassifiers, updateSbtClassifiers} import sbt.librarymanagement.DependencyResolution object LmCoursierPlugin extends AutoPlugin { @@ -63,10 +63,12 @@ object LmCoursierPlugin extends AutoPlugin { Def.task(None) Def.task { val rs = resolversTask.value + val scalaOrg = scalaOrganization.value + val scalaVer = scalaVersion.value val interProjectDependencies = coursierInterProjectDependencies.value val excludeDeps = Inputs.exclusions( excludeDependencies.value, - scalaVersion.value, + scalaVer, scalaBinaryVersion.value, streams.value.log ) @@ -101,6 +103,8 @@ object LmCoursierPlugin extends AutoPlugin { .withClassifiers(classifiers.toVector.flatten.map(_.value)) .withHasClassifiers(classifiers.nonEmpty) .withMavenProfiles(profiles.toVector.sorted) + .withScalaOrganization(scalaOrg) + .withScalaVersion(scalaVer) .withLog(s.log) } } From 40489f7fee8709b2dee5f0ef1b44c98cf93e4ac5 Mon Sep 17 00:00:00 2001 From: Alexandre Archambault Date: Thu, 22 Nov 2018 13:52:59 +0100 Subject: [PATCH 3/5] Add credentials support to sbt-lm-coursier --- .../lmcoursier/CoursierConfiguration.scala | 26 ++++--- .../src/main/contraband/lm-coursier.json | 12 ++++ .../CoursierDependencyResolution.scala | 8 ++- .../scala/coursier/lmcoursier/Inputs.scala | 39 ++++++++++- .../src/main/scala/coursier/Credentials.scala | 0 .../sbtcoursiershared/InputsTasks.scala | 28 ++++++++ .../sbtcoursiershared/SbtCoursierShared.scala | 8 ++- .../coursier/sbtcoursier/CoursierPlugin.scala | 4 -- .../scala/coursier/sbtcoursier/Keys.scala | 3 - .../sbtcoursier/ResolutionTasks.scala | 70 +------------------ .../credentials-from-file/test | 1 - .../sbt-coursier-group-1/credentials-sbt/test | 1 - .../sbt-coursier-group-1/credentials/test | 1 - .../credentials-from-file/build.sbt | 0 .../credentials-from-file/credentials | 0 .../credentials-from-file/project/plugins.sbt | 0 .../src/main/scala/Main.scala | 0 .../shared-1/credentials-from-file/test | 1 + .../credentials-sbt/build.sbt | 0 .../credentials-sbt/project/plugins.sbt | 0 .../credentials-sbt/src/main/scala/Main.scala | 0 .../sbt-test/shared-1/credentials-sbt/test | 1 + .../credentials/build.sbt | 0 .../credentials/project/plugins.sbt | 0 .../credentials/src/main/scala/Main.scala | 0 .../src/sbt-test/shared-1/credentials/test | 1 + .../sbtlmcoursier/LmCoursierPlugin.scala | 6 ++ 27 files changed, 120 insertions(+), 90 deletions(-) rename modules/{sbt-coursier => sbt-coursier-shared}/src/main/scala/coursier/Credentials.scala (100%) delete mode 100644 modules/sbt-coursier/src/sbt-test/sbt-coursier-group-1/credentials-from-file/test delete mode 100644 modules/sbt-coursier/src/sbt-test/sbt-coursier-group-1/credentials-sbt/test delete mode 100644 modules/sbt-coursier/src/sbt-test/sbt-coursier-group-1/credentials/test rename modules/sbt-coursier/src/sbt-test/{sbt-coursier-group-1 => shared-1}/credentials-from-file/build.sbt (100%) rename modules/sbt-coursier/src/sbt-test/{sbt-coursier-group-1 => shared-1}/credentials-from-file/credentials (100%) rename modules/sbt-coursier/src/sbt-test/{sbt-coursier-group-1 => shared-1}/credentials-from-file/project/plugins.sbt (100%) rename modules/sbt-coursier/src/sbt-test/{sbt-coursier-group-1 => shared-1}/credentials-from-file/src/main/scala/Main.scala (100%) create mode 100644 modules/sbt-coursier/src/sbt-test/shared-1/credentials-from-file/test rename modules/sbt-coursier/src/sbt-test/{sbt-coursier-group-1 => shared-1}/credentials-sbt/build.sbt (100%) rename modules/sbt-coursier/src/sbt-test/{sbt-coursier-group-1 => shared-1}/credentials-sbt/project/plugins.sbt (100%) rename modules/sbt-coursier/src/sbt-test/{sbt-coursier-group-1 => shared-1}/credentials-sbt/src/main/scala/Main.scala (100%) create mode 100644 modules/sbt-coursier/src/sbt-test/shared-1/credentials-sbt/test rename modules/sbt-coursier/src/sbt-test/{sbt-coursier-group-1 => shared-1}/credentials/build.sbt (100%) rename modules/sbt-coursier/src/sbt-test/{sbt-coursier-group-1 => shared-1}/credentials/project/plugins.sbt (100%) rename modules/sbt-coursier/src/sbt-test/{sbt-coursier-group-1 => shared-1}/credentials/src/main/scala/Main.scala (100%) create mode 100644 modules/sbt-coursier/src/sbt-test/shared-1/credentials/test diff --git a/modules/lm-coursier/src/main/contraband-scala/coursier/lmcoursier/CoursierConfiguration.scala b/modules/lm-coursier/src/main/contraband-scala/coursier/lmcoursier/CoursierConfiguration.scala index 74023547e..89eedad12 100644 --- a/modules/lm-coursier/src/main/contraband-scala/coursier/lmcoursier/CoursierConfiguration.scala +++ b/modules/lm-coursier/src/main/contraband-scala/coursier/lmcoursier/CoursierConfiguration.scala @@ -21,22 +21,24 @@ final class CoursierConfiguration private ( val classifiers: Vector[String], val mavenProfiles: Vector[String], val scalaOrganization: Option[String], - val scalaVersion: Option[String]) extends Serializable { + val scalaVersion: Option[String], + val authenticationByRepositoryId: Vector[(String, coursier.core.Authentication)], + val authenticationByHost: Vector[(String, coursier.core.Authentication)]) extends Serializable { - private def this() = this(None, sbt.librarymanagement.Resolver.defaults, true, 6, 100, None, None, Vector.empty, Vector.empty, Vector.empty, Vector.empty, true, false, Vector.empty, Vector.empty, None, None) + private def this() = this(None, sbt.librarymanagement.Resolver.defaults, true, 6, 100, None, None, Vector.empty, Vector.empty, Vector.empty, Vector.empty, true, false, Vector.empty, Vector.empty, None, None, Vector.empty, Vector.empty) override def equals(o: Any): Boolean = o match { - case x: CoursierConfiguration => (this.log == x.log) && (this.resolvers == x.resolvers) && (this.reorderResolvers == x.reorderResolvers) && (this.parallelDownloads == x.parallelDownloads) && (this.maxIterations == x.maxIterations) && (this.sbtScalaOrganization == x.sbtScalaOrganization) && (this.sbtScalaVersion == x.sbtScalaVersion) && (this.sbtScalaJars == x.sbtScalaJars) && (this.interProjectDependencies == x.interProjectDependencies) && (this.excludeDependencies == x.excludeDependencies) && (this.fallbackDependencies == x.fallbackDependencies) && (this.autoScalaLibrary == x.autoScalaLibrary) && (this.hasClassifiers == x.hasClassifiers) && (this.classifiers == x.classifiers) && (this.mavenProfiles == x.mavenProfiles) && (this.scalaOrganization == x.scalaOrganization) && (this.scalaVersion == x.scalaVersion) + case x: CoursierConfiguration => (this.log == x.log) && (this.resolvers == x.resolvers) && (this.reorderResolvers == x.reorderResolvers) && (this.parallelDownloads == x.parallelDownloads) && (this.maxIterations == x.maxIterations) && (this.sbtScalaOrganization == x.sbtScalaOrganization) && (this.sbtScalaVersion == x.sbtScalaVersion) && (this.sbtScalaJars == x.sbtScalaJars) && (this.interProjectDependencies == x.interProjectDependencies) && (this.excludeDependencies == x.excludeDependencies) && (this.fallbackDependencies == x.fallbackDependencies) && (this.autoScalaLibrary == x.autoScalaLibrary) && (this.hasClassifiers == x.hasClassifiers) && (this.classifiers == x.classifiers) && (this.mavenProfiles == x.mavenProfiles) && (this.scalaOrganization == x.scalaOrganization) && (this.scalaVersion == x.scalaVersion) && (this.authenticationByRepositoryId == x.authenticationByRepositoryId) && (this.authenticationByHost == x.authenticationByHost) case _ => false } override def hashCode: Int = { - 37 * (37 * (37 * (37 * (37 * (37 * (37 * (37 * (37 * (37 * (37 * (37 * (37 * (37 * (37 * (37 * (37 * (37 * (17 + "coursier.lmcoursier.CoursierConfiguration".##) + log.##) + resolvers.##) + reorderResolvers.##) + parallelDownloads.##) + maxIterations.##) + sbtScalaOrganization.##) + sbtScalaVersion.##) + sbtScalaJars.##) + interProjectDependencies.##) + excludeDependencies.##) + fallbackDependencies.##) + autoScalaLibrary.##) + hasClassifiers.##) + classifiers.##) + mavenProfiles.##) + scalaOrganization.##) + scalaVersion.##) + 37 * (37 * (37 * (37 * (37 * (37 * (37 * (37 * (37 * (37 * (37 * (37 * (37 * (37 * (37 * (37 * (37 * (37 * (37 * (37 * (17 + "coursier.lmcoursier.CoursierConfiguration".##) + log.##) + resolvers.##) + reorderResolvers.##) + parallelDownloads.##) + maxIterations.##) + sbtScalaOrganization.##) + sbtScalaVersion.##) + sbtScalaJars.##) + interProjectDependencies.##) + excludeDependencies.##) + fallbackDependencies.##) + autoScalaLibrary.##) + hasClassifiers.##) + classifiers.##) + mavenProfiles.##) + scalaOrganization.##) + scalaVersion.##) + authenticationByRepositoryId.##) + authenticationByHost.##) } override def toString: String = { - "CoursierConfiguration(" + log + ", " + resolvers + ", " + reorderResolvers + ", " + parallelDownloads + ", " + maxIterations + ", " + sbtScalaOrganization + ", " + sbtScalaVersion + ", " + sbtScalaJars + ", " + interProjectDependencies + ", " + excludeDependencies + ", " + fallbackDependencies + ", " + autoScalaLibrary + ", " + hasClassifiers + ", " + classifiers + ", " + mavenProfiles + ", " + scalaOrganization + ", " + scalaVersion + ")" + "CoursierConfiguration(" + log + ", " + resolvers + ", " + reorderResolvers + ", " + parallelDownloads + ", " + maxIterations + ", " + sbtScalaOrganization + ", " + sbtScalaVersion + ", " + sbtScalaJars + ", " + interProjectDependencies + ", " + excludeDependencies + ", " + fallbackDependencies + ", " + autoScalaLibrary + ", " + hasClassifiers + ", " + classifiers + ", " + mavenProfiles + ", " + scalaOrganization + ", " + scalaVersion + ", " + authenticationByRepositoryId + ", " + authenticationByHost + ")" } - private[this] def copy(log: Option[xsbti.Logger] = log, resolvers: Vector[sbt.librarymanagement.Resolver] = resolvers, reorderResolvers: Boolean = reorderResolvers, parallelDownloads: Int = parallelDownloads, maxIterations: Int = maxIterations, sbtScalaOrganization: Option[String] = sbtScalaOrganization, sbtScalaVersion: Option[String] = sbtScalaVersion, sbtScalaJars: Vector[java.io.File] = sbtScalaJars, interProjectDependencies: Vector[coursier.core.Project] = interProjectDependencies, excludeDependencies: Vector[(String, String)] = excludeDependencies, fallbackDependencies: Vector[coursier.lmcoursier.FallbackDependency] = fallbackDependencies, autoScalaLibrary: Boolean = autoScalaLibrary, hasClassifiers: Boolean = hasClassifiers, classifiers: Vector[String] = classifiers, mavenProfiles: Vector[String] = mavenProfiles, scalaOrganization: Option[String] = scalaOrganization, scalaVersion: Option[String] = scalaVersion): CoursierConfiguration = { - new CoursierConfiguration(log, resolvers, reorderResolvers, parallelDownloads, maxIterations, sbtScalaOrganization, sbtScalaVersion, sbtScalaJars, interProjectDependencies, excludeDependencies, fallbackDependencies, autoScalaLibrary, hasClassifiers, classifiers, mavenProfiles, scalaOrganization, scalaVersion) + private[this] def copy(log: Option[xsbti.Logger] = log, resolvers: Vector[sbt.librarymanagement.Resolver] = resolvers, reorderResolvers: Boolean = reorderResolvers, parallelDownloads: Int = parallelDownloads, maxIterations: Int = maxIterations, sbtScalaOrganization: Option[String] = sbtScalaOrganization, sbtScalaVersion: Option[String] = sbtScalaVersion, sbtScalaJars: Vector[java.io.File] = sbtScalaJars, interProjectDependencies: Vector[coursier.core.Project] = interProjectDependencies, excludeDependencies: Vector[(String, String)] = excludeDependencies, fallbackDependencies: Vector[coursier.lmcoursier.FallbackDependency] = fallbackDependencies, autoScalaLibrary: Boolean = autoScalaLibrary, hasClassifiers: Boolean = hasClassifiers, classifiers: Vector[String] = classifiers, mavenProfiles: Vector[String] = mavenProfiles, scalaOrganization: Option[String] = scalaOrganization, scalaVersion: Option[String] = scalaVersion, authenticationByRepositoryId: Vector[(String, coursier.core.Authentication)] = authenticationByRepositoryId, authenticationByHost: Vector[(String, coursier.core.Authentication)] = authenticationByHost): CoursierConfiguration = { + new CoursierConfiguration(log, resolvers, reorderResolvers, parallelDownloads, maxIterations, sbtScalaOrganization, sbtScalaVersion, sbtScalaJars, interProjectDependencies, excludeDependencies, fallbackDependencies, autoScalaLibrary, hasClassifiers, classifiers, mavenProfiles, scalaOrganization, scalaVersion, authenticationByRepositoryId, authenticationByHost) } def withLog(log: Option[xsbti.Logger]): CoursierConfiguration = { copy(log = log) @@ -104,10 +106,16 @@ final class CoursierConfiguration private ( def withScalaVersion(scalaVersion: String): CoursierConfiguration = { copy(scalaVersion = Option(scalaVersion)) } + def withAuthenticationByRepositoryId(authenticationByRepositoryId: Vector[(String, coursier.core.Authentication)]): CoursierConfiguration = { + copy(authenticationByRepositoryId = authenticationByRepositoryId) + } + def withAuthenticationByHost(authenticationByHost: Vector[(String, coursier.core.Authentication)]): CoursierConfiguration = { + copy(authenticationByHost = authenticationByHost) + } } object CoursierConfiguration { def apply(): CoursierConfiguration = new CoursierConfiguration() - def apply(log: Option[xsbti.Logger], resolvers: Vector[sbt.librarymanagement.Resolver], reorderResolvers: Boolean, parallelDownloads: Int, maxIterations: Int, sbtScalaOrganization: Option[String], sbtScalaVersion: Option[String], sbtScalaJars: Vector[java.io.File], interProjectDependencies: Vector[coursier.core.Project], excludeDependencies: Vector[(String, String)], fallbackDependencies: Vector[coursier.lmcoursier.FallbackDependency], autoScalaLibrary: Boolean, hasClassifiers: Boolean, classifiers: Vector[String], mavenProfiles: Vector[String], scalaOrganization: Option[String], scalaVersion: Option[String]): CoursierConfiguration = new CoursierConfiguration(log, resolvers, reorderResolvers, parallelDownloads, maxIterations, sbtScalaOrganization, sbtScalaVersion, sbtScalaJars, interProjectDependencies, excludeDependencies, fallbackDependencies, autoScalaLibrary, hasClassifiers, classifiers, mavenProfiles, scalaOrganization, scalaVersion) - def apply(log: xsbti.Logger, resolvers: Vector[sbt.librarymanagement.Resolver], reorderResolvers: Boolean, parallelDownloads: Int, maxIterations: Int, sbtScalaOrganization: String, sbtScalaVersion: String, sbtScalaJars: Vector[java.io.File], interProjectDependencies: Vector[coursier.core.Project], excludeDependencies: Vector[(String, String)], fallbackDependencies: Vector[coursier.lmcoursier.FallbackDependency], autoScalaLibrary: Boolean, hasClassifiers: Boolean, classifiers: Vector[String], mavenProfiles: Vector[String], scalaOrganization: String, scalaVersion: String): CoursierConfiguration = new CoursierConfiguration(Option(log), resolvers, reorderResolvers, parallelDownloads, maxIterations, Option(sbtScalaOrganization), Option(sbtScalaVersion), sbtScalaJars, interProjectDependencies, excludeDependencies, fallbackDependencies, autoScalaLibrary, hasClassifiers, classifiers, mavenProfiles, Option(scalaOrganization), Option(scalaVersion)) + def apply(log: Option[xsbti.Logger], resolvers: Vector[sbt.librarymanagement.Resolver], reorderResolvers: Boolean, parallelDownloads: Int, maxIterations: Int, sbtScalaOrganization: Option[String], sbtScalaVersion: Option[String], sbtScalaJars: Vector[java.io.File], interProjectDependencies: Vector[coursier.core.Project], excludeDependencies: Vector[(String, String)], fallbackDependencies: Vector[coursier.lmcoursier.FallbackDependency], autoScalaLibrary: Boolean, hasClassifiers: Boolean, classifiers: Vector[String], mavenProfiles: Vector[String], scalaOrganization: Option[String], scalaVersion: Option[String], authenticationByRepositoryId: Vector[(String, coursier.core.Authentication)], authenticationByHost: Vector[(String, coursier.core.Authentication)]): CoursierConfiguration = new CoursierConfiguration(log, resolvers, reorderResolvers, parallelDownloads, maxIterations, sbtScalaOrganization, sbtScalaVersion, sbtScalaJars, interProjectDependencies, excludeDependencies, fallbackDependencies, autoScalaLibrary, hasClassifiers, classifiers, mavenProfiles, scalaOrganization, scalaVersion, authenticationByRepositoryId, authenticationByHost) + def apply(log: xsbti.Logger, resolvers: Vector[sbt.librarymanagement.Resolver], reorderResolvers: Boolean, parallelDownloads: Int, maxIterations: Int, sbtScalaOrganization: String, sbtScalaVersion: String, sbtScalaJars: Vector[java.io.File], interProjectDependencies: Vector[coursier.core.Project], excludeDependencies: Vector[(String, String)], fallbackDependencies: Vector[coursier.lmcoursier.FallbackDependency], autoScalaLibrary: Boolean, hasClassifiers: Boolean, classifiers: Vector[String], mavenProfiles: Vector[String], scalaOrganization: String, scalaVersion: String, authenticationByRepositoryId: Vector[(String, coursier.core.Authentication)], authenticationByHost: Vector[(String, coursier.core.Authentication)]): CoursierConfiguration = new CoursierConfiguration(Option(log), resolvers, reorderResolvers, parallelDownloads, maxIterations, Option(sbtScalaOrganization), Option(sbtScalaVersion), sbtScalaJars, interProjectDependencies, excludeDependencies, fallbackDependencies, autoScalaLibrary, hasClassifiers, classifiers, mavenProfiles, Option(scalaOrganization), Option(scalaVersion), authenticationByRepositoryId, authenticationByHost) } diff --git a/modules/lm-coursier/src/main/contraband/lm-coursier.json b/modules/lm-coursier/src/main/contraband/lm-coursier.json index ff779b349..7f474574c 100644 --- a/modules/lm-coursier/src/main/contraband/lm-coursier.json +++ b/modules/lm-coursier/src/main/contraband/lm-coursier.json @@ -108,6 +108,18 @@ "type": "String?", "default": "None", "since": "0.0.1" + }, + { + "name": "authenticationByRepositoryId", + "type": "(String, coursier.core.Authentication)*", + "default": "Vector.empty", + "since": "0.0.1" + }, + { + "name": "authenticationByHost", + "type": "(String, coursier.core.Authentication)*", + "default": "Vector.empty", + "since": "0.0.1" } ] } diff --git a/modules/lm-coursier/src/main/scala/coursier/lmcoursier/CoursierDependencyResolution.scala b/modules/lm-coursier/src/main/scala/coursier/lmcoursier/CoursierDependencyResolution.scala index ca1e98ee0..3729d02e8 100644 --- a/modules/lm-coursier/src/main/scala/coursier/lmcoursier/CoursierDependencyResolution.scala +++ b/modules/lm-coursier/src/main/scala/coursier/lmcoursier/CoursierDependencyResolution.scala @@ -4,8 +4,9 @@ import java.io.{File, OutputStreamWriter} import _root_.coursier.{Artifact, Cache, CachePolicy, FileError, Organization, Resolution, TermDisplay, organizationString} import _root_.coursier.core.{Classifier, Configuration, ModuleName} +import _root_.coursier.extra.Typelevel import _root_.coursier.ivy.IvyRepository -import coursier.extra.Typelevel +import _root_.coursier.lmcoursier.Inputs.withAuthenticationByHost import sbt.internal.librarymanagement.IvySbt import sbt.librarymanagement._ import sbt.util.Logger @@ -84,15 +85,18 @@ class CoursierDependencyResolution(conf: CoursierConfiguration) extends Dependen else None + val authenticationByRepositoryId = conf.authenticationByRepositoryId.toMap + val mainRepositories = resolvers .flatMap { resolver => FromSbt.repository( resolver, ivyProperties, log, - None // FIXME What about authentication? + authenticationByRepositoryId.get(resolver.name) ) } + .map(withAuthenticationByHost(_, conf.authenticationByHost.toMap)) val globalPluginsRepos = for (p <- ResolutionParams.globalPluginPatterns(sbtBinaryVersion)) diff --git a/modules/lm-coursier/src/main/scala/coursier/lmcoursier/Inputs.scala b/modules/lm-coursier/src/main/scala/coursier/lmcoursier/Inputs.scala index 999339366..73866c878 100644 --- a/modules/lm-coursier/src/main/scala/coursier/lmcoursier/Inputs.scala +++ b/modules/lm-coursier/src/main/scala/coursier/lmcoursier/Inputs.scala @@ -1,10 +1,14 @@ package coursier.lmcoursier -import coursier.core.{Configuration, ModuleName, Organization, Project} +import coursier.Cache +import coursier.core._ +import coursier.ivy.IvyRepository +import coursier.maven.MavenRepository import sbt.librarymanagement.{InclExclRule, ModuleID} import sbt.util.Logger import scala.collection.mutable +import scala.util.Try object Inputs { @@ -146,4 +150,37 @@ object Inputs { ) } + def withAuthenticationByHost(repo: Repository, credentials: Map[String, Authentication]): Repository = { + + def httpHost(s: String) = + if (s.startsWith("http://") || s.startsWith("https://")) + Try(Cache.url(s).getHost).toOption + else + None + + repo match { + case m: MavenRepository => + if (m.authentication.isEmpty) + httpHost(m.root).flatMap(credentials.get).fold(m) { auth => + m.copy(authentication = Some(auth)) + } + else + m + case i: IvyRepository => + if (i.authentication.isEmpty) { + val base = i.pattern.chunks.takeWhile { + case _: coursier.ivy.Pattern.Chunk.Const => true + case _ => false + }.map(_.string).mkString + + httpHost(base).flatMap(credentials.get).fold(i) { auth => + i.copy(authentication = Some(auth)) + } + } else + i + case _ => + repo + } + } + } diff --git a/modules/sbt-coursier/src/main/scala/coursier/Credentials.scala b/modules/sbt-coursier-shared/src/main/scala/coursier/Credentials.scala similarity index 100% rename from modules/sbt-coursier/src/main/scala/coursier/Credentials.scala rename to modules/sbt-coursier-shared/src/main/scala/coursier/Credentials.scala diff --git a/modules/sbt-coursier-shared/src/main/scala/coursier/sbtcoursiershared/InputsTasks.scala b/modules/sbt-coursier-shared/src/main/scala/coursier/sbtcoursiershared/InputsTasks.scala index 339f18c2c..7ec1c37d5 100644 --- a/modules/sbt-coursier-shared/src/main/scala/coursier/sbtcoursiershared/InputsTasks.scala +++ b/modules/sbt-coursier-shared/src/main/scala/coursier/sbtcoursiershared/InputsTasks.scala @@ -67,4 +67,32 @@ object InputsTasks { } } + val authenticationByHostTask = Def.taskDyn { + + val useSbtCredentials = coursierUseSbtCredentials.value + + if (useSbtCredentials) + Def.task { + val log = streams.value.log + + sbt.Keys.credentials.value + .flatMap { + case dc: sbt.DirectCredentials => List(dc) + case fc: sbt.FileCredentials => + sbt.Credentials.loadCredentials(fc.path) match { + case Left(err) => + log.warn(s"$err, ignoring it") + Nil + case Right(dc) => List(dc) + } + } + .map { c => + c.host -> Authentication(c.userName, c.passwd) + } + .toMap + } + else + Def.task(Map.empty[String, Authentication]) + } + } diff --git a/modules/sbt-coursier-shared/src/main/scala/coursier/sbtcoursiershared/SbtCoursierShared.scala b/modules/sbt-coursier-shared/src/main/scala/coursier/sbtcoursiershared/SbtCoursierShared.scala index 981ac0e9f..ca24113a9 100644 --- a/modules/sbt-coursier-shared/src/main/scala/coursier/sbtcoursiershared/SbtCoursierShared.scala +++ b/modules/sbt-coursier-shared/src/main/scala/coursier/sbtcoursiershared/SbtCoursierShared.scala @@ -1,5 +1,6 @@ package coursier.sbtcoursiershared +import coursier.Credentials import coursier.core.{Configuration, Project, Publication} import coursier.lmcoursier.{FallbackDependency, SbtCoursierCache} import sbt.{AutoPlugin, Classpaths, Compile, Setting, TaskKey, Test, settingKey, taskKey} @@ -29,6 +30,9 @@ object SbtCoursierShared extends AutoPlugin { val coursierFallbackDependencies = taskKey[Seq[FallbackDependency]]("") val mavenProfiles = settingKey[Set[String]]("") + + val coursierUseSbtCredentials = settingKey[Boolean]("") + val coursierCredentials = taskKey[Map[String, Credentials]]("") } import autoImport._ @@ -39,7 +43,9 @@ object SbtCoursierShared extends AutoPlugin { override def buildSettings: Seq[Setting[_]] = Seq( coursierReorderResolvers := true, - coursierKeepPreloaded := false + coursierKeepPreloaded := false, + coursierUseSbtCredentials := true, + coursierCredentials := Map.empty ) private val pluginIvySnapshotsBase = Resolver.SbtRepositoryRoot.stripSuffix("/") + "/ivy-snapshots" diff --git a/modules/sbt-coursier/src/main/scala/coursier/sbtcoursier/CoursierPlugin.scala b/modules/sbt-coursier/src/main/scala/coursier/sbtcoursier/CoursierPlugin.scala index f57d9ad44..077c122cc 100644 --- a/modules/sbt-coursier/src/main/scala/coursier/sbtcoursier/CoursierPlugin.scala +++ b/modules/sbt-coursier/src/main/scala/coursier/sbtcoursier/CoursierPlugin.scala @@ -22,8 +22,6 @@ object CoursierPlugin extends AutoPlugin { val coursierCachePolicies = Keys.coursierCachePolicies val coursierTtl = Keys.coursierTtl val coursierVerbosity = Keys.coursierVerbosity - val coursierUseSbtCredentials = Keys.coursierUseSbtCredentials - val coursierCredentials = Keys.coursierCredentials val coursierCache = Keys.coursierCache val coursierConfigGraphs = Keys.coursierConfigGraphs val coursierSbtClassifiersModule = Keys.coursierSbtClassifiersModule @@ -194,8 +192,6 @@ object CoursierPlugin extends AutoPlugin { coursierCachePolicies := CachePolicy.default, coursierTtl := Cache.defaultTtl, coursierVerbosity := Settings.defaultVerbosityLevel(sLog.value), - coursierUseSbtCredentials := true, - coursierCredentials := Map.empty, coursierCache := Cache.default, coursierCreateLogger := { () => new TermDisplay(new OutputStreamWriter(System.err)) } ) diff --git a/modules/sbt-coursier/src/main/scala/coursier/sbtcoursier/Keys.scala b/modules/sbt-coursier/src/main/scala/coursier/sbtcoursier/Keys.scala index 1405bc429..71c73a11a 100644 --- a/modules/sbt-coursier/src/main/scala/coursier/sbtcoursier/Keys.scala +++ b/modules/sbt-coursier/src/main/scala/coursier/sbtcoursier/Keys.scala @@ -21,9 +21,6 @@ object Keys { val coursierVerbosity = SettingKey[Int]("coursier-verbosity") - val coursierUseSbtCredentials = SettingKey[Boolean]("coursier-use-sbt-credentials") - val coursierCredentials = TaskKey[Map[String, Credentials]]("coursier-credentials") - val coursierCache = SettingKey[File]("coursier-cache") val coursierConfigGraphs = TaskKey[Seq[Set[Configuration]]]("coursier-config-graphs") diff --git a/modules/sbt-coursier/src/main/scala/coursier/sbtcoursier/ResolutionTasks.scala b/modules/sbt-coursier/src/main/scala/coursier/sbtcoursier/ResolutionTasks.scala index 3588d2ae0..c48028490 100644 --- a/modules/sbt-coursier/src/main/scala/coursier/sbtcoursier/ResolutionTasks.scala +++ b/modules/sbt-coursier/src/main/scala/coursier/sbtcoursier/ResolutionTasks.scala @@ -1,20 +1,17 @@ package coursier.sbtcoursier -import java.net.URL - -import coursier.{Cache, ProjectCache} +import coursier.ProjectCache import coursier.core._ import coursier.extra.Typelevel import coursier.ivy.IvyRepository import coursier.lmcoursier._ -import coursier.maven.MavenRepository +import coursier.lmcoursier.Inputs.withAuthenticationByHost import coursier.sbtcoursier.Keys._ +import coursier.sbtcoursiershared.InputsTasks.authenticationByHostTask import coursier.sbtcoursiershared.SbtCoursierShared.autoImport._ import sbt.Def import sbt.Keys._ -import scala.util.Try - object ResolutionTasks { def resolutionsTask( @@ -49,34 +46,6 @@ object ResolutionTasks { else Def.task(coursierRecursiveResolvers.value.distinct) - val authenticationByHostTask = Def.taskDyn { - - val useSbtCredentials = coursierUseSbtCredentials.value - - if (useSbtCredentials) - Def.task { - val log = streams.value.log - - sbt.Keys.credentials.value - .flatMap { - case dc: sbt.DirectCredentials => List(dc) - case fc: sbt.FileCredentials => - sbt.Credentials.loadCredentials(fc.path) match { - case Left(err) => - log.warn(s"$err, ignoring it") - Nil - case Right(dc) => List(dc) - } - } - .map { c => - c.host -> Authentication(c.userName, c.passwd) - } - .toMap - } - else - Def.task(Map.empty[String, Authentication]) - } - Def.task { val projectName = thisProjectRef.value.project @@ -141,39 +110,6 @@ object ResolutionTasks { .map(_.foldLeft[ProjectCache](Map.empty)(_ ++ _)) .getOrElse(Map.empty) - def withAuthenticationByHost(repo: Repository, credentials: Map[String, Authentication]): Repository = { - - def httpHost(s: String) = - if (s.startsWith("http://") || s.startsWith("https://")) - Try(Cache.url(s).getHost).toOption - else - None - - repo match { - case m: MavenRepository => - if (m.authentication.isEmpty) - httpHost(m.root).flatMap(credentials.get).fold(m) { auth => - m.copy(authentication = Some(auth)) - } - else - m - case i: IvyRepository => - if (i.authentication.isEmpty) { - val base = i.pattern.chunks.takeWhile { - case _: coursier.ivy.Pattern.Chunk.Const => true - case _ => false - }.map(_.string).mkString - - httpHost(base).flatMap(credentials.get).fold(i) { auth => - i.copy(authentication = Some(auth)) - } - } else - i - case _ => - repo - } - } - val mainRepositories = resolvers .flatMap { resolver => FromSbt.repository( diff --git a/modules/sbt-coursier/src/sbt-test/sbt-coursier-group-1/credentials-from-file/test b/modules/sbt-coursier/src/sbt-test/sbt-coursier-group-1/credentials-from-file/test deleted file mode 100644 index da2a69bf7..000000000 --- a/modules/sbt-coursier/src/sbt-test/sbt-coursier-group-1/credentials-from-file/test +++ /dev/null @@ -1 +0,0 @@ -> coursierResolutions diff --git a/modules/sbt-coursier/src/sbt-test/sbt-coursier-group-1/credentials-sbt/test b/modules/sbt-coursier/src/sbt-test/sbt-coursier-group-1/credentials-sbt/test deleted file mode 100644 index da2a69bf7..000000000 --- a/modules/sbt-coursier/src/sbt-test/sbt-coursier-group-1/credentials-sbt/test +++ /dev/null @@ -1 +0,0 @@ -> coursierResolutions diff --git a/modules/sbt-coursier/src/sbt-test/sbt-coursier-group-1/credentials/test b/modules/sbt-coursier/src/sbt-test/sbt-coursier-group-1/credentials/test deleted file mode 100644 index da2a69bf7..000000000 --- a/modules/sbt-coursier/src/sbt-test/sbt-coursier-group-1/credentials/test +++ /dev/null @@ -1 +0,0 @@ -> coursierResolutions diff --git a/modules/sbt-coursier/src/sbt-test/sbt-coursier-group-1/credentials-from-file/build.sbt b/modules/sbt-coursier/src/sbt-test/shared-1/credentials-from-file/build.sbt similarity index 100% rename from modules/sbt-coursier/src/sbt-test/sbt-coursier-group-1/credentials-from-file/build.sbt rename to modules/sbt-coursier/src/sbt-test/shared-1/credentials-from-file/build.sbt diff --git a/modules/sbt-coursier/src/sbt-test/sbt-coursier-group-1/credentials-from-file/credentials b/modules/sbt-coursier/src/sbt-test/shared-1/credentials-from-file/credentials similarity index 100% rename from modules/sbt-coursier/src/sbt-test/sbt-coursier-group-1/credentials-from-file/credentials rename to modules/sbt-coursier/src/sbt-test/shared-1/credentials-from-file/credentials diff --git a/modules/sbt-coursier/src/sbt-test/sbt-coursier-group-1/credentials-from-file/project/plugins.sbt b/modules/sbt-coursier/src/sbt-test/shared-1/credentials-from-file/project/plugins.sbt similarity index 100% rename from modules/sbt-coursier/src/sbt-test/sbt-coursier-group-1/credentials-from-file/project/plugins.sbt rename to modules/sbt-coursier/src/sbt-test/shared-1/credentials-from-file/project/plugins.sbt diff --git a/modules/sbt-coursier/src/sbt-test/sbt-coursier-group-1/credentials-from-file/src/main/scala/Main.scala b/modules/sbt-coursier/src/sbt-test/shared-1/credentials-from-file/src/main/scala/Main.scala similarity index 100% rename from modules/sbt-coursier/src/sbt-test/sbt-coursier-group-1/credentials-from-file/src/main/scala/Main.scala rename to modules/sbt-coursier/src/sbt-test/shared-1/credentials-from-file/src/main/scala/Main.scala diff --git a/modules/sbt-coursier/src/sbt-test/shared-1/credentials-from-file/test b/modules/sbt-coursier/src/sbt-test/shared-1/credentials-from-file/test new file mode 100644 index 000000000..103bd8d2f --- /dev/null +++ b/modules/sbt-coursier/src/sbt-test/shared-1/credentials-from-file/test @@ -0,0 +1 @@ +> update diff --git a/modules/sbt-coursier/src/sbt-test/sbt-coursier-group-1/credentials-sbt/build.sbt b/modules/sbt-coursier/src/sbt-test/shared-1/credentials-sbt/build.sbt similarity index 100% rename from modules/sbt-coursier/src/sbt-test/sbt-coursier-group-1/credentials-sbt/build.sbt rename to modules/sbt-coursier/src/sbt-test/shared-1/credentials-sbt/build.sbt diff --git a/modules/sbt-coursier/src/sbt-test/sbt-coursier-group-1/credentials-sbt/project/plugins.sbt b/modules/sbt-coursier/src/sbt-test/shared-1/credentials-sbt/project/plugins.sbt similarity index 100% rename from modules/sbt-coursier/src/sbt-test/sbt-coursier-group-1/credentials-sbt/project/plugins.sbt rename to modules/sbt-coursier/src/sbt-test/shared-1/credentials-sbt/project/plugins.sbt diff --git a/modules/sbt-coursier/src/sbt-test/sbt-coursier-group-1/credentials-sbt/src/main/scala/Main.scala b/modules/sbt-coursier/src/sbt-test/shared-1/credentials-sbt/src/main/scala/Main.scala similarity index 100% rename from modules/sbt-coursier/src/sbt-test/sbt-coursier-group-1/credentials-sbt/src/main/scala/Main.scala rename to modules/sbt-coursier/src/sbt-test/shared-1/credentials-sbt/src/main/scala/Main.scala diff --git a/modules/sbt-coursier/src/sbt-test/shared-1/credentials-sbt/test b/modules/sbt-coursier/src/sbt-test/shared-1/credentials-sbt/test new file mode 100644 index 000000000..103bd8d2f --- /dev/null +++ b/modules/sbt-coursier/src/sbt-test/shared-1/credentials-sbt/test @@ -0,0 +1 @@ +> update diff --git a/modules/sbt-coursier/src/sbt-test/sbt-coursier-group-1/credentials/build.sbt b/modules/sbt-coursier/src/sbt-test/shared-1/credentials/build.sbt similarity index 100% rename from modules/sbt-coursier/src/sbt-test/sbt-coursier-group-1/credentials/build.sbt rename to modules/sbt-coursier/src/sbt-test/shared-1/credentials/build.sbt diff --git a/modules/sbt-coursier/src/sbt-test/sbt-coursier-group-1/credentials/project/plugins.sbt b/modules/sbt-coursier/src/sbt-test/shared-1/credentials/project/plugins.sbt similarity index 100% rename from modules/sbt-coursier/src/sbt-test/sbt-coursier-group-1/credentials/project/plugins.sbt rename to modules/sbt-coursier/src/sbt-test/shared-1/credentials/project/plugins.sbt diff --git a/modules/sbt-coursier/src/sbt-test/sbt-coursier-group-1/credentials/src/main/scala/Main.scala b/modules/sbt-coursier/src/sbt-test/shared-1/credentials/src/main/scala/Main.scala similarity index 100% rename from modules/sbt-coursier/src/sbt-test/sbt-coursier-group-1/credentials/src/main/scala/Main.scala rename to modules/sbt-coursier/src/sbt-test/shared-1/credentials/src/main/scala/Main.scala diff --git a/modules/sbt-coursier/src/sbt-test/shared-1/credentials/test b/modules/sbt-coursier/src/sbt-test/shared-1/credentials/test new file mode 100644 index 000000000..103bd8d2f --- /dev/null +++ b/modules/sbt-coursier/src/sbt-test/shared-1/credentials/test @@ -0,0 +1 @@ +> update diff --git a/modules/sbt-lm-coursier/src/main/scala/coursier/sbtlmcoursier/LmCoursierPlugin.scala b/modules/sbt-lm-coursier/src/main/scala/coursier/sbtlmcoursier/LmCoursierPlugin.scala index f84e2c3d6..4807ec0b5 100644 --- a/modules/sbt-lm-coursier/src/main/scala/coursier/sbtlmcoursier/LmCoursierPlugin.scala +++ b/modules/sbt-lm-coursier/src/main/scala/coursier/sbtlmcoursier/LmCoursierPlugin.scala @@ -2,6 +2,7 @@ package coursier.sbtlmcoursier import coursier.core.Classifier import coursier.lmcoursier.{CoursierConfiguration, CoursierDependencyResolution, Inputs} +import coursier.sbtcoursiershared.InputsTasks.authenticationByHostTask import coursier.sbtcoursiershared.SbtCoursierShared import sbt.{AutoPlugin, Classpaths, Def, Setting, Task, taskKey} import sbt.Project.inTask @@ -76,6 +77,9 @@ object LmCoursierPlugin extends AutoPlugin { val autoScalaLib = autoScalaLibrary.value val profiles = mavenProfiles.value + val authenticationByRepositoryId = coursierCredentials.value.mapValues(_.authentication) + val authenticationByHost = authenticationByHostTask.value + val internalSbtScalaProvider = appConfiguration.value.provider.scalaProvider val sbtBootJars = internalSbtScalaProvider.jars() val sbtScalaVersion = internalSbtScalaProvider.version() @@ -105,6 +109,8 @@ object LmCoursierPlugin extends AutoPlugin { .withMavenProfiles(profiles.toVector.sorted) .withScalaOrganization(scalaOrg) .withScalaVersion(scalaVer) + .withAuthenticationByRepositoryId(authenticationByRepositoryId.toVector.sortBy(_._1)) + .withAuthenticationByHost(authenticationByHost.toVector.sortBy(_._1)) .withLog(s.log) } } From 3b8e2f42cd68d10a2db71a291efe8d11cefb3b5e Mon Sep 17 00:00:00 2001 From: Alexandre Archambault Date: Thu, 22 Nov 2018 14:14:35 +0100 Subject: [PATCH 4/5] Allow to tweak logger from sbt-lm-coursier too --- .../lmcoursier/CoursierConfiguration.scala | 32 +++++++++++++------ .../src/main/contraband/lm-coursier.json | 12 +++++++ .../CoursierDependencyResolution.scala | 4 +-- .../coursier/lmcoursier/CreateLogger.scala | 3 ++ .../sbtcoursiershared/SbtCoursierShared.scala | 17 ++++++++-- .../coursier/sbtcoursier/ArtifactsTasks.scala | 3 +- .../coursier/sbtcoursier/CoursierPlugin.scala | 11 ++----- .../scala/coursier/sbtcoursier/Keys.scala | 3 -- .../sbtcoursier/ResolutionTasks.scala | 2 +- .../logger/build.sbt | 2 +- .../logger/project/plugins.sbt | 0 .../logger/test | 0 .../sbtlmcoursier/LmCoursierPlugin.scala | 6 ++++ 13 files changed, 66 insertions(+), 29 deletions(-) create mode 100644 modules/lm-coursier/src/main/scala/coursier/lmcoursier/CreateLogger.scala rename modules/sbt-coursier/src/sbt-test/{sbt-coursier-group-1 => shared-1}/logger/build.sbt (98%) rename modules/sbt-coursier/src/sbt-test/{sbt-coursier-group-1 => shared-1}/logger/project/plugins.sbt (100%) rename modules/sbt-coursier/src/sbt-test/{sbt-coursier-group-1 => shared-1}/logger/test (100%) diff --git a/modules/lm-coursier/src/main/contraband-scala/coursier/lmcoursier/CoursierConfiguration.scala b/modules/lm-coursier/src/main/contraband-scala/coursier/lmcoursier/CoursierConfiguration.scala index 89eedad12..9a1ad2d82 100644 --- a/modules/lm-coursier/src/main/contraband-scala/coursier/lmcoursier/CoursierConfiguration.scala +++ b/modules/lm-coursier/src/main/contraband-scala/coursier/lmcoursier/CoursierConfiguration.scala @@ -23,22 +23,24 @@ final class CoursierConfiguration private ( val scalaOrganization: Option[String], val scalaVersion: Option[String], val authenticationByRepositoryId: Vector[(String, coursier.core.Authentication)], - val authenticationByHost: Vector[(String, coursier.core.Authentication)]) extends Serializable { + val authenticationByHost: Vector[(String, coursier.core.Authentication)], + val createLogger: Option[coursier.lmcoursier.CreateLogger], + val cache: Option[java.io.File]) extends Serializable { - private def this() = this(None, sbt.librarymanagement.Resolver.defaults, true, 6, 100, None, None, Vector.empty, Vector.empty, Vector.empty, Vector.empty, true, false, Vector.empty, Vector.empty, None, None, Vector.empty, Vector.empty) + private def this() = this(None, sbt.librarymanagement.Resolver.defaults, true, 6, 100, None, None, Vector.empty, Vector.empty, Vector.empty, Vector.empty, true, false, Vector.empty, Vector.empty, None, None, Vector.empty, Vector.empty, None, None) override def equals(o: Any): Boolean = o match { - case x: CoursierConfiguration => (this.log == x.log) && (this.resolvers == x.resolvers) && (this.reorderResolvers == x.reorderResolvers) && (this.parallelDownloads == x.parallelDownloads) && (this.maxIterations == x.maxIterations) && (this.sbtScalaOrganization == x.sbtScalaOrganization) && (this.sbtScalaVersion == x.sbtScalaVersion) && (this.sbtScalaJars == x.sbtScalaJars) && (this.interProjectDependencies == x.interProjectDependencies) && (this.excludeDependencies == x.excludeDependencies) && (this.fallbackDependencies == x.fallbackDependencies) && (this.autoScalaLibrary == x.autoScalaLibrary) && (this.hasClassifiers == x.hasClassifiers) && (this.classifiers == x.classifiers) && (this.mavenProfiles == x.mavenProfiles) && (this.scalaOrganization == x.scalaOrganization) && (this.scalaVersion == x.scalaVersion) && (this.authenticationByRepositoryId == x.authenticationByRepositoryId) && (this.authenticationByHost == x.authenticationByHost) + case x: CoursierConfiguration => (this.log == x.log) && (this.resolvers == x.resolvers) && (this.reorderResolvers == x.reorderResolvers) && (this.parallelDownloads == x.parallelDownloads) && (this.maxIterations == x.maxIterations) && (this.sbtScalaOrganization == x.sbtScalaOrganization) && (this.sbtScalaVersion == x.sbtScalaVersion) && (this.sbtScalaJars == x.sbtScalaJars) && (this.interProjectDependencies == x.interProjectDependencies) && (this.excludeDependencies == x.excludeDependencies) && (this.fallbackDependencies == x.fallbackDependencies) && (this.autoScalaLibrary == x.autoScalaLibrary) && (this.hasClassifiers == x.hasClassifiers) && (this.classifiers == x.classifiers) && (this.mavenProfiles == x.mavenProfiles) && (this.scalaOrganization == x.scalaOrganization) && (this.scalaVersion == x.scalaVersion) && (this.authenticationByRepositoryId == x.authenticationByRepositoryId) && (this.authenticationByHost == x.authenticationByHost) && (this.createLogger == x.createLogger) && (this.cache == x.cache) case _ => false } override def hashCode: Int = { - 37 * (37 * (37 * (37 * (37 * (37 * (37 * (37 * (37 * (37 * (37 * (37 * (37 * (37 * (37 * (37 * (37 * (37 * (37 * (37 * (17 + "coursier.lmcoursier.CoursierConfiguration".##) + log.##) + resolvers.##) + reorderResolvers.##) + parallelDownloads.##) + maxIterations.##) + sbtScalaOrganization.##) + sbtScalaVersion.##) + sbtScalaJars.##) + interProjectDependencies.##) + excludeDependencies.##) + fallbackDependencies.##) + autoScalaLibrary.##) + hasClassifiers.##) + classifiers.##) + mavenProfiles.##) + scalaOrganization.##) + scalaVersion.##) + authenticationByRepositoryId.##) + authenticationByHost.##) + 37 * (37 * (37 * (37 * (37 * (37 * (37 * (37 * (37 * (37 * (37 * (37 * (37 * (37 * (37 * (37 * (37 * (37 * (37 * (37 * (37 * (37 * (17 + "coursier.lmcoursier.CoursierConfiguration".##) + log.##) + resolvers.##) + reorderResolvers.##) + parallelDownloads.##) + maxIterations.##) + sbtScalaOrganization.##) + sbtScalaVersion.##) + sbtScalaJars.##) + interProjectDependencies.##) + excludeDependencies.##) + fallbackDependencies.##) + autoScalaLibrary.##) + hasClassifiers.##) + classifiers.##) + mavenProfiles.##) + scalaOrganization.##) + scalaVersion.##) + authenticationByRepositoryId.##) + authenticationByHost.##) + createLogger.##) + cache.##) } override def toString: String = { - "CoursierConfiguration(" + log + ", " + resolvers + ", " + reorderResolvers + ", " + parallelDownloads + ", " + maxIterations + ", " + sbtScalaOrganization + ", " + sbtScalaVersion + ", " + sbtScalaJars + ", " + interProjectDependencies + ", " + excludeDependencies + ", " + fallbackDependencies + ", " + autoScalaLibrary + ", " + hasClassifiers + ", " + classifiers + ", " + mavenProfiles + ", " + scalaOrganization + ", " + scalaVersion + ", " + authenticationByRepositoryId + ", " + authenticationByHost + ")" + "CoursierConfiguration(" + log + ", " + resolvers + ", " + reorderResolvers + ", " + parallelDownloads + ", " + maxIterations + ", " + sbtScalaOrganization + ", " + sbtScalaVersion + ", " + sbtScalaJars + ", " + interProjectDependencies + ", " + excludeDependencies + ", " + fallbackDependencies + ", " + autoScalaLibrary + ", " + hasClassifiers + ", " + classifiers + ", " + mavenProfiles + ", " + scalaOrganization + ", " + scalaVersion + ", " + authenticationByRepositoryId + ", " + authenticationByHost + ", " + createLogger + ", " + cache + ")" } - private[this] def copy(log: Option[xsbti.Logger] = log, resolvers: Vector[sbt.librarymanagement.Resolver] = resolvers, reorderResolvers: Boolean = reorderResolvers, parallelDownloads: Int = parallelDownloads, maxIterations: Int = maxIterations, sbtScalaOrganization: Option[String] = sbtScalaOrganization, sbtScalaVersion: Option[String] = sbtScalaVersion, sbtScalaJars: Vector[java.io.File] = sbtScalaJars, interProjectDependencies: Vector[coursier.core.Project] = interProjectDependencies, excludeDependencies: Vector[(String, String)] = excludeDependencies, fallbackDependencies: Vector[coursier.lmcoursier.FallbackDependency] = fallbackDependencies, autoScalaLibrary: Boolean = autoScalaLibrary, hasClassifiers: Boolean = hasClassifiers, classifiers: Vector[String] = classifiers, mavenProfiles: Vector[String] = mavenProfiles, scalaOrganization: Option[String] = scalaOrganization, scalaVersion: Option[String] = scalaVersion, authenticationByRepositoryId: Vector[(String, coursier.core.Authentication)] = authenticationByRepositoryId, authenticationByHost: Vector[(String, coursier.core.Authentication)] = authenticationByHost): CoursierConfiguration = { - new CoursierConfiguration(log, resolvers, reorderResolvers, parallelDownloads, maxIterations, sbtScalaOrganization, sbtScalaVersion, sbtScalaJars, interProjectDependencies, excludeDependencies, fallbackDependencies, autoScalaLibrary, hasClassifiers, classifiers, mavenProfiles, scalaOrganization, scalaVersion, authenticationByRepositoryId, authenticationByHost) + private[this] def copy(log: Option[xsbti.Logger] = log, resolvers: Vector[sbt.librarymanagement.Resolver] = resolvers, reorderResolvers: Boolean = reorderResolvers, parallelDownloads: Int = parallelDownloads, maxIterations: Int = maxIterations, sbtScalaOrganization: Option[String] = sbtScalaOrganization, sbtScalaVersion: Option[String] = sbtScalaVersion, sbtScalaJars: Vector[java.io.File] = sbtScalaJars, interProjectDependencies: Vector[coursier.core.Project] = interProjectDependencies, excludeDependencies: Vector[(String, String)] = excludeDependencies, fallbackDependencies: Vector[coursier.lmcoursier.FallbackDependency] = fallbackDependencies, autoScalaLibrary: Boolean = autoScalaLibrary, hasClassifiers: Boolean = hasClassifiers, classifiers: Vector[String] = classifiers, mavenProfiles: Vector[String] = mavenProfiles, scalaOrganization: Option[String] = scalaOrganization, scalaVersion: Option[String] = scalaVersion, authenticationByRepositoryId: Vector[(String, coursier.core.Authentication)] = authenticationByRepositoryId, authenticationByHost: Vector[(String, coursier.core.Authentication)] = authenticationByHost, createLogger: Option[coursier.lmcoursier.CreateLogger] = createLogger, cache: Option[java.io.File] = cache): CoursierConfiguration = { + new CoursierConfiguration(log, resolvers, reorderResolvers, parallelDownloads, maxIterations, sbtScalaOrganization, sbtScalaVersion, sbtScalaJars, interProjectDependencies, excludeDependencies, fallbackDependencies, autoScalaLibrary, hasClassifiers, classifiers, mavenProfiles, scalaOrganization, scalaVersion, authenticationByRepositoryId, authenticationByHost, createLogger, cache) } def withLog(log: Option[xsbti.Logger]): CoursierConfiguration = { copy(log = log) @@ -112,10 +114,22 @@ final class CoursierConfiguration private ( def withAuthenticationByHost(authenticationByHost: Vector[(String, coursier.core.Authentication)]): CoursierConfiguration = { copy(authenticationByHost = authenticationByHost) } + def withCreateLogger(createLogger: Option[coursier.lmcoursier.CreateLogger]): CoursierConfiguration = { + copy(createLogger = createLogger) + } + def withCreateLogger(createLogger: coursier.lmcoursier.CreateLogger): CoursierConfiguration = { + copy(createLogger = Option(createLogger)) + } + def withCache(cache: Option[java.io.File]): CoursierConfiguration = { + copy(cache = cache) + } + def withCache(cache: java.io.File): CoursierConfiguration = { + copy(cache = Option(cache)) + } } object CoursierConfiguration { def apply(): CoursierConfiguration = new CoursierConfiguration() - def apply(log: Option[xsbti.Logger], resolvers: Vector[sbt.librarymanagement.Resolver], reorderResolvers: Boolean, parallelDownloads: Int, maxIterations: Int, sbtScalaOrganization: Option[String], sbtScalaVersion: Option[String], sbtScalaJars: Vector[java.io.File], interProjectDependencies: Vector[coursier.core.Project], excludeDependencies: Vector[(String, String)], fallbackDependencies: Vector[coursier.lmcoursier.FallbackDependency], autoScalaLibrary: Boolean, hasClassifiers: Boolean, classifiers: Vector[String], mavenProfiles: Vector[String], scalaOrganization: Option[String], scalaVersion: Option[String], authenticationByRepositoryId: Vector[(String, coursier.core.Authentication)], authenticationByHost: Vector[(String, coursier.core.Authentication)]): CoursierConfiguration = new CoursierConfiguration(log, resolvers, reorderResolvers, parallelDownloads, maxIterations, sbtScalaOrganization, sbtScalaVersion, sbtScalaJars, interProjectDependencies, excludeDependencies, fallbackDependencies, autoScalaLibrary, hasClassifiers, classifiers, mavenProfiles, scalaOrganization, scalaVersion, authenticationByRepositoryId, authenticationByHost) - def apply(log: xsbti.Logger, resolvers: Vector[sbt.librarymanagement.Resolver], reorderResolvers: Boolean, parallelDownloads: Int, maxIterations: Int, sbtScalaOrganization: String, sbtScalaVersion: String, sbtScalaJars: Vector[java.io.File], interProjectDependencies: Vector[coursier.core.Project], excludeDependencies: Vector[(String, String)], fallbackDependencies: Vector[coursier.lmcoursier.FallbackDependency], autoScalaLibrary: Boolean, hasClassifiers: Boolean, classifiers: Vector[String], mavenProfiles: Vector[String], scalaOrganization: String, scalaVersion: String, authenticationByRepositoryId: Vector[(String, coursier.core.Authentication)], authenticationByHost: Vector[(String, coursier.core.Authentication)]): CoursierConfiguration = new CoursierConfiguration(Option(log), resolvers, reorderResolvers, parallelDownloads, maxIterations, Option(sbtScalaOrganization), Option(sbtScalaVersion), sbtScalaJars, interProjectDependencies, excludeDependencies, fallbackDependencies, autoScalaLibrary, hasClassifiers, classifiers, mavenProfiles, Option(scalaOrganization), Option(scalaVersion), authenticationByRepositoryId, authenticationByHost) + def apply(log: Option[xsbti.Logger], resolvers: Vector[sbt.librarymanagement.Resolver], reorderResolvers: Boolean, parallelDownloads: Int, maxIterations: Int, sbtScalaOrganization: Option[String], sbtScalaVersion: Option[String], sbtScalaJars: Vector[java.io.File], interProjectDependencies: Vector[coursier.core.Project], excludeDependencies: Vector[(String, String)], fallbackDependencies: Vector[coursier.lmcoursier.FallbackDependency], autoScalaLibrary: Boolean, hasClassifiers: Boolean, classifiers: Vector[String], mavenProfiles: Vector[String], scalaOrganization: Option[String], scalaVersion: Option[String], authenticationByRepositoryId: Vector[(String, coursier.core.Authentication)], authenticationByHost: Vector[(String, coursier.core.Authentication)], createLogger: Option[coursier.lmcoursier.CreateLogger], cache: Option[java.io.File]): CoursierConfiguration = new CoursierConfiguration(log, resolvers, reorderResolvers, parallelDownloads, maxIterations, sbtScalaOrganization, sbtScalaVersion, sbtScalaJars, interProjectDependencies, excludeDependencies, fallbackDependencies, autoScalaLibrary, hasClassifiers, classifiers, mavenProfiles, scalaOrganization, scalaVersion, authenticationByRepositoryId, authenticationByHost, createLogger, cache) + def apply(log: xsbti.Logger, resolvers: Vector[sbt.librarymanagement.Resolver], reorderResolvers: Boolean, parallelDownloads: Int, maxIterations: Int, sbtScalaOrganization: String, sbtScalaVersion: String, sbtScalaJars: Vector[java.io.File], interProjectDependencies: Vector[coursier.core.Project], excludeDependencies: Vector[(String, String)], fallbackDependencies: Vector[coursier.lmcoursier.FallbackDependency], autoScalaLibrary: Boolean, hasClassifiers: Boolean, classifiers: Vector[String], mavenProfiles: Vector[String], scalaOrganization: String, scalaVersion: String, authenticationByRepositoryId: Vector[(String, coursier.core.Authentication)], authenticationByHost: Vector[(String, coursier.core.Authentication)], createLogger: coursier.lmcoursier.CreateLogger, cache: java.io.File): CoursierConfiguration = new CoursierConfiguration(Option(log), resolvers, reorderResolvers, parallelDownloads, maxIterations, Option(sbtScalaOrganization), Option(sbtScalaVersion), sbtScalaJars, interProjectDependencies, excludeDependencies, fallbackDependencies, autoScalaLibrary, hasClassifiers, classifiers, mavenProfiles, Option(scalaOrganization), Option(scalaVersion), authenticationByRepositoryId, authenticationByHost, Option(createLogger), Option(cache)) } diff --git a/modules/lm-coursier/src/main/contraband/lm-coursier.json b/modules/lm-coursier/src/main/contraband/lm-coursier.json index 7f474574c..d641b0c55 100644 --- a/modules/lm-coursier/src/main/contraband/lm-coursier.json +++ b/modules/lm-coursier/src/main/contraband/lm-coursier.json @@ -120,6 +120,18 @@ "type": "(String, coursier.core.Authentication)*", "default": "Vector.empty", "since": "0.0.1" + }, + { + "name": "createLogger", + "type": "coursier.lmcoursier.CreateLogger?", + "default": "None", + "since": "0.0.1" + }, + { + "name": "cache", + "type": "java.io.File?", + "default": "None", + "since": "0.0.1" } ] } diff --git a/modules/lm-coursier/src/main/scala/coursier/lmcoursier/CoursierDependencyResolution.scala b/modules/lm-coursier/src/main/scala/coursier/lmcoursier/CoursierDependencyResolution.scala index 3729d02e8..78a8e20c7 100644 --- a/modules/lm-coursier/src/main/scala/coursier/lmcoursier/CoursierDependencyResolution.scala +++ b/modules/lm-coursier/src/main/scala/coursier/lmcoursier/CoursierDependencyResolution.scala @@ -69,10 +69,10 @@ class CoursierDependencyResolution(conf: CoursierConfiguration) extends Dependen val verbosityLevel = 0 val ttl = Cache.defaultTtl - val createLogger = { () => + val createLogger = conf.createLogger.map(_.create).getOrElse { () => new TermDisplay(new OutputStreamWriter(System.err), fallbackMode = true) } - val cache = Cache.default + val cache = conf.cache.getOrElse(Cache.default) val cachePolicies = CachePolicy.default val checksums = Cache.defaultChecksums val projectName = "" // used for logging only… diff --git a/modules/lm-coursier/src/main/scala/coursier/lmcoursier/CreateLogger.scala b/modules/lm-coursier/src/main/scala/coursier/lmcoursier/CreateLogger.scala new file mode 100644 index 000000000..136227657 --- /dev/null +++ b/modules/lm-coursier/src/main/scala/coursier/lmcoursier/CreateLogger.scala @@ -0,0 +1,3 @@ +package coursier.lmcoursier + +final case class CreateLogger(create: () => coursier.Cache.Logger) diff --git a/modules/sbt-coursier-shared/src/main/scala/coursier/sbtcoursiershared/SbtCoursierShared.scala b/modules/sbt-coursier-shared/src/main/scala/coursier/sbtcoursiershared/SbtCoursierShared.scala index ca24113a9..67c64677c 100644 --- a/modules/sbt-coursier-shared/src/main/scala/coursier/sbtcoursiershared/SbtCoursierShared.scala +++ b/modules/sbt-coursier-shared/src/main/scala/coursier/sbtcoursiershared/SbtCoursierShared.scala @@ -1,8 +1,10 @@ package coursier.sbtcoursiershared -import coursier.Credentials +import java.io.{File, OutputStreamWriter} + +import coursier.{Cache, Credentials, TermDisplay} import coursier.core.{Configuration, Project, Publication} -import coursier.lmcoursier.{FallbackDependency, SbtCoursierCache} +import coursier.lmcoursier.{CreateLogger, FallbackDependency, SbtCoursierCache} import sbt.{AutoPlugin, Classpaths, Compile, Setting, TaskKey, Test, settingKey, taskKey} import sbt.Keys._ import sbt.librarymanagement.{Resolver, URLRepository} @@ -33,6 +35,13 @@ object SbtCoursierShared extends AutoPlugin { val coursierUseSbtCredentials = settingKey[Boolean]("") val coursierCredentials = taskKey[Map[String, Credentials]]("") + + val coursierCreateLogger = taskKey[CreateLogger]("") + + val coursierCache = settingKey[File]("") + + type CoursierCreateLogger = coursier.lmcoursier.CreateLogger + val CoursierCreateLogger = coursier.lmcoursier.CreateLogger } import autoImport._ @@ -45,7 +54,9 @@ object SbtCoursierShared extends AutoPlugin { coursierReorderResolvers := true, coursierKeepPreloaded := false, coursierUseSbtCredentials := true, - coursierCredentials := Map.empty + coursierCredentials := Map.empty, + coursierCreateLogger := CreateLogger { () => new TermDisplay(new OutputStreamWriter(System.err)) }, + coursierCache := Cache.default ) private val pluginIvySnapshotsBase = Resolver.SbtRepositoryRoot.stripSuffix("/") + "/ivy-snapshots" diff --git a/modules/sbt-coursier/src/main/scala/coursier/sbtcoursier/ArtifactsTasks.scala b/modules/sbt-coursier/src/main/scala/coursier/sbtcoursier/ArtifactsTasks.scala index a3a4bc105..97000ae64 100644 --- a/modules/sbt-coursier/src/main/scala/coursier/sbtcoursier/ArtifactsTasks.scala +++ b/modules/sbt-coursier/src/main/scala/coursier/sbtcoursier/ArtifactsTasks.scala @@ -6,6 +6,7 @@ import coursier.{Artifact, FileError} import coursier.core._ import coursier.lmcoursier._ import coursier.sbtcoursier.Keys._ +import coursier.sbtcoursiershared.SbtCoursierShared.autoImport.{coursierCache, coursierCreateLogger} import sbt.Def import sbt.Keys._ @@ -56,7 +57,7 @@ object ArtifactsTasks { res, includeSignatures, parallelDownloads, - createLogger, + createLogger.create, cache, artifactsChecksums, ttl, diff --git a/modules/sbt-coursier/src/main/scala/coursier/sbtcoursier/CoursierPlugin.scala b/modules/sbt-coursier/src/main/scala/coursier/sbtcoursier/CoursierPlugin.scala index 077c122cc..a029278b8 100644 --- a/modules/sbt-coursier/src/main/scala/coursier/sbtcoursier/CoursierPlugin.scala +++ b/modules/sbt-coursier/src/main/scala/coursier/sbtcoursier/CoursierPlugin.scala @@ -1,8 +1,6 @@ package coursier.sbtcoursier -import java.io.OutputStreamWriter - -import coursier.{Cache, CachePolicy, TermDisplay} +import coursier.{Cache, CachePolicy} import coursier.core.{Configuration, ResolutionProcess} import coursier.sbtcoursiershared.SbtCoursierShared import sbt.{Cache => _, Configuration => _, _} @@ -22,7 +20,6 @@ object CoursierPlugin extends AutoPlugin { val coursierCachePolicies = Keys.coursierCachePolicies val coursierTtl = Keys.coursierTtl val coursierVerbosity = Keys.coursierVerbosity - val coursierCache = Keys.coursierCache val coursierConfigGraphs = Keys.coursierConfigGraphs val coursierSbtClassifiersModule = Keys.coursierSbtClassifiersModule @@ -42,8 +39,6 @@ object CoursierPlugin extends AutoPlugin { val coursierClassifiersArtifacts = Keys.coursierClassifiersArtifacts val coursierSbtClassifiersArtifacts = Keys.coursierSbtClassifiersArtifacts - val coursierCreateLogger = Keys.coursierCreateLogger - val coursierVersion = coursier.util.Properties.version val addSbtCoursier = { addSbtPlugin("io.get-coursier" % "sbt-coursier" % coursierVersion) @@ -191,9 +186,7 @@ object CoursierPlugin extends AutoPlugin { coursierArtifactsChecksums := Seq(None), coursierCachePolicies := CachePolicy.default, coursierTtl := Cache.defaultTtl, - coursierVerbosity := Settings.defaultVerbosityLevel(sLog.value), - coursierCache := Cache.default, - coursierCreateLogger := { () => new TermDisplay(new OutputStreamWriter(System.err)) } + coursierVerbosity := Settings.defaultVerbosityLevel(sLog.value) ) override lazy val projectSettings = coursierSettings() ++ diff --git a/modules/sbt-coursier/src/main/scala/coursier/sbtcoursier/Keys.scala b/modules/sbt-coursier/src/main/scala/coursier/sbtcoursier/Keys.scala index 71c73a11a..894fca9fe 100644 --- a/modules/sbt-coursier/src/main/scala/coursier/sbtcoursier/Keys.scala +++ b/modules/sbt-coursier/src/main/scala/coursier/sbtcoursier/Keys.scala @@ -17,12 +17,9 @@ 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 coursierCreateLogger = TaskKey[() => Cache.Logger]("coursier-create-logger") val coursierVerbosity = SettingKey[Int]("coursier-verbosity") - val coursierCache = SettingKey[File]("coursier-cache") - val coursierConfigGraphs = TaskKey[Seq[Set[Configuration]]]("coursier-config-graphs") val coursierSbtClassifiersModule = TaskKey[GetClassifiersModule]("coursier-sbt-classifiers-module") diff --git a/modules/sbt-coursier/src/main/scala/coursier/sbtcoursier/ResolutionTasks.scala b/modules/sbt-coursier/src/main/scala/coursier/sbtcoursier/ResolutionTasks.scala index c48028490..3f3025666 100644 --- a/modules/sbt-coursier/src/main/scala/coursier/sbtcoursier/ResolutionTasks.scala +++ b/modules/sbt-coursier/src/main/scala/coursier/sbtcoursier/ResolutionTasks.scala @@ -140,7 +140,7 @@ object ResolutionTasks { parallelDownloads, projectName, maxIterations, - createLogger, + createLogger.create, cache, cachePolicies, ttl, diff --git a/modules/sbt-coursier/src/sbt-test/sbt-coursier-group-1/logger/build.sbt b/modules/sbt-coursier/src/sbt-test/shared-1/logger/build.sbt similarity index 98% rename from modules/sbt-coursier/src/sbt-test/sbt-coursier-group-1/logger/build.sbt rename to modules/sbt-coursier/src/sbt-test/shared-1/logger/build.sbt index 1fc080996..39160f65e 100644 --- a/modules/sbt-coursier/src/sbt-test/sbt-coursier-group-1/logger/build.sbt +++ b/modules/sbt-coursier/src/sbt-test/shared-1/logger/build.sbt @@ -13,7 +13,7 @@ coursierCreateLogger := { logStream.println(msg) } val cacheFile = coursierCache.value - ;{ () => + ;CoursierCreateLogger { () => new coursier.Cache.Logger { override def init(beforeOutput: => Unit): Unit = { beforeOutput diff --git a/modules/sbt-coursier/src/sbt-test/sbt-coursier-group-1/logger/project/plugins.sbt b/modules/sbt-coursier/src/sbt-test/shared-1/logger/project/plugins.sbt similarity index 100% rename from modules/sbt-coursier/src/sbt-test/sbt-coursier-group-1/logger/project/plugins.sbt rename to modules/sbt-coursier/src/sbt-test/shared-1/logger/project/plugins.sbt diff --git a/modules/sbt-coursier/src/sbt-test/sbt-coursier-group-1/logger/test b/modules/sbt-coursier/src/sbt-test/shared-1/logger/test similarity index 100% rename from modules/sbt-coursier/src/sbt-test/sbt-coursier-group-1/logger/test rename to modules/sbt-coursier/src/sbt-test/shared-1/logger/test diff --git a/modules/sbt-lm-coursier/src/main/scala/coursier/sbtlmcoursier/LmCoursierPlugin.scala b/modules/sbt-lm-coursier/src/main/scala/coursier/sbtlmcoursier/LmCoursierPlugin.scala index 4807ec0b5..1b58e01b3 100644 --- a/modules/sbt-lm-coursier/src/main/scala/coursier/sbtlmcoursier/LmCoursierPlugin.scala +++ b/modules/sbt-lm-coursier/src/main/scala/coursier/sbtlmcoursier/LmCoursierPlugin.scala @@ -80,6 +80,10 @@ object LmCoursierPlugin extends AutoPlugin { val authenticationByRepositoryId = coursierCredentials.value.mapValues(_.authentication) val authenticationByHost = authenticationByHostTask.value + val createLogger = coursierCreateLogger.value + + val cache = coursierCache.value + val internalSbtScalaProvider = appConfiguration.value.provider.scalaProvider val sbtBootJars = internalSbtScalaProvider.jars() val sbtScalaVersion = internalSbtScalaProvider.version() @@ -111,6 +115,8 @@ object LmCoursierPlugin extends AutoPlugin { .withScalaVersion(scalaVer) .withAuthenticationByRepositoryId(authenticationByRepositoryId.toVector.sortBy(_._1)) .withAuthenticationByHost(authenticationByHost.toVector.sortBy(_._1)) + .withCreateLogger(createLogger) + .withCache(cache) .withLog(s.log) } } From a1dd332d4e73177334627f4819473d89b42a7be1 Mon Sep 17 00:00:00 2001 From: Alexandre Archambault Date: Thu, 22 Nov 2018 14:23:50 +0100 Subject: [PATCH 5/5] Move remaining sbt-coursier specific tests --- .../dependency-graph/build.sbt | 0 .../dependency-graph/project/plugins.sbt | 0 .../dependency-graph/src/main/scala/Main.scala | 0 .../dependency-graph/test | 0 .../dependency-graph/whatDependsOnResult.log | 0 .../in-memory-cache/build.sbt | 0 .../in-memory-cache/project/plugins.sbt | 0 .../in-memory-cache/test | 0 scripts/travis.sh | 8 +++++++- 9 files changed, 7 insertions(+), 1 deletion(-) rename modules/sbt-coursier/src/sbt-test/{sbt-coursier-group-1 => sbt-coursier}/dependency-graph/build.sbt (100%) rename modules/sbt-coursier/src/sbt-test/{sbt-coursier-group-1 => sbt-coursier}/dependency-graph/project/plugins.sbt (100%) rename modules/sbt-coursier/src/sbt-test/{sbt-coursier-group-1 => sbt-coursier}/dependency-graph/src/main/scala/Main.scala (100%) rename modules/sbt-coursier/src/sbt-test/{sbt-coursier-group-1 => sbt-coursier}/dependency-graph/test (100%) rename modules/sbt-coursier/src/sbt-test/{sbt-coursier-group-1 => sbt-coursier}/dependency-graph/whatDependsOnResult.log (100%) rename modules/sbt-coursier/src/sbt-test/{sbt-coursier-group-1 => sbt-coursier}/in-memory-cache/build.sbt (100%) rename modules/sbt-coursier/src/sbt-test/{sbt-coursier-group-1 => sbt-coursier}/in-memory-cache/project/plugins.sbt (100%) rename modules/sbt-coursier/src/sbt-test/{sbt-coursier-group-1 => sbt-coursier}/in-memory-cache/test (100%) diff --git a/modules/sbt-coursier/src/sbt-test/sbt-coursier-group-1/dependency-graph/build.sbt b/modules/sbt-coursier/src/sbt-test/sbt-coursier/dependency-graph/build.sbt similarity index 100% rename from modules/sbt-coursier/src/sbt-test/sbt-coursier-group-1/dependency-graph/build.sbt rename to modules/sbt-coursier/src/sbt-test/sbt-coursier/dependency-graph/build.sbt diff --git a/modules/sbt-coursier/src/sbt-test/sbt-coursier-group-1/dependency-graph/project/plugins.sbt b/modules/sbt-coursier/src/sbt-test/sbt-coursier/dependency-graph/project/plugins.sbt similarity index 100% rename from modules/sbt-coursier/src/sbt-test/sbt-coursier-group-1/dependency-graph/project/plugins.sbt rename to modules/sbt-coursier/src/sbt-test/sbt-coursier/dependency-graph/project/plugins.sbt diff --git a/modules/sbt-coursier/src/sbt-test/sbt-coursier-group-1/dependency-graph/src/main/scala/Main.scala b/modules/sbt-coursier/src/sbt-test/sbt-coursier/dependency-graph/src/main/scala/Main.scala similarity index 100% rename from modules/sbt-coursier/src/sbt-test/sbt-coursier-group-1/dependency-graph/src/main/scala/Main.scala rename to modules/sbt-coursier/src/sbt-test/sbt-coursier/dependency-graph/src/main/scala/Main.scala diff --git a/modules/sbt-coursier/src/sbt-test/sbt-coursier-group-1/dependency-graph/test b/modules/sbt-coursier/src/sbt-test/sbt-coursier/dependency-graph/test similarity index 100% rename from modules/sbt-coursier/src/sbt-test/sbt-coursier-group-1/dependency-graph/test rename to modules/sbt-coursier/src/sbt-test/sbt-coursier/dependency-graph/test diff --git a/modules/sbt-coursier/src/sbt-test/sbt-coursier-group-1/dependency-graph/whatDependsOnResult.log b/modules/sbt-coursier/src/sbt-test/sbt-coursier/dependency-graph/whatDependsOnResult.log similarity index 100% rename from modules/sbt-coursier/src/sbt-test/sbt-coursier-group-1/dependency-graph/whatDependsOnResult.log rename to modules/sbt-coursier/src/sbt-test/sbt-coursier/dependency-graph/whatDependsOnResult.log diff --git a/modules/sbt-coursier/src/sbt-test/sbt-coursier-group-1/in-memory-cache/build.sbt b/modules/sbt-coursier/src/sbt-test/sbt-coursier/in-memory-cache/build.sbt similarity index 100% rename from modules/sbt-coursier/src/sbt-test/sbt-coursier-group-1/in-memory-cache/build.sbt rename to modules/sbt-coursier/src/sbt-test/sbt-coursier/in-memory-cache/build.sbt diff --git a/modules/sbt-coursier/src/sbt-test/sbt-coursier-group-1/in-memory-cache/project/plugins.sbt b/modules/sbt-coursier/src/sbt-test/sbt-coursier/in-memory-cache/project/plugins.sbt similarity index 100% rename from modules/sbt-coursier/src/sbt-test/sbt-coursier-group-1/in-memory-cache/project/plugins.sbt rename to modules/sbt-coursier/src/sbt-test/sbt-coursier/in-memory-cache/project/plugins.sbt diff --git a/modules/sbt-coursier/src/sbt-test/sbt-coursier-group-1/in-memory-cache/test b/modules/sbt-coursier/src/sbt-test/sbt-coursier/in-memory-cache/test similarity index 100% rename from modules/sbt-coursier/src/sbt-test/sbt-coursier-group-1/in-memory-cache/test rename to modules/sbt-coursier/src/sbt-test/sbt-coursier/in-memory-cache/test diff --git a/scripts/travis.sh b/scripts/travis.sh index 910cd9ebe..b45bd8a02 100755 --- a/scripts/travis.sh +++ b/scripts/travis.sh @@ -27,10 +27,16 @@ runLmCoursierTests() { } runSbtCoursierTests() { + if [ "$TEST_GROUP" = 1 ]; then + SCRIPTED_EXTRA="sbt-coursier/*" + else + SCRIPTED_EXTRA="" + fi + ./metadata/scripts/with-test-repo.sh sbt \ ++$TRAVIS_SCALA_VERSION \ sbt-coursier-shared/test \ - "sbt-coursier/scripted shared-$TEST_GROUP/* sbt-coursier-group-$TEST_GROUP/*" + "sbt-coursier/scripted shared-$TEST_GROUP/* $SCRIPTED_EXTRA" } runSbtShadingTests() {