[changelog] Fix tag sorting. Fixes #203

This commit is contained in:
Andres Almiray
2021-06-06 17:06:17 +02:00
parent fc9f7f9823
commit af0181de06
3 changed files with 62 additions and 6 deletions

View File

@@ -75,10 +75,10 @@ public class JavaModuleVersion implements Comparable<JavaModuleVersion> {
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
JavaModuleVersion version = (JavaModuleVersion) o;
return Objects.equals(version, version.version) &&
Objects.equals(prerelease, version.prerelease) &&
Objects.equals(build, version.build);
JavaModuleVersion v = (JavaModuleVersion) o;
return Objects.equals(version, v.version) &&
Objects.equals(prerelease, v.prerelease) &&
Objects.equals(build, v.build);
}
@Override
@@ -115,7 +115,7 @@ public class JavaModuleVersion implements Comparable<JavaModuleVersion> {
}
private String[] split(String s, List<Character> delims) {
if(isBlank(s)) return new String[0];
if (isBlank(s)) return new String[0];
List<String> tokens = new ArrayList<>();

View File

@@ -17,12 +17,19 @@
*/
package org.jreleaser.util;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.MethodSource;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import static java.util.Arrays.asList;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.equalTo;
import static org.jreleaser.util.ComparatorUtils.greaterThan;
@@ -58,6 +65,51 @@ public class JavaModuleVersionTest {
assertTrue(greaterThan(v2, v1));
}
@Test
public void testVersionSort() {
List<JavaModuleVersion> asc = new ArrayList<>(asList(
JavaModuleVersion.of("0-ea"),
JavaModuleVersion.of("2021.01.22"),
JavaModuleVersion.of("2021.01.24"),
JavaModuleVersion.of("2021.02"),
JavaModuleVersion.of("2021.02.24"),
JavaModuleVersion.of("2021.03"),
JavaModuleVersion.of("2021.04.01"),
JavaModuleVersion.of("2021.04.13"),
JavaModuleVersion.of("2021.05.01"),
JavaModuleVersion.of("2021.05.20")));
List<JavaModuleVersion> desc = new ArrayList<>(asList(
JavaModuleVersion.of("2021.05.20"),
JavaModuleVersion.of("2021.05.01"),
JavaModuleVersion.of("2021.04.13"),
JavaModuleVersion.of("2021.04.01"),
JavaModuleVersion.of("2021.03"),
JavaModuleVersion.of("2021.02.24"),
JavaModuleVersion.of("2021.02"),
JavaModuleVersion.of("2021.01.24"),
JavaModuleVersion.of("2021.01.22"),
JavaModuleVersion.of("0-ea")));
// given:
List<JavaModuleVersion> sortedAsc = new ArrayList<>(desc);
Collections.sort(sortedAsc, JavaModuleVersion::compareTo);
// then:
assertThat(
sortedAsc.stream().map(JavaModuleVersion::toString).collect(Collectors.joining(",")),
equalTo(asc.stream().map(JavaModuleVersion::toString).collect(Collectors.joining(","))));
// given:
List<JavaModuleVersion> sortedDesc = new ArrayList<>(asc);
Collections.sort(sortedDesc, Comparator.reverseOrder());
// then:
assertThat(
sortedDesc.stream().map(JavaModuleVersion::toString).collect(Collectors.joining(",")),
equalTo(desc.stream().map(JavaModuleVersion::toString).collect(Collectors.joining(","))));
}
private static Stream<Arguments> version_parsing() {
return Stream.of(
Arguments.of("1", "1", null, null),

View File

@@ -169,7 +169,11 @@ public class ChangelogGenerator {
String effectiveTagName = gitService.getEffectiveTagName(context.getModel());
String tagName = gitService.getConfiguredTagName();
String tagPattern = tagName.replaceAll("\\{\\{.*}}", "\\.\\*");
Pattern versionPattern = Pattern.compile(tagName.replaceAll("\\{\\{.*}}", "\\(\\.\\*\\)"));
Pattern vp = Pattern.compile(tagName.replaceAll("\\{\\{.*}}", "\\(\\.\\*\\)"));
if (!tagName.contains("{{")) {
vp = Pattern.compile("(.*)");
}
Pattern versionPattern = vp;
tags.sort((tag1, tag2) -> {
Comparable v1 = version(context, tag1, versionPattern);