diff --git a/src/main/java/org/springframework/data/release/dependency/DependencyVersion.java b/src/main/java/org/springframework/data/release/dependency/DependencyVersion.java index bc7e7e2..f1a1252 100644 --- a/src/main/java/org/springframework/data/release/dependency/DependencyVersion.java +++ b/src/main/java/org/springframework/data/release/dependency/DependencyVersion.java @@ -37,7 +37,7 @@ import org.springframework.data.release.model.Version; @Value class DependencyVersion implements Comparable { - private static Pattern VERSION = Pattern.compile("((?>(?>\\d+)[\\.]?)+)(-[a-zA-Z]+)?(\\d+)?"); + private static Pattern VERSION = Pattern.compile("((?>(?>\\d+)[\\.]?)+)((?>-)?[a-zA-Z]+)?(\\d+)?"); private static Pattern NAME_VERSION = Pattern.compile("([A-Za-z]+)-(RELEASE|SR(\\d+)|SNAPSHOT|BUILD-SNAPSHOT)"); private static Comparator VERSION_COMPARATOR = Comparator.comparing(DependencyVersion::getVersion) @@ -47,6 +47,7 @@ class DependencyVersion implements Comparable { if (o1.getModifier().isEmpty() && !o2.getModifier().isEmpty()) { return 1; } + if (!o1.getModifier().isEmpty() && o2.getModifier().isEmpty()) { return -1; } @@ -91,6 +92,9 @@ class DependencyVersion implements Comparable { String modifier; String counter; String versionString = versionMatcher.group(1); + + versionString = versionString.endsWith(".") ? versionString.substring(0, versionString.length() - 1) + : versionString; try { version = Version.parse(versionString); } catch (RuntimeException e) { diff --git a/src/test/java/org/springframework/data/release/dependency/DependencyVersionUnitTests.java b/src/test/java/org/springframework/data/release/dependency/DependencyVersionUnitTests.java index 44d981e..af9e02f 100644 --- a/src/test/java/org/springframework/data/release/dependency/DependencyVersionUnitTests.java +++ b/src/test/java/org/springframework/data/release/dependency/DependencyVersionUnitTests.java @@ -42,6 +42,19 @@ class DependencyVersionUnitTests { assertThat(sorted).containsExactly("1.0.0-m1", "1.0.0-m2", "1.0.0-rc1", "1.0.0"); } + @Test + void shouldConsiderSpringVersionOrder() { + + List sorted = Stream.of("1.0.0", "1.0.0.M1", "1.0.0.RC1", "1.0.0.M2") // + .map(DependencyVersion::of) // + .sorted() // + .map(DependencyVersion::getIdentifier) // + .collect(Collectors.toList()); + + System.out.println(sorted); + assertThat(sorted).containsExactly("1.0.0.M1", "1.0.0.M2", "1.0.0.RC1", "1.0.0"); + } + @Test void shouldConsiderReleaseTrainSortOrder() {