Handle the old version format when forcing the use of snapshots

This commit is contained in:
Andy Wilkinson
2023-11-20 11:29:38 +00:00
parent aa6da6945e
commit 35968fb2f4
2 changed files with 64 additions and 21 deletions

View File

@@ -27,9 +27,14 @@ import org.gradle.api.artifacts.ResolutionStrategy;
* dependency's current version:
* <ul>
* <li>{@code x.y.z-SNAPSHOT} is used as-is</li>
* <li>{@code x.y.z} is changed to {@code x.y.z+1-SNAPSHOT}</li>
* <li>{@code x.y.z.BUILD-SNAPSHOT} is used as-is</li>
* <li>{@code x.y.z-Mn} is changed to {@code to x.y.z-SNAPSHOT}</li>
* <li>{@code x.y.z.Mn} is changed to {@code to x.y.z.BUILD-SNAPSHOT}</li>
* <li>{@code x.y.z-RCn} is changed to {@code to x.y.z-SNAPSHOT}</li>
* <li>{@code x.y.z.RCn} is changed to {@code to x.y.z.BUILD-SNAPSHOT}</li>
* <li>{@code x.y.z} is changed to {@code x.y.z+1-SNAPSHOT}</li>
* <li>{@code x.y.z.RELEASE} is changed to {@code x.y.z+1.BUILD-SNAPSHOT}</li>
*
* </ul>
*
* @author Marcus Hert Da Coregio
@@ -55,6 +60,10 @@ final class UseSnapshots implements Action<DependencyResolveDetails> {
if (version.endsWith("-SNAPSHOT")) {
return version;
}
boolean oldVersionFormat = version.matches(".*\\.(((M|RC)\\d+)|RELEASE)$");
if (oldVersionFormat) {
return buildSnapshotOf(version);
}
boolean isMilestone = version.matches(".*-(M|RC)\\d+$");
String rawVersion = version.split("-")[0];
if (isMilestone) {
@@ -66,4 +75,16 @@ final class UseSnapshots implements Action<DependencyResolveDetails> {
return String.join(".", parts);
}
private String buildSnapshotOf(String version) {
boolean isMilestone = !version.endsWith(".RELEASE");
String rawVersion = version.substring(0, version.lastIndexOf("."));
if (isMilestone) {
return rawVersion + ".BUILD-SNAPSHOT";
}
String[] parts = rawVersion.split("\\.");
int nextPatchVersion = Integer.parseInt(parts[2]) + 1;
parts[2] = nextPatchVersion + ".BUILD-SNAPSHOT";
return String.join(".", parts);
}
}

View File

@@ -19,6 +19,8 @@ package org.springframework.aot.gradle;
import org.gradle.api.artifacts.DependencyResolveDetails;
import org.gradle.api.artifacts.ModuleVersionSelector;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;
import static org.mockito.BDDMockito.given;
import static org.mockito.BDDMockito.then;
@@ -33,34 +35,54 @@ class UseSnapshotsTests {
private final UseSnapshots useSnapshots = new UseSnapshots();
@Test
void snapshotVersionIsUsedAsIs() {
DependencyResolveDetails dependency = dependency("org.springframework", "6.0.12-SNAPSHOT");
then(dependency).should().useVersion("6.0.12-SNAPSHOT");
@ParameterizedTest
@CsvSource(textBlock = """
6.0.12-SNAPSHOT, 6.0.12-SNAPSHOT
5.2.26.BUILD-SNAPSHOT, 5.2.26.BUILD-SNAPSHOT
""")
void snapshotVersionIsUsedAsIs(String version, String derivedVersion) {
DependencyResolveDetails dependency = dependency("org.springframework", version);
then(dependency).should().useVersion(derivedVersion);
}
@Test
void milestoneUsesSnapshotOfSameVersion() {
DependencyResolveDetails dependency = dependency("org.springframework", "6.1.0-M2");
then(dependency).should().useVersion("6.1.0-SNAPSHOT");
@ParameterizedTest
@CsvSource(textBlock = """
6.1.0-M2, 6.1.0-SNAPSHOT
5.2.0.M2, 5.2.0.BUILD-SNAPSHOT
""")
void milestoneUsesSnapshotOfSameVersion(String version, String derivedVersion) {
DependencyResolveDetails dependency = dependency("org.springframework", version);
then(dependency).should().useVersion(derivedVersion);
}
@Test
void releaseCandidateUsesSnapshotOfSameVersion() {
DependencyResolveDetails dependency = dependency("org.springframework", "6.1.0-RC2");
then(dependency).should().useVersion("6.1.0-SNAPSHOT");
@ParameterizedTest
@CsvSource(textBlock = """
6.1.0-RC1, 6.1.0-SNAPSHOT
5.2.0.RC1, 5.2.0.BUILD-SNAPSHOT
""")
void releaseCandidateUsesSnapshotOfSameVersion(String version, String derivedVersion) {
DependencyResolveDetails dependency = dependency("org.springframework", version);
then(dependency).should().useVersion(derivedVersion);
}
@Test
void gaReleaseUsesSnapshotOfNextPatch() {
DependencyResolveDetails dependency = dependency("org.springframework", "6.1.0");
then(dependency).should().useVersion("6.1.1-SNAPSHOT");
@ParameterizedTest
@CsvSource(textBlock = """
6.1.0, 6.1.1-SNAPSHOT
5.2.0.RELEASE, 5.2.1.BUILD-SNAPSHOT
""")
void gaReleaseUsesSnapshotOfNextPatch(String version, String derivedVersion) {
DependencyResolveDetails dependency = dependency("org.springframework", version);
then(dependency).should().useVersion(derivedVersion);
}
@Test
void maintenanceReleaseUsesSnapshotOfNextPatch() {
DependencyResolveDetails dependency = dependency("org.springframework", "6.1.3");
then(dependency).should().useVersion("6.1.4-SNAPSHOT");
@ParameterizedTest
@CsvSource(textBlock = """
6.1.1, 6.1.2-SNAPSHOT
5.2.1.RELEASE, 5.2.2.BUILD-SNAPSHOT
""")
void maintenanceReleaseUsesSnapshotOfNextPatch(String version, String derivedVersion) {
DependencyResolveDetails dependency = dependency("org.springframework", version);
then(dependency).should().useVersion(derivedVersion);
}
@Test