Skip to content

Commit

Permalink
ORCH-488 Fix sorting of maven repository versions
Browse files Browse the repository at this point in the history
  • Loading branch information
alain-kermis-sonarsource authored Feb 9, 2024
1 parent cb5c55d commit d1a292c
Show file tree
Hide file tree
Showing 7 changed files with 27 additions and 15 deletions.
2 changes: 1 addition & 1 deletion echo/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
<parent>
<groupId>org.sonarsource.orchestrator</groupId>
<artifactId>orchestrator-parent</artifactId>
<version>4.8-SNAPSHOT</version>
<version>4.7.1-SNAPSHOT</version>
</parent>
<artifactId>echo</artifactId>
<name>Echo Program</name>
Expand Down
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
</parent>
<groupId>org.sonarsource.orchestrator</groupId>
<artifactId>orchestrator-parent</artifactId>
<version>4.8-SNAPSHOT</version>
<version>4.7.1-SNAPSHOT</version>
<packaging>pom</packaging>
<name>Orchestrator :: Parent</name>
<inceptionYear>2011</inceptionYear>
Expand Down
2 changes: 1 addition & 1 deletion sonar-orchestrator-junit4/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<parent>
<groupId>org.sonarsource.orchestrator</groupId>
<artifactId>orchestrator-parent</artifactId>
<version>4.8-SNAPSHOT</version>
<version>4.7.1-SNAPSHOT</version>
</parent>
<artifactId>sonar-orchestrator-junit4</artifactId>
<name>Orchestrator - JUnit 4</name>
Expand Down
2 changes: 1 addition & 1 deletion sonar-orchestrator-junit5/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<parent>
<groupId>org.sonarsource.orchestrator</groupId>
<artifactId>orchestrator-parent</artifactId>
<version>4.8-SNAPSHOT</version>
<version>4.7.1-SNAPSHOT</version>
</parent>
<artifactId>sonar-orchestrator-junit5</artifactId>
<name>Orchestrator - JUnit 5</name>
Expand Down
2 changes: 1 addition & 1 deletion sonar-orchestrator/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
<parent>
<groupId>org.sonarsource.orchestrator</groupId>
<artifactId>orchestrator-parent</artifactId>
<version>4.8-SNAPSHOT</version>
<version>4.7.1-SNAPSHOT</version>
</parent>
<artifactId>sonar-orchestrator</artifactId>
<name>Orchestrator</name>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ public class MavenVersionResolver {
private final String baseUrl;
private final String groupId;
private final String artifactId;
private List<String> versions;
private List<Version> versions;

public MavenVersionResolver(String baseUrl, String groupId, String artifactId) {
this.baseUrl = baseUrl;
Expand All @@ -53,7 +53,10 @@ public MavenVersionResolver(String baseUrl, String groupId, String artifactId) {
public void loadVersions() {
try {
MavenRepositoryVersion mavenMetadata = downloadVersions();
this.versions = mavenMetadata.getVersioning().getVersions();
this.versions = mavenMetadata.getVersioning().getVersions()
.stream()
.map(Version::create)
.collect(Collectors.toList());
this.versions.sort(Comparator.naturalOrder());
} catch (IOException e) {
throw new IllegalStateException("Fail to load versions of " + groupId + ":" + artifactId, e);
Expand All @@ -62,24 +65,24 @@ public void loadVersions() {

public Optional<String> getLatestVersion(@Nullable String majorMinorVersion) {
if (isEmpty(majorMinorVersion)) {
return Optional.of(this.versions.get(versions.size() - 1));
Version version = this.versions.get(versions.size() - 1);
return Optional.of(version.toString());
}

List<String> filteredVersions = versions.stream()
.filter(version -> version.startsWith(majorMinorVersion))
List<Version> filteredVersions = versions.stream()
.filter(version -> version.toString().startsWith(majorMinorVersion))
.collect(Collectors.toList());

if (!filteredVersions.isEmpty()) {
return filteredVersions.stream()
.map(Version::create)
.max(Comparator.naturalOrder())
.map(Version::toString);
} else {
return Optional.empty();
}
}

public MavenRepositoryVersion downloadVersions() throws IOException {
protected MavenRepositoryVersion downloadVersions() throws IOException {
URL url = getUrl();
return new XmlMapper().readValue(url, MavenRepositoryVersion.class);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ class MavenVersionResolverTest {

@ParameterizedTest
@MethodSource("params")
void loadVersions_whenProvidedEmptyString_shouldReturnLatest(String input, String output) throws IOException {
void loadVersions(String input, String output) throws IOException {
MavenVersionResolver versionResolver = spy(new MavenVersionResolver("https://repo1.maven.org/maven2", "org.sonarsource.sonarqube", "sonar-plugin-api"));
when(versionResolver.downloadVersions()).thenReturn(getMavenRepositoryVersion());
versionResolver.loadVersions();
Expand Down Expand Up @@ -75,6 +75,13 @@ MavenRepositoryVersion getMavenRepositoryVersion() {
versions.add("1.0");
versions.add("2.0");
versions.add("2.0.1");
versions.add("2.0.2");
versions.add("2.0.10");
versions.add("10.9.1");
versions.add("11.4.5");
versions.add("11.0.3");
versions.add("10.4.2");
versions.add("10.10.0");
versions.add("3.1");
versions.add("4.0");
versions.add("5.0");
Expand All @@ -88,8 +95,10 @@ MavenRepositoryVersion getMavenRepositoryVersion() {

private static Stream<Arguments> params() {
return Stream.of(
Arguments.of("", "6.0"),
Arguments.of("2.0", "2.0.1"),
Arguments.of("", "11.4.5"),
Arguments.of("10", "10.10.0"),
Arguments.of("5.", "5.0.1.9324"),
Arguments.of("2.0", "2.0.10"),
Arguments.of("5.0.1", "5.0.1.9324")
);
}
Expand Down

0 comments on commit d1a292c

Please sign in to comment.