From 0bf5b00cf092cdc8de2513062fcffad8f95741e7 Mon Sep 17 00:00:00 2001 From: Moritz Mester Date: Thu, 29 Jul 2021 16:23:37 +0200 Subject: [PATCH] fixed previousVersion for tagged commits --- .../PreviousVersionIntegrationTest.groovy | 47 +++++++++++++++++++ .../axion/release/domain/VersionResolver.java | 2 +- .../release/domain/scm/TaggedCommits.java | 6 +-- 3 files changed, 51 insertions(+), 4 deletions(-) create mode 100644 src/integration/groovy/pl/allegro/tech/build/axion/release/PreviousVersionIntegrationTest.groovy diff --git a/src/integration/groovy/pl/allegro/tech/build/axion/release/PreviousVersionIntegrationTest.groovy b/src/integration/groovy/pl/allegro/tech/build/axion/release/PreviousVersionIntegrationTest.groovy new file mode 100644 index 00000000..28596a40 --- /dev/null +++ b/src/integration/groovy/pl/allegro/tech/build/axion/release/PreviousVersionIntegrationTest.groovy @@ -0,0 +1,47 @@ +package pl.allegro.tech.build.axion.release + +import org.gradle.testkit.runner.TaskOutcome + +import static pl.allegro.tech.build.axion.release.TagPrefixConf.fullPrefix + +class PreviousVersionIntegrationTest extends BaseIntegrationTest { + + def "should return undecorated current version if no previous releases"() { + given: + buildFile(""" + task outputDecorated { doLast { + println "Previous: \${scmVersion.previousVersion}" + } } + """) + + when: + def result = runGradle('outputDecorated') + + then: + result.output.contains('Previous: 0.1.0') + result.task(":outputDecorated").outcome == TaskOutcome.SUCCESS + } + + def "should return previous version even if current commit is tagged"() { + given: + buildFile(""" + task outputDecorated { doLast { + println "Previous: \${scmVersion.previousVersion}" + } } + """) + + runGradle('release', '-Prelease.version=1.1.0', '-Prelease.localOnly', '-Prelease.disableChecks') + + repository.commit(['*'], "commit after " + fullPrefix() + "1.1.0") + + runGradle('release', '-Prelease.version=1.2.0', '-Prelease.localOnly', '-Prelease.disableChecks') + + when: + def result = runGradle('outputDecorated') + + then: + result.output.contains('Previous: 1.1.0') + result.task(":outputDecorated").outcome == TaskOutcome.SUCCESS + } + +} diff --git a/src/main/java/pl/allegro/tech/build/axion/release/domain/VersionResolver.java b/src/main/java/pl/allegro/tech/build/axion/release/domain/VersionResolver.java index 251359d2..edb9df52 100644 --- a/src/main/java/pl/allegro/tech/build/axion/release/domain/VersionResolver.java +++ b/src/main/java/pl/allegro/tech/build/axion/release/domain/VersionResolver.java @@ -90,7 +90,7 @@ private VersionInfo readVersions( boolean onCommitWithLatestChange = currentVersionInfo.isSameCommit(latestChangePosition.getRevision()); - TaggedCommits previousTaggedCommit = TaggedCommits.fromLatestCommitBeforeNextVersion(repository, releaseTagPattern, nextVersionTagPattern, latestChangePosition); + TaggedCommits previousTaggedCommit = TaggedCommits.fromPreviousCommitBeforeNextVersion(repository, releaseTagPattern, nextVersionTagPattern, latestChangePosition); VersionSorter.Result previousVersionInfo = versionFromTaggedCommits(previousTaggedCommit, true, nextVersionTagPattern, versionFactory, forceSnapshot); diff --git a/src/main/java/pl/allegro/tech/build/axion/release/domain/scm/TaggedCommits.java b/src/main/java/pl/allegro/tech/build/axion/release/domain/scm/TaggedCommits.java index 2c1a29f0..cd63b197 100644 --- a/src/main/java/pl/allegro/tech/build/axion/release/domain/scm/TaggedCommits.java +++ b/src/main/java/pl/allegro/tech/build/axion/release/domain/scm/TaggedCommits.java @@ -28,12 +28,12 @@ public static TaggedCommits fromAllCommits(ScmRepository repository, Pattern tag return new TaggedCommits(latestTagPosition, taggedCommits); } - public static TaggedCommits fromLatestCommitBeforeNextVersion(ScmRepository repository, Pattern releaseTagPattern, Pattern nextVersionTagPattern, ScmPosition latestTagPosition) { - TagsOnCommit previousTags = repository.latestTags(releaseTagPattern); + public static TaggedCommits fromPreviousCommitBeforeNextVersion(ScmRepository repository, Pattern releaseTagPattern, Pattern nextVersionTagPattern, ScmPosition latestChangePosition) { + TagsOnCommit previousTags = repository.latestTags(releaseTagPattern, latestChangePosition.getRevision()); while (previousTags.hasOnlyMatching(nextVersionTagPattern)) { previousTags = repository.latestTags(releaseTagPattern, previousTags.getCommitId()); } - return new TaggedCommits(latestTagPosition, Arrays.asList(previousTags)); + return new TaggedCommits(latestChangePosition, Arrays.asList(previousTags)); } public List getCommits() {