diff --git a/src/main/java/org/springframework/data/release/dependency/DependencyOperations.java b/src/main/java/org/springframework/data/release/dependency/DependencyOperations.java index d4177ff..7e763b1 100644 --- a/src/main/java/org/springframework/data/release/dependency/DependencyOperations.java +++ b/src/main/java/org/springframework/data/release/dependency/DependencyOperations.java @@ -405,17 +405,44 @@ public class DependencyOperations { DependencyVersion latestToUse = latest.filter(it -> it.isNewer(currentVersion)).orElse(currentVersion); - return DependencyUpgradeProposal.of(policy, currentVersion, latestMinor.orElse(latestToUse), latestToUse, + DependencyVersion latestMinorFallback = latest + .filter(it -> isUpgradeable(policy, it, currentVersion) && it.isNewer(currentVersion)).orElse(currentVersion); + + return DependencyUpgradeProposal.of(policy, currentVersion, latestMinor.orElse(latestMinorFallback), latestToUse, newerVersions); } + private static boolean isUpgradeable(DependencyUpgradePolicy policy, DependencyVersion proposal, + DependencyVersion currentVersion) { + + if (policy.restrictToMinorVersion()) { + + if (proposal.getTrainName() != null && currentVersion.getTrainName() != null) { + return proposal.getTrainName().equals(currentVersion.getTrainName()); + } + + if (proposal.getVersion().getMajor() == currentVersion.getVersion().getMajor() + && proposal.getVersion().getMinor() == currentVersion.getVersion().getMinor()) { + return true; + } + + return false; + } + + if (StringUtils.hasText(proposal.getModifier())) { + return policy.milestoneAllowed(); + } + + return true; + } + private static Optional findLatest(DependencyUpgradePolicy policy, List availableVersions) { return availableVersions.stream().filter(it -> { - if (!policy.milestoneAllowed() && StringUtils.hasText(it.getModifier())) { - return false; + if (StringUtils.hasText(it.getModifier())) { + return policy.milestoneAllowed(); } return true; @@ -429,8 +456,8 @@ public class DependencyOperations { return availableVersions.stream().filter(it -> { - if (policy.milestoneAllowed() && StringUtils.hasText(it.getModifier())) { - return true; + if (StringUtils.hasText(it.getModifier())) { + return policy.milestoneAllowed(); } if (it.getVersion() == null || currentVersion.getVersion() == null) { diff --git a/src/test/java/org/springframework/data/release/dependency/DependencyOperationsUnitTests.java b/src/test/java/org/springframework/data/release/dependency/DependencyOperationsUnitTests.java index 6068df3..4c7be94 100644 --- a/src/test/java/org/springframework/data/release/dependency/DependencyOperationsUnitTests.java +++ b/src/test/java/org/springframework/data/release/dependency/DependencyOperationsUnitTests.java @@ -103,6 +103,20 @@ class DependencyOperationsUnitTests { assertThat(proposal.getProposal()).extracting(DependencyVersion::getIdentifier).isEqualTo("5.7.2"); } + @Test + void shouldNotReportMajorVersionForServiceRelease() { + + List availableVersions = Stream.of("5.0.0") // + .map(DependencyVersion::of) // + .collect(Collectors.toList()); + + DependencyUpgradeProposal proposal = DependencyOperations.getDependencyUpgradeProposal( + DependencyUpgradePolicy.from(Iteration.SR1), DependencyVersion.of("4.1"), availableVersions); + + assertThat(proposal.getNewerVersions()).extracting(DependencyVersion::getIdentifier).containsExactly("5.0.0"); + assertThat(proposal.getProposal()).extracting(DependencyVersion::getIdentifier).isEqualTo("4.1"); + } + @Test void shouldReportMilestoneVersionForMilestoneIteration() {