From 2d31681220dae276db5cd976950e3f1836fdb0f3 Mon Sep 17 00:00:00 2001 From: Miles Sabin Date: Fri, 19 Aug 2016 17:32:19 +0100 Subject: [PATCH] Explicit list of artifacts for Scala binary version check. Fixes #2701 --- ivy/src/main/scala/sbt/IvyScala.scala | 6 +++--- .../scala-organization-version-check/build.sbt | 18 ++++++++++++++++++ .../scala-organization-version-check/test | 3 +++ 3 files changed, 24 insertions(+), 3 deletions(-) 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/ivy/src/main/scala/sbt/IvyScala.scala b/ivy/src/main/scala/sbt/IvyScala.scala index c3baaa03b..8bf8cb780 100644 --- a/ivy/src/main/scala/sbt/IvyScala.scala +++ b/ivy/src/main/scala/sbt/IvyScala.scala @@ -20,6 +20,7 @@ object ScalaArtifacts { val ReflectID = "scala-reflect" val ActorsID = "scala-actors" val ScalapID = "scalap" + val Artifacts = Seq(LibraryID, CompilerID, ReflectID, ActorsID, ScalapID) val DottyIDPrefix = "dotty" def dottyID(binaryVersion: String): String = s"${DottyIDPrefix}_${binaryVersion}" @@ -102,11 +103,10 @@ private object IvyScala { val id = dep.getDependencyRevisionId val depBinaryVersion = CrossVersion.binaryScalaVersion(id.getRevision) def isScalaLangOrg = id.getOrganisation == scalaOrganization - def isNotScalaActorsMigration = !(id.getName startsWith "scala-actors-migration") // Exception to the rule: sbt/sbt#1818 - def isNotScalaPickling = !(id.getName startsWith "scala-pickling") // Exception to the rule: sbt/sbt#1899 + def isScalaArtifact = Artifacts.contains(id.getName) def hasBinVerMismatch = depBinaryVersion != scalaBinaryVersion def matchesOneOfTheConfigs = dep.getModuleConfigurations.exists(configSet) - val mismatched = isScalaLangOrg && isNotScalaActorsMigration && isNotScalaPickling && hasBinVerMismatch && matchesOneOfTheConfigs + val mismatched = isScalaLangOrg && isScalaArtifact && hasBinVerMismatch && matchesOneOfTheConfigs if (mismatched) Some("Binary version (" + depBinaryVersion + ") for dependency " + id + "\n\tin " + module.getModuleRevisionId + 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..2658a5506 --- /dev/null +++ b/sbt/src/sbt-test/dependency-management/scala-organization-version-check/build.sbt @@ -0,0 +1,18 @@ +scalaOrganization := "org.other" + +scalaVersion := "2.11.8" + +libraryDependencies ++= Seq( + "org.other" %% "thing" % "1.2.3" +) + +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_2.11;1.2.3" + def containsWarn2 = last contains "differs from Scala binary version in project (2.11)." + if (containsWarn1) sys error "thing should be exempted from the Scala binary version check" + if (containsWarn2) 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