From 87a53986e3a8b4ba3122c125df48dfb6524bff54 Mon Sep 17 00:00:00 2001 From: Guillaume Martres Date: Fri, 28 Apr 2017 11:41:59 +0200 Subject: [PATCH] Fix default scalaBinaryVersion for Dotty Dotty is versioned as 0.*, but `CrossVersionUtil#binaryScalaVersion` will return the full version instead of just `major.minor` for all compiler versions < 2.10, add a special case for Dotty to avoid this. --- .../librarymanagement/cross/CrossVersionUtil.scala | 14 +++++++++++--- .../src/test/scala/CrossVersionTest.scala | 3 +++ 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/librarymanagement/src/main/scala/sbt/internal/librarymanagement/cross/CrossVersionUtil.scala b/librarymanagement/src/main/scala/sbt/internal/librarymanagement/cross/CrossVersionUtil.scala index 4ebc79ca0..cebe00ac5 100644 --- a/librarymanagement/src/main/scala/sbt/internal/librarymanagement/cross/CrossVersionUtil.scala +++ b/librarymanagement/src/main/scala/sbt/internal/librarymanagement/cross/CrossVersionUtil.scala @@ -8,7 +8,8 @@ object CrossVersionUtil { val noneString = "none" val disabledString = "disabled" val binaryString = "binary" - val TransitionScalaVersion = "2.10" + val TransitionDottyVersion = "" // Dotty always respects binary compatibility + val TransitionScalaVersion = "2.10" // ...but scalac doesn't until Scala 2.10 val TransitionSbtVersion = "0.12" def isFull(s: String): Boolean = (s == trueString) || (s == fullString) @@ -61,8 +62,15 @@ object CrossVersionUtil { case PartialVersion(major, minor) => Some((major.toInt, minor.toInt)) case _ => None } - def binaryScalaVersion(full: String): String = - binaryVersionWithApi(full, TransitionScalaVersion)(scalaApiVersion) + def binaryScalaVersion(full: String): String = { + val cutoff = + if (full.startsWith("0.")) + TransitionDottyVersion + else + TransitionScalaVersion + + binaryVersionWithApi(full, cutoff)(scalaApiVersion) + } def binarySbtVersion(full: String): String = binaryVersionWithApi(full, TransitionSbtVersion)(sbtApiVersion) private[sbt] def binaryVersion(full: String, cutoff: String): String = diff --git a/librarymanagement/src/test/scala/CrossVersionTest.scala b/librarymanagement/src/test/scala/CrossVersionTest.scala index d6e245dcd..835ad1058 100644 --- a/librarymanagement/src/test/scala/CrossVersionTest.scala +++ b/librarymanagement/src/test/scala/CrossVersionTest.scala @@ -117,6 +117,9 @@ class CrossVersionTest extends UnitSpec { it should "return binary Scala version for 2.20170314093845.0-87654321 as 2.20170314093845.0-87654321" in { CrossVersion.binaryScalaVersion("2.20170314093845.0-87654321") shouldBe "2.20170314093845.0-87654321" } + it should "return binary Scala version for Dotty 0.1.1 as 0.1" in { + CrossVersion.binaryScalaVersion("0.1.1") shouldBe "0.1" + } it should "return patch Scala version for 2.11.8 as 2.11.8" in { CrossVersion(CrossVersion.patch, "2.11.8", "dummy").map(_("artefact")) shouldBe Some( "artefact_2.11.8")