From d3bedc838fa438742039b4fb693b05791d9a668a Mon Sep 17 00:00:00 2001 From: Alexandre Archambault Date: Sat, 22 Jul 2017 17:29:27 +0200 Subject: [PATCH] Fix updateSbtClassifiers --- .../src/main/scala/coursier/FromSbt.scala | 28 +++++++++++++ .../src/main/scala/coursier/Tasks.scala | 26 ++----------- .../update-sbt-classifiers/build.sbt | 39 +++++++++++++++++++ .../project/plugins.sbt | 11 ++++++ .../src/main/scala-2.10/Compatibility.scala | 8 ++++ .../src/main/scala-2.12/Compatibility.scala | 1 + .../sbt-coursier/update-sbt-classifiers/test | 1 + 7 files changed, 92 insertions(+), 22 deletions(-) create mode 100644 sbt-coursier/src/sbt-test/sbt-coursier/update-sbt-classifiers/build.sbt create mode 100644 sbt-coursier/src/sbt-test/sbt-coursier/update-sbt-classifiers/project/plugins.sbt create mode 100644 sbt-coursier/src/sbt-test/sbt-coursier/update-sbt-classifiers/project/src/main/scala-2.10/Compatibility.scala create mode 100644 sbt-coursier/src/sbt-test/sbt-coursier/update-sbt-classifiers/project/src/main/scala-2.12/Compatibility.scala create mode 100644 sbt-coursier/src/sbt-test/sbt-coursier/update-sbt-classifiers/test diff --git a/sbt-coursier/src/main/scala/coursier/FromSbt.scala b/sbt-coursier/src/main/scala/coursier/FromSbt.scala index 9c50d9aa9..c603f106b 100644 --- a/sbt-coursier/src/main/scala/coursier/FromSbt.scala +++ b/sbt-coursier/src/main/scala/coursier/FromSbt.scala @@ -103,6 +103,34 @@ object FromSbt { (module0, version, url, module.isChanging) } + def sbtClassifiersProject( + cm: GetClassifiersModule, + scalaVersion: String, + scalaBinaryVersion: String + ) = { + + val p = FromSbt.project( + cm.id, + cm.dependencies, + cm.configurations.map(cfg => cfg.name -> cfg.extendsConfigs.map(_.name)).toMap, + scalaVersion, + scalaBinaryVersion + ) + + // for w/e reasons, the dependencies sometimes don't land in the right config above + // this is a loose attempt at fixing that + cm.configurations match { + case Seq(cfg) => + p.copy( + dependencies = p.dependencies.map { + case (_, d) => (cfg.name, d) + } + ) + case _ => + p + } + } + def project( projectID: ModuleID, allDependencies: Seq[ModuleID], diff --git a/sbt-coursier/src/main/scala/coursier/Tasks.scala b/sbt-coursier/src/main/scala/coursier/Tasks.scala index fafe42b19..5d4551e97 100644 --- a/sbt-coursier/src/main/scala/coursier/Tasks.scala +++ b/sbt-coursier/src/main/scala/coursier/Tasks.scala @@ -550,13 +550,7 @@ object Tasks { val (currentProject, fallbackDependencies, configGraphs) = if (sbtClassifiers) { - val proj = FromSbt.project( - cm.id, - cm.dependencies, - cm.configurations.map(cfg => cfg.name -> cfg.extendsConfigs.map(_.name)).toMap, - sv, - sbv - ) + val proj = FromSbt.sbtClassifiersProject(cm, sv, sbv) val fallbackDeps = FromSbt.fallbackDependencies( cm.dependencies, @@ -1112,13 +1106,7 @@ object Tasks { val currentProject = if (sbtClassifiers) - FromSbt.project( - cm.id, - cm.dependencies, - cm.configurations.map(cfg => cfg.name -> cfg.extendsConfigs.map(_.name)).toMap, - sv, - sbv - ) + FromSbt.sbtClassifiersProject(cm, sv, sbv) else proj.copy(publications = publications) @@ -1155,7 +1143,7 @@ object Tasks { val configs = if (withClassifiers && sbtClassifiers) - cm.configurations.map(c => c.name -> Set.empty[String]).toMap + cm.configurations.map(c => c.name -> Set(c.name)).toMap else shadedConfigOpt.fold(configs0) { case (baseConfig, shadedConfig) => @@ -1277,13 +1265,7 @@ object Tasks { val currentProject = if (sbtClassifiers) - FromSbt.project( - cm.id, - cm.dependencies, - cm.configurations.map(cfg => cfg.name -> cfg.extendsConfigs.map(_.name)).toMap, - sv, - sbv - ) + FromSbt.sbtClassifiersProject(cm, sv, sbv) else proj.copy(publications = publications) diff --git a/sbt-coursier/src/sbt-test/sbt-coursier/update-sbt-classifiers/build.sbt b/sbt-coursier/src/sbt-test/sbt-coursier/update-sbt-classifiers/build.sbt new file mode 100644 index 000000000..77feb59e6 --- /dev/null +++ b/sbt-coursier/src/sbt-test/sbt-coursier/update-sbt-classifiers/build.sbt @@ -0,0 +1,39 @@ + +import Compatibility._ + +scalaVersion := appConfiguration.value.provider.scalaProvider.version + +lazy val updateSbtClassifiersCheck = TaskKey[Unit]("updateSbtClassifiersCheck") + +updateSbtClassifiersCheck := { + + val configReport = updateSbtClassifiers + .value + .configuration(Default) + .getOrElse { + throw new Exception( + "default configuration not found in updateSbtClassifiers report" + ) + } + + def artifacts(org: String, name: String) = configReport + .modules + .collect { + case moduleReport + if moduleReport.module.organization == org && + moduleReport.module.name == name => + moduleReport.artifacts + } + .toSeq + .flatten + + def ensureHasArtifact(org: String, name: String) = + assert( + artifacts(org, name).exists(_._2.getName.endsWith("-sources.jar")), + s"$org:$name not found" + ) + + ensureHasArtifact("org.scala-lang", "scala-library") + ensureHasArtifact("io.get-coursier", "coursier_" + scalaBinaryVersion.value) + ensureHasArtifact("io.get-coursier", "sbt-coursier") +} diff --git a/sbt-coursier/src/sbt-test/sbt-coursier/update-sbt-classifiers/project/plugins.sbt b/sbt-coursier/src/sbt-test/sbt-coursier/update-sbt-classifiers/project/plugins.sbt new file mode 100644 index 000000000..8d902e4dc --- /dev/null +++ b/sbt-coursier/src/sbt-test/sbt-coursier/update-sbt-classifiers/project/plugins.sbt @@ -0,0 +1,11 @@ +{ + val pluginVersion = sys.props.getOrElse( + "plugin.version", + throw new RuntimeException( + """|The system property 'plugin.version' is not defined. + |Specify this property using the scriptedLaunchOpts -D.""".stripMargin + ) + ) + + addSbtPlugin("io.get-coursier" % "sbt-coursier" % pluginVersion) +} \ No newline at end of file diff --git a/sbt-coursier/src/sbt-test/sbt-coursier/update-sbt-classifiers/project/src/main/scala-2.10/Compatibility.scala b/sbt-coursier/src/sbt-test/sbt-coursier/update-sbt-classifiers/project/src/main/scala-2.10/Compatibility.scala new file mode 100644 index 000000000..8824f1209 --- /dev/null +++ b/sbt-coursier/src/sbt-test/sbt-coursier/update-sbt-classifiers/project/src/main/scala-2.10/Compatibility.scala @@ -0,0 +1,8 @@ +object Compatibility { + + implicit class UpdateReportOps(val rep: sbt.UpdateReport) extends AnyVal { + def configuration(conf: sbt.Configuration) = + rep.configuration(conf.name) + } + +} diff --git a/sbt-coursier/src/sbt-test/sbt-coursier/update-sbt-classifiers/project/src/main/scala-2.12/Compatibility.scala b/sbt-coursier/src/sbt-test/sbt-coursier/update-sbt-classifiers/project/src/main/scala-2.12/Compatibility.scala new file mode 100644 index 000000000..19835e1be --- /dev/null +++ b/sbt-coursier/src/sbt-test/sbt-coursier/update-sbt-classifiers/project/src/main/scala-2.12/Compatibility.scala @@ -0,0 +1 @@ +object Compatibility diff --git a/sbt-coursier/src/sbt-test/sbt-coursier/update-sbt-classifiers/test b/sbt-coursier/src/sbt-test/sbt-coursier/update-sbt-classifiers/test new file mode 100644 index 000000000..f6351a4d9 --- /dev/null +++ b/sbt-coursier/src/sbt-test/sbt-coursier/update-sbt-classifiers/test @@ -0,0 +1 @@ +> updateSbtClassifiersCheck