Use current version if the queried repository does not contain the current version.

Closes #171.
This commit is contained in:
Mark Paluch
2021-02-16 15:12:01 +01:00
parent 4efa0f8e00
commit 0217dab41c
3 changed files with 23 additions and 21 deletions

View File

@@ -99,8 +99,7 @@ public class DependencyOperations {
DependencyVersion currentVersion = currentDependencies.get(dependency);
List<DependencyVersion> 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<DependencyVersion> allVersions) {
DependencyVersion currentVersion, List<DependencyVersion> allVersions) {
DependencyVersion latestMinor = findLatestMinor(iteration, dependency, currentVersion, allVersions);
DependencyVersion latest = findLatest(iteration, allVersions);
Optional<DependencyVersion> latestMinor = findLatestMinor(iteration, currentVersion, allVersions);
Optional<DependencyVersion> latest = findLatest(iteration, allVersions);
List<DependencyVersion> 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<DependencyVersion> availableVersions) {
private static Optional<DependencyVersion> findLatest(Iteration iteration,
List<DependencyVersion> 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<DependencyVersion> findLatestMinor(Iteration iteration,
DependencyVersion currentVersion,
List<DependencyVersion> 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) {

View File

@@ -107,6 +107,10 @@ class DependencyVersion implements Comparable<DependencyVersion> {
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) {

View File

@@ -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");