Skip to content

Commit

Permalink
Uses next release version when force snapshot is used
Browse files Browse the repository at this point in the history
- When next release tag is on the head commit along with normal version,
  the later one is used as a current version

- However, when forceSnapshot is used the next release version should
  be used, which is the case in this commit
  • Loading branch information
lchrzaszcz authored and adamdubiel committed Oct 22, 2018
1 parent fa82953 commit 819cb1e
Show file tree
Hide file tree
Showing 4 changed files with 53 additions and 13 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -37,9 +37,9 @@ class VersionResolver {

Map versions
if (versionFactory.versionProperties.useHighestVersion) {
versions = readVersionsByHighestVersion(versionFactory, tagProperties, nextVersionProperties)
versions = readVersionsByHighestVersion(versionFactory, tagProperties, nextVersionProperties, versionRules)
} else {
versions = readVersions(versionFactory, tagProperties, nextVersionProperties)
versions = readVersions(versionFactory, tagProperties, nextVersionProperties, versionRules)
}

ScmState scmState = new ScmState(
Expand All @@ -56,19 +56,24 @@ class VersionResolver {

private Map readVersions(VersionFactory versionFactory,
TagProperties tagProperties,
NextVersionProperties nextVersionProperties) {
NextVersionProperties nextVersionProperties,
VersionProperties versionProperties) {

Pattern releaseTagPattern = ~/^${tagProperties.prefix}.*/
Pattern nextVersionTagPattern = ~/.*${nextVersionProperties.suffix}$/
boolean forceSnapshot = versionProperties.forceSnapshot

Map currentVersionInfo, previousVersionInfo
TagsOnCommit latestTags = repository.latestTags(releaseTagPattern)
currentVersionInfo = versionFromTaggedCommits([latestTags], false, nextVersionTagPattern, versionFactory)
currentVersionInfo = versionFromTaggedCommits([latestTags], false, nextVersionTagPattern,
versionFactory, forceSnapshot)

TagsOnCommit previousTags = latestTags
while (previousTags.hasOnlyMatching(nextVersionTagPattern)) {
previousTags = repository.latestTags(releaseTagPattern, previousTags.commitId)
}
previousVersionInfo = versionFromTaggedCommits([previousTags], true, nextVersionTagPattern, versionFactory)
previousVersionInfo = versionFromTaggedCommits([previousTags], true, nextVersionTagPattern,
versionFactory, forceSnapshot)

Version currentVersion = currentVersionInfo.version
Version previousVersion = previousVersionInfo.version
Expand All @@ -83,15 +88,20 @@ class VersionResolver {

private Map readVersionsByHighestVersion(VersionFactory versionFactory,
TagProperties tagProperties,
NextVersionProperties nextVersionProperties) {
NextVersionProperties nextVersionProperties,
VersionProperties versionProperties) {

Pattern releaseTagPattern = ~/^${tagProperties.prefix}.*/
Pattern nextVersionTagPattern = ~/.*${nextVersionProperties.suffix}$/
boolean forceSnapshot = versionProperties.forceSnapshot

Map currentVersionInfo, previousVersionInfo
List<TagsOnCommit> allTaggedCommits = repository.taggedCommits(releaseTagPattern)

currentVersionInfo = versionFromTaggedCommits(allTaggedCommits, false, nextVersionTagPattern, versionFactory)
previousVersionInfo = versionFromTaggedCommits(allTaggedCommits, true, nextVersionTagPattern, versionFactory)
currentVersionInfo = versionFromTaggedCommits(allTaggedCommits, false, nextVersionTagPattern,
versionFactory, forceSnapshot)
previousVersionInfo = versionFromTaggedCommits(allTaggedCommits, true, nextVersionTagPattern,
versionFactory, forceSnapshot)

Version currentVersion = currentVersionInfo.version
Version previousVersion = previousVersionInfo.version
Expand All @@ -107,7 +117,14 @@ class VersionResolver {
private Map versionFromTaggedCommits(List<TagsOnCommit> taggedCommits,
boolean ignoreNextVersionTags,
Pattern nextVersionTagPattern,
VersionFactory versionFactory) {
return sorter.pickTaggedCommit(taggedCommits, ignoreNextVersionTags, nextVersionTagPattern, versionFactory)
VersionFactory versionFactory,
boolean forceSnapshot) {

return sorter.pickTaggedCommit(
taggedCommits,
ignoreNextVersionTags,
forceSnapshot,
nextVersionTagPattern,
versionFactory)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ class VersionSorter {

Map pickTaggedCommit(List<TagsOnCommit> taggedCommits,
boolean ignoreNextVersionTags,
boolean forceSnapshot,
Pattern nextVersionTagPattern,
VersionFactory versionFactory) {
Set<Version> versions = []
Expand All @@ -34,7 +35,11 @@ class VersionSorter {
// next version should be igored when tag is on head
// and there are other, normal tags on it
// because when on single commit on head - normal ones have precedence
boolean ignoreNextVersionOnHead = tagsEntry.isHead && !tagsEntry.hasOnlyMatching(nextVersionTagPattern)
// however, we should take into account next version
// in case of forced snapshot
boolean ignoreNextVersionOnHead = tagsEntry.isHead &&
!tagsEntry.hasOnlyMatching(nextVersionTagPattern) &&
!forceSnapshot

for (String tag : tags) {
boolean isNextVersion = tag ==~ nextVersionTagPattern
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -107,8 +107,6 @@ class VersionResolverTest extends RepositoryBasedTest {
!version.snapshot
}

// This test case reproduces issue #264
@Ignore("Issue under test is now ignored in order to resolve #263")
def "should prefer snapshot of nextVersion when both on current commit and forceSnapshot is enabled"() {

given: "there is releaseTag and nextVersionTag on current commit"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ class VersionSorterTest extends Specification {
def versionData = sorter.pickTaggedCommit(
[new TagsOnCommit('a', ['release-1.0.0'], false), new TagsOnCommit('b', ['release-2.0.0'], false)],
false,
false,
~/.*-alpha$/,
factory
)
Expand All @@ -44,6 +45,7 @@ class VersionSorterTest extends Specification {
def versionData = sorter.pickTaggedCommit(
[new TagsOnCommit('a', ['release-1.0.0', 'release-2.0.0'], false)],
false,
false,
~/.*-alpha$/,
factory
)
Expand All @@ -58,6 +60,7 @@ class VersionSorterTest extends Specification {
def versionData = sorter.pickTaggedCommit(
[new TagsOnCommit('a', ['release-1.0.0'], false), new TagsOnCommit('b', ['release-2.0.0-alpha'], true)],
false,
false,
~/.*-alpha$/,
factory
)
Expand All @@ -71,6 +74,7 @@ class VersionSorterTest extends Specification {
def versionData = sorter.pickTaggedCommit(
[new TagsOnCommit('a', ['release-1.0.0', 'release-2.0.0-alpha'], true)],
false,
false,
~/.*-alpha$/,
factory
)
Expand All @@ -79,11 +83,26 @@ class VersionSorterTest extends Specification {
versionData.version.toString() == '1.0.0'
}

def "should prefer alpha version to normal version when on head, versions on single commit and snapshot is forced"() {
when:
def versionData = sorter.pickTaggedCommit(
[new TagsOnCommit('a', ['release-1.0.0', 'release-2.0.0-alpha'], true)],
false,
true,
~/.*-alpha$/,
factory
)

then:
versionData.version.toString() == '2.0.0'
}

def "should ignore any nextVersion commits when asked"() {
when:
def versionData = sorter.pickTaggedCommit(
[new TagsOnCommit('a', ['release-1.0.0'], false), new TagsOnCommit('a', ['release-2.0.0-alpha'], false)],
true,
false,
~/.*-alpha$/,
factory
)
Expand All @@ -97,6 +116,7 @@ class VersionSorterTest extends Specification {
def versionData = sorter.pickTaggedCommit(
[new TagsOnCommit('a', ['release-1.0.0', 'release-2.0.0-alpha'], false)],
true,
false,
~/.*-alpha$/,
factory
)
Expand Down

0 comments on commit 819cb1e

Please sign in to comment.