Fix false positive on sbt 1.x module eviction warnings

Fixes #187
This commit is contained in:
Eugene Yokota 2017-11-29 20:02:37 -05:00
parent 1ad2ff9295
commit 9c1566dfa1
2 changed files with 47 additions and 1 deletions

View File

@ -84,7 +84,8 @@ object EvictionWarningOptions {
) )
lazy val defaultGuess: Function1[(ModuleID, Option[ModuleID], Option[ScalaModuleInfo]), Boolean] = lazy val defaultGuess: Function1[(ModuleID, Option[ModuleID], Option[ScalaModuleInfo]), Boolean] =
guessSecondSegment orElse guessSemVer orElse guessFalse guessSbtOne orElse guessSecondSegment orElse guessSemVer orElse guessFalse
lazy val guessSecondSegment lazy val guessSecondSegment
: PartialFunction[(ModuleID, Option[ModuleID], Option[ScalaModuleInfo]), Boolean] = { : PartialFunction[(ModuleID, Option[ModuleID], Option[ScalaModuleInfo]), Boolean] = {
case (m1, Some(m2), Some(scalaModuleInfo)) case (m1, Some(m2), Some(scalaModuleInfo))
@ -98,6 +99,21 @@ object EvictionWarningOptions {
case _ => false case _ => false
} }
} }
lazy val guessSbtOne
: PartialFunction[(ModuleID, Option[ModuleID], Option[ScalaModuleInfo]), Boolean] = {
case (m1, Some(m2), Some(scalaModuleInfo))
if (m2.organization == "org.scala-sbt") &&
(m2.name.endsWith("_" + scalaModuleInfo.scalaFullVersion) ||
m2.name.endsWith("_" + scalaModuleInfo.scalaBinaryVersion)) =>
(m1.revision, m2.revision) match {
case (VersionNumber(ns1, ts1, es1), VersionNumber(ns2, ts2, es2)) =>
VersionNumber.SemVer
.isCompatible(VersionNumber(ns1, ts1, es1), VersionNumber(ns2, ts2, es2))
case _ => false
}
}
lazy val guessSemVer lazy val guessSemVer
: PartialFunction[(ModuleID, Option[ModuleID], Option[ScalaModuleInfo]), Boolean] = { : PartialFunction[(ModuleID, Option[ModuleID], Option[ScalaModuleInfo]), Boolean] = {
case (m1, Some(m2), _) => case (m1, Some(m2), _) =>
@ -108,6 +124,7 @@ object EvictionWarningOptions {
case _ => false case _ => false
} }
} }
lazy val guessFalse lazy val guessFalse
: PartialFunction[(ModuleID, Option[ModuleID], Option[ScalaModuleInfo]), Boolean] = { : PartialFunction[(ModuleID, Option[ModuleID], Option[ScalaModuleInfo]), Boolean] = {
case (_, _, _) => false case (_, _, _) => false

View File

@ -1,6 +1,9 @@
package sbt.librarymanagement package sbt.librarymanagement
import sbt.internal.librarymanagement.BaseIvySpecification import sbt.internal.librarymanagement.BaseIvySpecification
import sbt.internal.librarymanagement.cross.CrossVersionUtil
import sbt.librarymanagement.syntax._
import org.scalatest.Assertions._
class EvictionWarningSpec extends BaseIvySpecification { class EvictionWarningSpec extends BaseIvySpecification {
// This is a specification to check the eviction warnings // This is a specification to check the eviction warnings
@ -42,6 +45,22 @@ class EvictionWarningSpec extends BaseIvySpecification {
""" should "be detected as eviction" in scalaLibTransitiveWarn2() """ should "be detected as eviction" in scalaLibTransitiveWarn2()
it should "print out message about the eviction if it's enabled" in scalaLibTransitiveWarn3() it should "print out message about the eviction if it's enabled" in scalaLibTransitiveWarn3()
"Comparing sbt 0.x" should "use Second Segment Variation semantics" in {
val m1 = "org.scala-sbt" % "util-logging" % "0.13.16"
val m2 = "org.scala-sbt" % "util-logging" % "0.13.1"
assert(
EvictionWarningOptions
.defaultGuess((m1, Option(m2), Option(dummyScalaModuleInfo("2.10.6")))) == false)
}
"Comparing sbt 1.x" should "use Semantic Versioning semantics" in {
val m1 = "org.scala-sbt" % "util-logging_2.12" % "1.0.0"
val m2 = "org.scala-sbt" % "util-logging_2.12" % "1.1.0"
assert(
EvictionWarningOptions
.defaultGuess((m1, Option(m2), Option(dummyScalaModuleInfo("2.12.4")))))
}
def akkaActor214 = def akkaActor214 =
ModuleID("com.typesafe.akka", "akka-actor", "2.1.4").withConfigurations(Some("compile")) cross CrossVersion.binary ModuleID("com.typesafe.akka", "akka-actor", "2.1.4").withConfigurations(Some("compile")) cross CrossVersion.binary
def akkaActor230 = def akkaActor230 =
@ -265,4 +284,14 @@ class EvictionWarningSpec extends BaseIvySpecification {
"Run 'evicted' to see detailed eviction warnings" "Run 'evicted' to see detailed eviction warnings"
) )
} }
def dummyScalaModuleInfo(v: String): ScalaModuleInfo =
ScalaModuleInfo(
scalaFullVersion = v,
scalaBinaryVersion = CrossVersionUtil.binaryScalaVersion(v),
configurations = Vector.empty,
checkExplicit = true,
filterImplicit = false,
overrideScalaVersion = true
)
} }