From 3cbb1e3c2eea25e5f3ecd872a712655a460b9bfb Mon Sep 17 00:00:00 2001 From: Alexandre Archambault Date: Thu, 22 Nov 2018 13:07:10 +0100 Subject: [PATCH] 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) } }