From d077a82341cb1864dbcd568382ecd3b5eff3db1d Mon Sep 17 00:00:00 2001 From: Alexandre Archambault Date: Tue, 19 Sep 2017 23:23:32 +0200 Subject: [PATCH 1/3] Fix MatchError when using cross version patch with sbt 1.0 --- .../coursier/SbtCompatibility.scala | 4 ---- .../coursier/SbtCompatibility.scala | 14 -------------- .../src/main/scala/coursier/FromSbt.scala | 8 +++----- .../typelevel-with-dependencies/build.sbt | 5 +++-- .../src/main/scala-2.10/Compatibility.scala | 19 +++++++++++++++++++ .../src/main/scala-2.12/Compatibility.scala | 1 + 6 files changed, 26 insertions(+), 25 deletions(-) create mode 100644 sbt-coursier/src/sbt-test/sbt-coursier/typelevel-with-dependencies/project/src/main/scala-2.10/Compatibility.scala create mode 100644 sbt-coursier/src/sbt-test/sbt-coursier/typelevel-with-dependencies/project/src/main/scala-2.12/Compatibility.scala diff --git a/sbt-coursier/src/main/scala-2.10/coursier/SbtCompatibility.scala b/sbt-coursier/src/main/scala-2.10/coursier/SbtCompatibility.scala index 4890b9836..6923d7538 100644 --- a/sbt-coursier/src/main/scala-2.10/coursier/SbtCompatibility.scala +++ b/sbt-coursier/src/main/scala-2.10/coursier/SbtCompatibility.scala @@ -18,10 +18,6 @@ object SbtCompatibility { type IvySbt = sbt.IvySbt - type Binary = sbt.CrossVersion.Binary - type Disabled = sbt.CrossVersion.Disabled.type - type Full = sbt.CrossVersion.Full - implicit class ModuleIDOps(val id: sbt.ModuleID) extends AnyVal { def withConfigurations(configurations: Option[String]): sbt.ModuleID = id.copy(configurations = configurations) diff --git a/sbt-coursier/src/main/scala-2.12/coursier/SbtCompatibility.scala b/sbt-coursier/src/main/scala-2.12/coursier/SbtCompatibility.scala index 3a8a75f8a..03bc05553 100644 --- a/sbt-coursier/src/main/scala-2.12/coursier/SbtCompatibility.scala +++ b/sbt-coursier/src/main/scala-2.12/coursier/SbtCompatibility.scala @@ -16,20 +16,6 @@ object SbtCompatibility { type IvySbt = sbt.internal.librarymanagement.IvySbt - type Binary = sbt.librarymanagement.Binary - type Disabled = sbt.librarymanagement.Disabled - type Full = sbt.librarymanagement.Full - - implicit class BinaryOps(private val binary: Binary) extends AnyVal { - def remapVersion(scalaBinaryVersion: String): String = - binary.prefix + scalaBinaryVersion + binary.suffix - } - - implicit class FullOps(private val full: Full) extends AnyVal { - def remapVersion(scalaVersion: String): String = - full.prefix + scalaVersion + full.suffix - } - def needsIvyXmlLocal = sbt.Keys.publishLocalConfiguration def needsIvyXml = sbt.Keys.publishConfiguration diff --git a/sbt-coursier/src/main/scala/coursier/FromSbt.scala b/sbt-coursier/src/main/scala/coursier/FromSbt.scala index c603f106b..c3e687cf6 100644 --- a/sbt-coursier/src/main/scala/coursier/FromSbt.scala +++ b/sbt-coursier/src/main/scala/coursier/FromSbt.scala @@ -25,11 +25,9 @@ object FromSbt { crossVersion: CrossVersion, scalaVersion: => String, scalaBinaryVersion: => String - ): String = crossVersion match { - case _: Disabled => name - case f: Full => name + "_" + f.remapVersion(scalaVersion) - case b: Binary => name + "_" + b.remapVersion(scalaBinaryVersion) - } + ): String = + CrossVersion(crossVersion, scalaVersion, scalaBinaryVersion) + .fold(name)(_(name)) def attributes(attr: Map[String, String]): Map[String, String] = attr.map { case (k, v) => diff --git a/sbt-coursier/src/sbt-test/sbt-coursier/typelevel-with-dependencies/build.sbt b/sbt-coursier/src/sbt-test/sbt-coursier/typelevel-with-dependencies/build.sbt index f61164147..0c78e2523 100644 --- a/sbt-coursier/src/sbt-test/sbt-coursier/typelevel-with-dependencies/build.sbt +++ b/sbt-coursier/src/sbt-test/sbt-coursier/typelevel-with-dependencies/build.sbt @@ -1,9 +1,10 @@ +import Compatibility._ + scalaVersion := "2.12.2-bin-typelevel-4" scalaOrganization := "org.typelevel" scalacOptions += "-Yinduction-heuristics" libraryDependencies ++= Seq( "com.47deg" %% "freestyle" % "0.1.0", - // CrossVersion.patch not available in sbt 0.13.8 - compilerPlugin("org.scalamacros" % "paradise_2.12.2" % "2.1.0") + compilerPlugin("org.scalamacros" %% "paradise" % "2.1.0" cross CrossVersion.patch) ) diff --git a/sbt-coursier/src/sbt-test/sbt-coursier/typelevel-with-dependencies/project/src/main/scala-2.10/Compatibility.scala b/sbt-coursier/src/sbt-test/sbt-coursier/typelevel-with-dependencies/project/src/main/scala-2.10/Compatibility.scala new file mode 100644 index 000000000..114525fc4 --- /dev/null +++ b/sbt-coursier/src/sbt-test/sbt-coursier/typelevel-with-dependencies/project/src/main/scala-2.10/Compatibility.scala @@ -0,0 +1,19 @@ +object Compatibility { + + // patch method not available in sbt 0.13.8 + + implicit class CrossVersionOps(val companion: sbt.CrossVersion.type) extends AnyVal { + def patch: sbt.CrossVersion = new sbt.CrossVersion.Full(patchFun) + } + + // adapted from sbt.CrossVersion from the sbt 0.13.16 sources + + private val BinCompatV = """(\d+)\.(\d+)\.(\d+)(-\w+)??-bin(-.*)?""".r + + private def patchFun(fullVersion: String): String = + fullVersion match { + case BinCompatV(x, y, z, w, _) => s"""$x.$y.$z${if (w == null) "" else w}""" + case other => other + } + +} diff --git a/sbt-coursier/src/sbt-test/sbt-coursier/typelevel-with-dependencies/project/src/main/scala-2.12/Compatibility.scala b/sbt-coursier/src/sbt-test/sbt-coursier/typelevel-with-dependencies/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/typelevel-with-dependencies/project/src/main/scala-2.12/Compatibility.scala @@ -0,0 +1 @@ +object Compatibility From 09c5ce417a6bdedae44f713b5589ee777d16e7cf Mon Sep 17 00:00:00 2001 From: Alexandre Archambault Date: Wed, 20 Sep 2017 00:12:20 +0200 Subject: [PATCH 2/3] Quick hack MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This ensures something sometimes random is not in some conditions, see https://github.com/coursier/coursier/issues/650… --- .../src/main/scala/coursier/ToSbt.scala | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/sbt-coursier/src/main/scala/coursier/ToSbt.scala b/sbt-coursier/src/main/scala/coursier/ToSbt.scala index 875115fb6..2c4db0c9e 100644 --- a/sbt-coursier/src/main/scala/coursier/ToSbt.scala +++ b/sbt-coursier/src/main/scala/coursier/ToSbt.scala @@ -221,9 +221,25 @@ object ToSbt { includeSignatures = includeSignatures ) + val reports0 = + if (subRes.rootDependencies.size == 1) { + // quick hack ensuring the module for the only root dependency + // appears first in the update report, see https://github.com/coursier/coursier/issues/650 + val dep = subRes.rootDependencies.head + val (_, proj) = subRes.projectCache(dep.moduleVersion) + val mod = ToSbt.moduleId(dep, proj.properties.toMap) + val (main, other) = reports.partition { r => + r.module.organization == mod.organization && + r.module.name == mod.name && + r.module.crossVersion == mod.crossVersion + } + main.toVector ++ other.toVector + } else + reports.toVector + sbt.ConfigurationReport( ConfigRef(config), - reports.toVector, + reports0, Vector() ) } From b25fed1ae5ad220397234d2b45e600122d6b7d42 Mon Sep 17 00:00:00 2001 From: Alexandre Archambault Date: Wed, 20 Sep 2017 00:12:21 +0200 Subject: [PATCH 3/3] Fix flaky test --- tests/shared/src/test/scala/coursier/test/CentralTests.scala | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/tests/shared/src/test/scala/coursier/test/CentralTests.scala b/tests/shared/src/test/scala/coursier/test/CentralTests.scala index 735e8d092..fd3e2c5d2 100644 --- a/tests/shared/src/test/scala/coursier/test/CentralTests.scala +++ b/tests/shared/src/test/scala/coursier/test/CentralTests.scala @@ -774,7 +774,10 @@ abstract class CentralTests extends TestSuite { val mod = Module("org.webjars.bower", "dgrid") val ver = "1.0.0" - * - resolutionCheck(mod, ver) + * - { + if (isActualCentral) // if false, the tests rely on things straight from Central, which can be updated sometimes… + resolutionCheck(mod, ver) + } } 'dependencyManagementScopeOverriding - {