From af0181de0609ad9999299c927fbddcb92b9bb1aa Mon Sep 17 00:00:00 2001 From: Andres Almiray Date: Sun, 6 Jun 2021 17:06:17 +0200 Subject: [PATCH] [changelog] Fix tag sorting. Fixes #203 --- .../org/jreleaser/util/JavaModuleVersion.java | 10 ++-- .../jreleaser/util/JavaModuleVersionTest.java | 52 +++++++++++++++++++ .../jreleaser/sdk/git/ChangelogGenerator.java | 6 ++- 3 files changed, 62 insertions(+), 6 deletions(-) diff --git a/core/jreleaser-utils/src/main/java/org/jreleaser/util/JavaModuleVersion.java b/core/jreleaser-utils/src/main/java/org/jreleaser/util/JavaModuleVersion.java index f0911782..e7ce969d 100644 --- a/core/jreleaser-utils/src/main/java/org/jreleaser/util/JavaModuleVersion.java +++ b/core/jreleaser-utils/src/main/java/org/jreleaser/util/JavaModuleVersion.java @@ -75,10 +75,10 @@ public class JavaModuleVersion implements Comparable { 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 { } private String[] split(String s, List delims) { - if(isBlank(s)) return new String[0]; + if (isBlank(s)) return new String[0]; List tokens = new ArrayList<>(); diff --git a/core/jreleaser-utils/src/test/java/org/jreleaser/util/JavaModuleVersionTest.java b/core/jreleaser-utils/src/test/java/org/jreleaser/util/JavaModuleVersionTest.java index b7382228..27a9301d 100644 --- a/core/jreleaser-utils/src/test/java/org/jreleaser/util/JavaModuleVersionTest.java +++ b/core/jreleaser-utils/src/test/java/org/jreleaser/util/JavaModuleVersionTest.java @@ -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 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 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 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 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 version_parsing() { return Stream.of( Arguments.of("1", "1", null, null), diff --git a/sdks/git-sdk/src/main/java/org/jreleaser/sdk/git/ChangelogGenerator.java b/sdks/git-sdk/src/main/java/org/jreleaser/sdk/git/ChangelogGenerator.java index 173fc74f..392e61d1 100644 --- a/sdks/git-sdk/src/main/java/org/jreleaser/sdk/git/ChangelogGenerator.java +++ b/sdks/git-sdk/src/main/java/org/jreleaser/sdk/git/ChangelogGenerator.java @@ -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);