diff --git a/src/GitVersion.Core.Tests/VersionCalculation/NextVersionCalculatorTests.cs b/src/GitVersion.Core.Tests/VersionCalculation/NextVersionCalculatorTests.cs index 8078135ed0..00d85d5c11 100644 --- a/src/GitVersion.Core.Tests/VersionCalculation/NextVersionCalculatorTests.cs +++ b/src/GitVersion.Core.Tests/VersionCalculation/NextVersionCalculatorTests.cs @@ -119,6 +119,22 @@ public void MergeIntoMainline() fixture.AssertFullSemver("1.0.0", configuration); } + [Test] + public void MergeSelfIntoMainline() + { + var configuration = TrunkBasedConfigurationBuilder.New.Build(); + + using var fixture = new EmptyRepositoryFixture(); + fixture.MakeACommit(); + fixture.CreateBranch("foo"); + fixture.MakeACommit(); + fixture.MergeTo("foo"); + fixture.Checkout(MainBranch); + fixture.Repository.Merge("foo", Generate.SignatureNow()); + + fixture.AssertFullSemver("0.0.3", configuration); + } + [Test] public void MergeFeatureIntoMainline() { diff --git a/src/GitVersion.Core/VersionCalculation/VersionSearchStrategies/MainlineVersionStrategy.cs b/src/GitVersion.Core/VersionCalculation/VersionSearchStrategies/MainlineVersionStrategy.cs index 7365ec1a7b..a7cd9a342d 100644 --- a/src/GitVersion.Core/VersionCalculation/VersionSearchStrategies/MainlineVersionStrategy.cs +++ b/src/GitVersion.Core/VersionCalculation/VersionSearchStrategies/MainlineVersionStrategy.cs @@ -232,40 +232,42 @@ private bool IterateOverCommitsRecursive( continue; } - if (mergeMessage.MergedBranch is not null) + if (mergeMessage.MergedBranch is null || mergeMessage.MergedBranch.EquivalentTo(branchName.WithoutOrigin)) { - var childConfiguration = Context.Configuration.GetBranchConfiguration(mergeMessage.MergedBranch); - var childBranchName = mergeMessage.MergedBranch; + continue; + } - if (childConfiguration.IsMainBranch == true) - { - if (configuration.IsMainBranch == true) throw new NotImplementedException(); + var childConfiguration = Context.Configuration.GetBranchConfiguration(mergeMessage.MergedBranch); + var childBranchName = mergeMessage.MergedBranch; - mergedCommitsInReverseOrderLazy = new( - () => [.. this.incrementStrategyFinder.GetMergedCommits(item, 0, Context.Configuration.Ignore).Reverse()] - ); - childConfiguration = configuration; - childBranchName = iteration.BranchName; - } + if (childConfiguration.IsMainBranch == true) + { + if (configuration.IsMainBranch == true) throw new NotImplementedException(); - var childIteration = CreateIteration( - branchName: childBranchName, - configuration: childConfiguration, - parentIteration: iteration, - parentCommit: commit + mergedCommitsInReverseOrderLazy = new( + () => [.. this.incrementStrategyFinder.GetMergedCommits(item, 0, Context.Configuration.Ignore).Reverse()] ); + childConfiguration = configuration; + childBranchName = iteration.BranchName; + } - var done = IterateOverCommitsRecursive( - commitsInReverseOrder: mergedCommitsInReverseOrderLazy.Value, - iteration: childIteration, - targetBranch: targetBranch, - targetLabel: targetLabel, - taggedSemanticVersions: taggedSemanticVersions, - traversedCommits: traversedCommits); + var childIteration = CreateIteration( + branchName: childBranchName, + configuration: childConfiguration, + parentIteration: iteration, + parentCommit: commit + ); - commit.AddChildIteration(childIteration); - if (done) return true; - } + var done = IterateOverCommitsRecursive( + commitsInReverseOrder: mergedCommitsInReverseOrderLazy.Value, + iteration: childIteration, + targetBranch: targetBranch, + targetLabel: targetLabel, + taggedSemanticVersions: taggedSemanticVersions, + traversedCommits: traversedCommits); + + commit.AddChildIteration(childIteration); + if (done) return true; traversedCommits.AddRange(mergedCommitsInReverseOrderLazy.Value); }