From 0ce5142b17175bca120de8f0ec00c3df5537f701 Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Sat, 15 May 2021 14:12:46 -0400 Subject: [PATCH] Apply version number parsing fix Ref #377 Apply the dotted-prerelease tag to SemComparator "A pre-release version MAY be denoted by appending a hyphen and a series of dot separated identifiers immediately following the patch version." --- .../SemanticSelectorExtra.scala | 2 +- .../sbt/librarymanagement/VersionNumber.scala | 2 +- .../SemanticSelectorSpec.scala | 17 ++++++++++++++++- 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/core/src/main/scala/sbt/internal/librarymanagement/SemanticSelectorExtra.scala b/core/src/main/scala/sbt/internal/librarymanagement/SemanticSelectorExtra.scala index f3f28cf7a..8fafce2a0 100644 --- a/core/src/main/scala/sbt/internal/librarymanagement/SemanticSelectorExtra.scala +++ b/core/src/main/scala/sbt/internal/librarymanagement/SemanticSelectorExtra.scala @@ -148,7 +148,7 @@ private[librarymanagement] abstract class SemComparatorFunctions { (?:\.(\d+|[xX*]) (?:\.(\d+|[xX*]))? )? - )((?:-\w+)*)$ + )((?:-\w+(?:\.\w+)*)*)$ """.r protected def parse(comparator: String): SemComparator = { comparator match { diff --git a/core/src/main/scala/sbt/librarymanagement/VersionNumber.scala b/core/src/main/scala/sbt/librarymanagement/VersionNumber.scala index 90897351d..8ce15c72d 100644 --- a/core/src/main/scala/sbt/librarymanagement/VersionNumber.scala +++ b/core/src/main/scala/sbt/librarymanagement/VersionNumber.scala @@ -66,7 +66,7 @@ object VersionNumber { def splitDash(s: String) = splitOn(s, '-') def splitPlus(s: String) = splitOn(s, '+') map ("+" + _) - val TaggedVersion = """(\d{1,14})([\.\d{1,14}]*)((?:-[\w\.]+)*)((?:\+.+)*)""".r + val TaggedVersion = """(\d{1,14})([\.\d{1,14}]*)((?:-\w+(?:\.\w+)*)*)((?:\+.+)*)""".r val NonSpaceString = """(\S+)""".r s match { diff --git a/core/src/test/scala/sbt/librarymanagement/SemanticSelectorSpec.scala b/core/src/test/scala/sbt/librarymanagement/SemanticSelectorSpec.scala index 411554260..cce9b4ff1 100644 --- a/core/src/test/scala/sbt/librarymanagement/SemanticSelectorSpec.scala +++ b/core/src/test/scala/sbt/librarymanagement/SemanticSelectorSpec.scala @@ -75,6 +75,7 @@ class SemanticSelectorSpec extends AnyFreeSpec with Matchers { semsel(">=1.2.3") { sel => assertMatches(sel, "1.2.4-beta") + assertMatches(sel, "1.2.4-beta.1") assertMatches(sel, "1.2.3") assertMatches(sel, "1.3") assertMatches(sel, "2") @@ -306,6 +307,21 @@ class SemanticSelectorSpec extends AnyFreeSpec with Matchers { assertNotMatches(sel, "1.2.2") } + semsel(">=1.2.3-beta.5") { sel => + assertMatches(sel, "1.3-alpha") + assertMatches(sel, "1.2.3") + assertMatches(sel, "1.2.3-beta.5") + assertMatches(sel, "1.2.3-beta.6-3") + assertMatches(sel, "1.2.3-beta.7") + assertMatches(sel, "1.2.3-beta.gamma") + assertMatches(sel, "1.2.4") + assertMatches(sel, "1.3") + assertNotMatches(sel, "1.2.3-alpha-3") + assertNotMatches(sel, "1.2.3-beta-1") + assertNotMatches(sel, "1.2.3-beta") + assertNotMatches(sel, "1.2.2") + } + Seq( // invalid operator "~1.2.3", @@ -339,7 +355,6 @@ class SemanticSelectorSpec extends AnyFreeSpec with Matchers { "1.0.0 - 2.0.0 || - 2.0.0", "1.0.0- 2.0.0", "1.0.0 -2.0.0", - "1.0.0-2.0.0", "-", // minor and patch versions are required for pre-release version "1.2-alpha-beta",