diff --git a/main/src/main/scala/sbt/Defaults.scala b/main/src/main/scala/sbt/Defaults.scala index d2153cc41..8470083f9 100755 --- a/main/src/main/scala/sbt/Defaults.scala +++ b/main/src/main/scala/sbt/Defaults.scala @@ -2961,7 +2961,7 @@ trait BuildExtra extends BuildCommon with DefExtra { */ def addSbtPlugin(dependency: ModuleID): Setting[Seq[ModuleID]] = libraryDependencies += { - val sbtV = (sbtBinaryVersion in update).value + val sbtV = (sbtBinaryVersion in pluginCrossBuild).value val scalaV = (scalaBinaryVersion in update).value sbtPluginExtra(dependency, sbtV, scalaV) } diff --git a/notes/0.13.17/addSbtPlugin-cross.markdown b/notes/0.13.17/addSbtPlugin-cross.markdown new file mode 100644 index 000000000..aba7194a4 --- /dev/null +++ b/notes/0.13.17/addSbtPlugin-cross.markdown @@ -0,0 +1,7 @@ +### Bug fixes + +- Fixes `addSbtPlugin` to use the correct version of sbt. [#3393][]/[#3397][] by [@dwijnand][] + + [#3393]: https://github.com/sbt/sbt/issues/3393 + [#3397]: https://github.com/sbt/sbt/pull/3397 + [@dwijnand]: http://github.com/dwijnand diff --git a/sbt/src/sbt-test/project/cross-plugins-defaults/build.sbt b/sbt/src/sbt-test/project/cross-plugins-defaults/build.sbt index 8bd47a1e2..b1d361b5a 100644 --- a/sbt/src/sbt-test/project/cross-plugins-defaults/build.sbt +++ b/sbt/src/sbt-test/project/cross-plugins-defaults/build.sbt @@ -4,39 +4,38 @@ val buildCrossList = List("2.10.6", "2.11.11", "2.12.2") scalaVersion in ThisBuild := "2.12.2" crossScalaVersions in ThisBuild := buildCrossList +addSbtPlugin("com.eed3si9n" % "sbt-buildinfo" % "0.7.0") + lazy val root = (project in file(".")) .settings( sbtPlugin := true, - TaskKey[Unit]("check") := { - val crossV = (sbtVersion in pluginCrossBuild).value - val sv = projectID.value.extraAttributes("e:scalaVersion") - assert(sbtVersion.value startsWith baseSbt, s"Wrong sbt version: ${sbtVersion.value}") - assert(sv == "2.12", s"Wrong e:scalaVersion: $sv") - assert(scalaBinaryVersion.value == "2.12", s"Wrong Scala binary version: ${scalaBinaryVersion.value}") - assert(crossV startsWith "1.0.", s"Wrong `sbtVersion in pluginCrossBuild`: $crossV") - - // crossScalaVersions in app should not be affected - val appCrossScalaVersions = (crossScalaVersions in app).value.toList - val appScalaVersion = (scalaVersion in app).value - assert(appCrossScalaVersions == buildCrossList, s"Wrong `crossScalaVersions in app`: $appCrossScalaVersions") - assert(appScalaVersion startsWith "2.12", s"Wrong `scalaVersion in app`: $appScalaVersion") - }, - - TaskKey[Unit]("check2") := { - val crossV = (sbtVersion in pluginCrossBuild).value - val sv = projectID.value.extraAttributes("e:scalaVersion") - assert(sbtVersion.value startsWith baseSbt, s"Wrong sbt version: ${sbtVersion.value}") - assert(sv == "2.10", s"Wrong e:scalaVersion: $sv") - assert(scalaBinaryVersion.value == "2.10", s"Wrong Scala binary version: ${scalaBinaryVersion.value}") - assert(crossV startsWith "0.13", s"Wrong `sbtVersion in pluginCrossBuild`: $crossV") - - // ^^ should not affect app's crossScalaVersions - val appCrossScalaVersions = (crossScalaVersions in app).value.toList - val appScalaVersion = (scalaVersion in app).value - assert(appCrossScalaVersions == buildCrossList, s"Wrong `crossScalaVersions in app`: $appCrossScalaVersions") - assert(appScalaVersion startsWith "2.12", s"Wrong `scalaVersion in app`: $appScalaVersion") - } + TaskKey[Unit]("check") := mkCheck("2.12", "1.0").value, + TaskKey[Unit]("check2") := mkCheck("2.10", "0.13").value ) lazy val app = (project in file("app")) + +def mkCheck(scalaBinV: String, sbtBinVer: String) = Def task { + val crossV = (sbtVersion in pluginCrossBuild).value + val crossBinV = (sbtBinaryVersion in pluginCrossBuild).value + val sv = projectID.value.extraAttributes("e:scalaVersion") + assert(sbtVersion.value startsWith baseSbt, s"Wrong sbt version: ${sbtVersion.value}") + assert(sv == scalaBinV, s"Wrong e:scalaVersion: $sv") + assert(scalaBinaryVersion.value == scalaBinV, s"Wrong Scala binary version: ${scalaBinaryVersion.value}") + assert(crossV startsWith sbtBinVer, s"Wrong `sbtVersion in pluginCrossBuild`: $crossV") + + val ur = update.value + val cr = ur.configuration(Compile).get + val mr = cr.modules.find(mr => mr.module.organization == "com.eed3si9n" && mr.module.name == "sbt-buildinfo").get + val plugSv = mr.module.extraAttributes("scalaVersion") + val plugSbtV = mr.module.extraAttributes("sbtVersion") + assert(plugSv == scalaBinV, s"Wrong plugin scalaVersion: $plugSv") + assert(plugSbtV == sbtBinVer, s"Wrong plugin scalaVersion: $sbtBinVer") + + // crossScalaVersions in app should not be affected, per se or after ^^ + val appCrossScalaVersions = (crossScalaVersions in app).value.toList + val appScalaVersion = (scalaVersion in app).value + assert(appCrossScalaVersions == buildCrossList, s"Wrong `crossScalaVersions in app`: $appCrossScalaVersions") + assert(appScalaVersion startsWith "2.12", s"Wrong `scalaVersion in app`: $appScalaVersion") +}