From 0217dab41cc59d79bd53453e1733aeeffbf0f592 Mon Sep 17 00:00:00 2001 From: Mark Paluch Date: Tue, 16 Feb 2021 15:12:01 +0100 Subject: [PATCH] Use current version if the queried repository does not contain the current version. Closes #171. --- .../dependency/DependencyOperations.java | 28 +++++++++---------- .../release/dependency/DependencyVersion.java | 4 +++ .../DependencyOperationsUnitTests.java | 12 ++++---- 3 files changed, 23 insertions(+), 21 deletions(-) diff --git a/release-tools/src/main/java/org/springframework/data/release/dependency/DependencyOperations.java b/release-tools/src/main/java/org/springframework/data/release/dependency/DependencyOperations.java index 1454ee1..50414fb 100644 --- a/release-tools/src/main/java/org/springframework/data/release/dependency/DependencyOperations.java +++ b/release-tools/src/main/java/org/springframework/data/release/dependency/DependencyOperations.java @@ -99,8 +99,7 @@ public class DependencyOperations { DependencyVersion currentVersion = currentDependencies.get(dependency); List versions = getAvailableVersions(dependency); - DependencyUpgradeProposal proposal = getDependencyUpgradeProposal(iteration, dependency, currentVersion, - versions); + DependencyUpgradeProposal proposal = getDependencyUpgradeProposal(iteration, currentVersion, versions); proposals.put(dependency, proposal); }); @@ -234,19 +233,23 @@ public class DependencyOperations { } protected static DependencyUpgradeProposal getDependencyUpgradeProposal(Iteration iteration, - Dependency dependency, DependencyVersion currentVersion, List allVersions) { + DependencyVersion currentVersion, List allVersions) { - DependencyVersion latestMinor = findLatestMinor(iteration, dependency, currentVersion, allVersions); - DependencyVersion latest = findLatest(iteration, allVersions); + Optional latestMinor = findLatestMinor(iteration, currentVersion, allVersions); + Optional latest = findLatest(iteration, allVersions); List newerVersions = allVersions.stream() // .sorted() // .filter(it -> it.compareTo(currentVersion) > 0) // .collect(Collectors.toList()); - return DependencyUpgradeProposal.of(iteration, currentVersion, latestMinor, latest, newerVersions); + DependencyVersion latestToUse = latest.filter(it -> it.isNewer(currentVersion)).orElse(currentVersion); + + return DependencyUpgradeProposal.of(iteration, currentVersion, latestMinor.orElse(latestToUse), latestToUse, + newerVersions); } - private static DependencyVersion findLatest(Iteration iteration, List availableVersions) { + private static Optional findLatest(Iteration iteration, + List availableVersions) { return availableVersions.stream().filter(it -> { @@ -256,11 +259,10 @@ public class DependencyOperations { return true; - }).max(DependencyVersion::compareTo).orElseThrow( - () -> new IllegalArgumentException("Cannot determine new latest version from " + availableVersions)); + }).max(DependencyVersion::compareTo); } - private static DependencyVersion findLatestMinor(Iteration iteration, Dependency dependency, + private static Optional findLatestMinor(Iteration iteration, DependencyVersion currentVersion, List availableVersions) { @@ -285,11 +287,7 @@ public class DependencyOperations { return false; }) // - .max(DependencyVersion::compareTo) // - .orElseThrow( - () -> new IllegalArgumentException(String.format( - "Cannot determine new minor version from %s for %s (%s). Current version: %s", availableVersions, - dependency.getName(), dependency.getArtifactId(), currentVersion.getIdentifier()))); + .max(DependencyVersion::compareTo); } DependencyVersions getCurrentDependencies(Project project) { diff --git a/release-tools/src/main/java/org/springframework/data/release/dependency/DependencyVersion.java b/release-tools/src/main/java/org/springframework/data/release/dependency/DependencyVersion.java index 597cc31..67502dc 100644 --- a/release-tools/src/main/java/org/springframework/data/release/dependency/DependencyVersion.java +++ b/release-tools/src/main/java/org/springframework/data/release/dependency/DependencyVersion.java @@ -107,6 +107,10 @@ class DependencyVersion implements Comparable { throw new IllegalArgumentException(String.format("Cannot parse version identifier %s", identifier)); } + public boolean isNewer(DependencyVersion other) { + return this.compareTo(other) > 0; + } + @Override public int compareTo(DependencyVersion o) { diff --git a/release-tools/src/test/java/org/springframework/data/release/dependency/DependencyOperationsUnitTests.java b/release-tools/src/test/java/org/springframework/data/release/dependency/DependencyOperationsUnitTests.java index 8979dc3..c3629b7 100644 --- a/release-tools/src/test/java/org/springframework/data/release/dependency/DependencyOperationsUnitTests.java +++ b/release-tools/src/test/java/org/springframework/data/release/dependency/DependencyOperationsUnitTests.java @@ -41,7 +41,7 @@ class DependencyOperationsUnitTests { .collect(Collectors.toList()); DependencyUpgradeProposal proposal = DependencyOperations.getDependencyUpgradeProposal(Iteration.SR1, - Dependencies.JUNIT5, DependencyVersion.of("5.7.0"), availableVersions); + DependencyVersion.of("5.7.0"), availableVersions); assertThat(proposal.getCurrent()).isEqualTo(DependencyVersion.of("5.7.0")); assertThat(proposal.getLatestMinor()).isEqualTo(DependencyVersion.of("5.7.0")); @@ -58,7 +58,7 @@ class DependencyOperationsUnitTests { .collect(Collectors.toList()); DependencyUpgradeProposal proposal = DependencyOperations.getDependencyUpgradeProposal(Iteration.SR1, - Dependencies.JUNIT5, DependencyVersion.of("5.7.0"), availableVersions); + DependencyVersion.of("5.7.0"), availableVersions); assertThat(proposal.getCurrent()).isEqualTo(DependencyVersion.of("5.7.0")); assertThat(proposal.getLatestMinor()).isEqualTo(DependencyVersion.of("5.7.1")); @@ -75,7 +75,7 @@ class DependencyOperationsUnitTests { .collect(Collectors.toList()); DependencyUpgradeProposal proposal = DependencyOperations.getDependencyUpgradeProposal(Iteration.M1, - Dependencies.JUNIT5, DependencyVersion.of("5.7.0"), availableVersions); + DependencyVersion.of("5.7.0"), availableVersions); assertThat(proposal.getCurrent()).isEqualTo(DependencyVersion.of("5.7.0")); assertThat(proposal.getLatestMinor()).isEqualTo(DependencyVersion.of("5.7.1")); @@ -92,7 +92,7 @@ class DependencyOperationsUnitTests { .collect(Collectors.toList()); DependencyUpgradeProposal proposal = DependencyOperations.getDependencyUpgradeProposal(Iteration.SR1, - Dependencies.JUNIT5, DependencyVersion.of("5.7.1"), availableVersions); + DependencyVersion.of("5.7.1"), availableVersions); assertThat(proposal.getNewerVersions()).extracting(DependencyVersion::getIdentifier).containsExactly("5.7.2-M2", "5.7.2", "5.8.0"); @@ -107,7 +107,7 @@ class DependencyOperationsUnitTests { .collect(Collectors.toList()); DependencyUpgradeProposal proposal = DependencyOperations.getDependencyUpgradeProposal(Iteration.M1, - Dependencies.JUNIT5, DependencyVersion.of("5.7.1"), availableVersions); + DependencyVersion.of("5.7.1"), availableVersions); assertThat(proposal.getLatest()).extracting(DependencyVersion::getIdentifier).isEqualTo("5.7.2-M2"); assertThat(proposal.getProposal()).extracting(DependencyVersion::getIdentifier).isEqualTo("5.7.2-M2"); @@ -123,7 +123,7 @@ class DependencyOperationsUnitTests { .collect(Collectors.toList()); DependencyUpgradeProposal proposal = DependencyOperations.getDependencyUpgradeProposal(Iteration.RC1, - Dependencies.JUNIT5, DependencyVersion.of("5.7.1"), availableVersions); + DependencyVersion.of("5.7.1"), availableVersions); assertThat(proposal.getLatest()).extracting(DependencyVersion::getIdentifier).isEqualTo("5.7.1"); assertThat(proposal.getProposal()).extracting(DependencyVersion::getIdentifier).isEqualTo("5.7.1");