Skip to content

Commit d5e5412

Browse files
committed
Add bomr support for 5 component version numbers
Closes gh-29928
1 parent d652491 commit d5e5412

File tree

4 files changed

+42
-13
lines changed

4 files changed

+42
-13
lines changed

buildSrc/src/main/java/org/springframework/boot/build/bom/bomr/version/DependencyVersion.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ public interface DependencyVersion extends Comparable<DependencyVersion> {
5555
static DependencyVersion parse(String version) {
5656
List<Function<String, DependencyVersion>> parsers = Arrays.asList(CalendarVersionDependencyVersion::parse,
5757
ArtifactVersionDependencyVersion::parse, ReleaseTrainDependencyVersion::parse,
58-
NumericQualifierDependencyVersion::parse, CombinedPatchAndQualifierDependencyVersion::parse,
58+
MultipleComponentsDependencyVersion::parse, CombinedPatchAndQualifierDependencyVersion::parse,
5959
LeadingZeroesDependencyVersion::parse, UnstructuredDependencyVersion::parse);
6060
for (Function<String, DependencyVersion> parser : parsers) {
6161
DependencyVersion result = parser.apply(version);
Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -21,16 +21,18 @@
2121
import org.apache.maven.artifact.versioning.DefaultArtifactVersion;
2222

2323
/**
24-
* A fallback {@link DependencyVersion} to handle versions with four components that
25-
* cannot be handled by {@link ArtifactVersion} because the fourth component is numeric.
24+
* A fallback {@link DependencyVersion} to handle versions with four or five components
25+
* that cannot be handled by {@link ArtifactVersion} because the fourth component is
26+
* numeric.
2627
*
2728
* @author Andy Wilkinson
29+
* @author Moritz Halbritter
2830
*/
29-
final class NumericQualifierDependencyVersion extends ArtifactVersionDependencyVersion {
31+
final class MultipleComponentsDependencyVersion extends ArtifactVersionDependencyVersion {
3032

3133
private final String original;
3234

33-
private NumericQualifierDependencyVersion(ArtifactVersion artifactVersion, String original) {
35+
private MultipleComponentsDependencyVersion(ArtifactVersion artifactVersion, String original) {
3436
super(artifactVersion, new ComparableVersion(original));
3537
this.original = original;
3638
}
@@ -40,15 +42,15 @@ public String toString() {
4042
return this.original;
4143
}
4244

43-
static NumericQualifierDependencyVersion parse(String input) {
45+
static MultipleComponentsDependencyVersion parse(String input) {
4446
String[] components = input.split("\\.");
45-
if (components.length == 4) {
47+
if (components.length == 4 || components.length == 5) {
4648
ArtifactVersion artifactVersion = new DefaultArtifactVersion(
4749
components[0] + "." + components[1] + "." + components[2]);
4850
if (artifactVersion.getQualifier() != null && artifactVersion.getQualifier().equals(input)) {
4951
return null;
5052
}
51-
return new NumericQualifierDependencyVersion(artifactVersion, input);
53+
return new MultipleComponentsDependencyVersion(artifactVersion, input);
5254
}
5355
return null;
5456
}

buildSrc/src/test/java/org/springframework/boot/build/bom/bomr/version/DependencyVersionTests.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
* Tests for {@link DependencyVersion}.
2525
*
2626
* @author Andy Wilkinson
27+
* @author Moritz Halbritter
2728
*/
2829
class DependencyVersionTests {
2930

@@ -39,7 +40,12 @@ void parseWhenReleaseTrainShouldReturnReleaseTrainDependencyVersion() {
3940

4041
@Test
4142
void parseWhenMavenLikeVersionWithNumericQualifierShouldReturnNumericQualifierDependencyVersion() {
42-
assertThat(DependencyVersion.parse("1.2.3.4")).isInstanceOf(NumericQualifierDependencyVersion.class);
43+
assertThat(DependencyVersion.parse("1.2.3.4")).isInstanceOf(MultipleComponentsDependencyVersion.class);
44+
}
45+
46+
@Test
47+
void parseWhe5ComponentsShouldReturnNumericQualifierDependencyVersion() {
48+
assertThat(DependencyVersion.parse("1.2.3.4.5")).isInstanceOf(MultipleComponentsDependencyVersion.class);
4349
}
4450

4551
@Test
Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,12 @@
2121
import static org.assertj.core.api.Assertions.assertThat;
2222

2323
/**
24-
* Tests for {@link NumericQualifierDependencyVersion}.
24+
* Tests for {@link MultipleComponentsDependencyVersion}.
2525
*
2626
* @author Andy Wilkinson
27+
* @author Moritz Halbritter
2728
*/
28-
class NumericQualifierDependencyVersionTests {
29+
class MultipleComponentsDependencyVersionTests {
2930

3031
@Test
3132
void isNewerThanOnVersionWithNumericQualifierWhenInputHasNoQualifierShouldReturnTrue() {
@@ -47,8 +48,28 @@ void isNewerThanOnVersionWithNumericQualifierWhenInputHasSameQualifierShouldRetu
4748
assertThat(version("2.9.9.20190806").isNewerThan(version("2.9.9.20190806"))).isFalse();
4849
}
4950

50-
private NumericQualifierDependencyVersion version(String version) {
51-
return NumericQualifierDependencyVersion.parse(version);
51+
@Test
52+
void isNewerThanWorksWith5Components() {
53+
assertThat(version("21.4.0.0.1").isNewerThan(version("21.1.0.0"))).isTrue();
54+
}
55+
56+
@Test
57+
void isNewerThanWorksWith5ComponentsAndLastComponentIsConsidered() {
58+
assertThat(version("21.1.0.0.1").isNewerThan(version("21.1.0.0"))).isTrue();
59+
}
60+
61+
@Test
62+
void isSameMajorAndNewerThanWorksWith5Components() {
63+
assertThat(version("21.4.0.0.1").isSameMajorAndNewerThan(version("21.1.0.0"))).isTrue();
64+
}
65+
66+
@Test
67+
void isSameMinorAndNewerThanWorksWith5Components() {
68+
assertThat(version("21.4.0.0.1").isSameMinorAndNewerThan(version("21.1.0.0"))).isFalse();
69+
}
70+
71+
private MultipleComponentsDependencyVersion version(String version) {
72+
return MultipleComponentsDependencyVersion.parse(version);
5273
}
5374

5475
}

0 commit comments

Comments
 (0)