From 56e843960bb0c7ed8ecbf3f4eb599daca3950cb4 Mon Sep 17 00:00:00 2001 From: Miles Sabin Date: Mon, 22 Aug 2016 11:03:27 +0100 Subject: [PATCH] Configurable explicit list of artifacts for Scala binary version check --- main/src/main/scala/sbt/Defaults.scala | 5 +++- main/src/main/scala/sbt/Keys.scala | 1 + .../build.sbt | 23 +++++++++++++++++++ .../scala-organization-version-check/test | 3 +++ 4 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 sbt/src/sbt-test/dependency-management/scala-organization-version-check/build.sbt create mode 100644 sbt/src/sbt-test/dependency-management/scala-organization-version-check/test diff --git a/main/src/main/scala/sbt/Defaults.scala b/main/src/main/scala/sbt/Defaults.scala index c6b98d0d9..155ce1137 100755 --- a/main/src/main/scala/sbt/Defaults.scala +++ b/main/src/main/scala/sbt/Defaults.scala @@ -155,6 +155,7 @@ object Defaults extends BuildCommon { retrieveManagedSync :== false, configurationsToRetrieve :== None, scalaOrganization :== ScalaArtifacts.Organization, + scalaArtifacts :== ScalaArtifacts.Artifacts, sbtResolver := { if (sbtVersion.value endsWith "-SNAPSHOT") Classpaths.sbtIvySnapshots else Classpaths.typesafeReleases }, crossVersion :== Disabled(), buildDependencies := Classpaths.constructBuildDependencies.value, @@ -1431,7 +1432,9 @@ object Classpaths { (scalaVersion in update).value, (scalaBinaryVersion in update).value, Vector.empty, filterImplicit = false, checkExplicit = true, overrideScalaVersion = true - ).withScalaOrganization(scalaOrganization.value)) + ) + .withScalaOrganization(scalaOrganization.value) + .withScalaArtifacts(scalaArtifacts.value)) } )).value, artifactPath in makePom := artifactPathSetting(artifact in makePom).value, diff --git a/main/src/main/scala/sbt/Keys.scala b/main/src/main/scala/sbt/Keys.scala index 5a5f10f5c..3d498e4f4 100644 --- a/main/src/main/scala/sbt/Keys.scala +++ b/main/src/main/scala/sbt/Keys.scala @@ -194,6 +194,7 @@ object Keys { val printWarnings = TaskKey[Unit]("print-warnings", "Shows warnings from compilation, including ones that weren't printed initially.", BPlusTask) val fileInputOptions = SettingKey[Seq[String]]("file-input-options", "Options that take file input, which may invalidate the cache.", CSetting) val scalaCompilerBridgeSource = SettingKey[ModuleID]("scala-compiler-bridge-source", "Configures the module ID of the sources of the compiler bridge.", CSetting) + val scalaArtifacts = SettingKey[Vector[String]]("scala-artifacts", "Configures the list of artifacts which should match the Scala binary version", CSetting) val clean = TaskKey[Unit]("clean", "Deletes files produced by the build, such as generated sources, compiled classes, and task caches.", APlusTask) val console = TaskKey[Unit]("console", "Starts the Scala interpreter with the project classes on the classpath.", APlusTask) diff --git a/sbt/src/sbt-test/dependency-management/scala-organization-version-check/build.sbt b/sbt/src/sbt-test/dependency-management/scala-organization-version-check/build.sbt new file mode 100644 index 000000000..efb198677 --- /dev/null +++ b/sbt/src/sbt-test/dependency-management/scala-organization-version-check/build.sbt @@ -0,0 +1,23 @@ +scalaOrganization := "org.other" + +scalaArtifacts += "thing" + +scalaVersion := "2.11.8" + +libraryDependencies ++= Seq( + "org.other" % "thing" % "1.2.3", + "org.other" %% "wotsit" % "4.5.6" +) + +lazy val check = taskKey[Unit]("Runs the check") + +check := { + val lastLog = BuiltinCommands lastLogFile state.value + val last = IO read lastLog.get + def containsWarn1 = last contains "Binary version (1.2.3) for dependency org.other#thing;1.2.3" + def containsWarn2 = last contains "Binary version (4.5.6) for dependency org.other#wotsit_2.11;4.5.6" + def containsWarn3 = last contains "differs from Scala binary version in project (2.11)." + if (!containsWarn1) sys error "thing should not be exempted from the Scala binary version check" + if (containsWarn2) sys error "wotsit should be exempted from the Scala binary version check" + if (!containsWarn3) sys error "Binary version check failed" +} diff --git a/sbt/src/sbt-test/dependency-management/scala-organization-version-check/test b/sbt/src/sbt-test/dependency-management/scala-organization-version-check/test new file mode 100644 index 000000000..760ba6309 --- /dev/null +++ b/sbt/src/sbt-test/dependency-management/scala-organization-version-check/test @@ -0,0 +1,3 @@ +> clean + +> check