From aac1edb4262af5725411d06fabbacc1cfb853fed Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Sun, 20 Dec 2020 19:34:03 -0500 Subject: [PATCH] Add Strict and Always support --- .../librarymanagement/VersionSchemes.scala | 4 +++- .../librarymanagement/EvictionWarning.scala | 20 +++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/core/src/main/scala/sbt/internal/librarymanagement/VersionSchemes.scala b/core/src/main/scala/sbt/internal/librarymanagement/VersionSchemes.scala index 7e2179f34..b8a5b1293 100644 --- a/core/src/main/scala/sbt/internal/librarymanagement/VersionSchemes.scala +++ b/core/src/main/scala/sbt/internal/librarymanagement/VersionSchemes.scala @@ -17,10 +17,12 @@ private[sbt] object VersionSchemes { final val EarlySemVer = "early-semver" final val SemVerSpec = "semver-spec" final val PackVer = "pvp" + final val Strict = "strict" + final val Always = "always" def validateScheme(value: String): Unit = value match { - case EarlySemVer | SemVerSpec | PackVer => () + case EarlySemVer | SemVerSpec | PackVer | Strict | Always => () case "semver" => sys.error( s"""'semver' is ambiguous. diff --git a/core/src/main/scala/sbt/librarymanagement/EvictionWarning.scala b/core/src/main/scala/sbt/librarymanagement/EvictionWarning.scala index 754186fcd..e0519d981 100644 --- a/core/src/main/scala/sbt/librarymanagement/EvictionWarning.scala +++ b/core/src/main/scala/sbt/librarymanagement/EvictionWarning.scala @@ -161,10 +161,26 @@ object EvictionWarningOptions { } } + lazy val guessStrict + : PartialFunction[(ModuleID, Option[ModuleID], Option[ScalaModuleInfo]), Boolean] = { + case (m1, Some(m2), _) => + (m1.revision, m2.revision) match { + case (VersionNumber(ns1, ts1, es1), VersionNumber(ns2, ts2, es2)) => + VersionNumber.Strict + .isCompatible(VersionNumber(ns1, ts1, es1), VersionNumber(ns2, ts2, es2)) + case _ => false + } + } + lazy val guessFalse : PartialFunction[(ModuleID, Option[ModuleID], Option[ScalaModuleInfo]), Boolean] = { case (_, _, _) => false } + + lazy val guessTrue + : PartialFunction[(ModuleID, Option[ModuleID], Option[ScalaModuleInfo]), Boolean] = { + case (_, _, _) => true + } } final class EvictionPair private[sbt] ( @@ -325,6 +341,10 @@ object EvictionWarning { }) val schemeOpt = VersionSchemes.extractFromExtraAttributes(extraAttributes) val f = (winnerOpt, schemeOpt) match { + case (Some(_), Some(VersionSchemes.Always)) => + EvictionWarningOptions.guessTrue + case (Some(_), Some(VersionSchemes.Strict)) => + EvictionWarningOptions.guessStrict case (Some(_), Some(VersionSchemes.EarlySemVer)) => EvictionWarningOptions.guessEarlySemVer case (Some(_), Some(VersionSchemes.SemVerSpec)) =>