From ada494856699a73bf97e84571a57a20f5e3fa936 Mon Sep 17 00:00:00 2001 From: czesiu Date: Wed, 19 Apr 2017 15:45:27 +0200 Subject: [PATCH] Invalid release version after commit beetween merge release to develop - fixed --- .../ReleaseBranchScenarios.cs | 40 ++++++++++++++++++- src/GitVersionCore/GitRepoMetadataProvider.cs | 1 + 2 files changed, 40 insertions(+), 1 deletion(-) diff --git a/src/GitVersionCore.Tests/IntegrationTests/ReleaseBranchScenarios.cs b/src/GitVersionCore.Tests/IntegrationTests/ReleaseBranchScenarios.cs index 7e1c9d4a3d..a0b4ff59ca 100644 --- a/src/GitVersionCore.Tests/IntegrationTests/ReleaseBranchScenarios.cs +++ b/src/GitVersionCore.Tests/IntegrationTests/ReleaseBranchScenarios.cs @@ -421,7 +421,45 @@ public void CommitOnDevelop_AfterReleaseBranchMergeToDevelop_ShouldNotResetCount fixture.AssertFullSemver(config, "2.0.0-beta.5"); } } - + + [Test] + public void CommitBeetweenMergeReleaseToDevelop_ShouldNotResetCount() + { + var config = new Config + { + VersioningMode = VersioningMode.ContinuousDeployment + }; + + using(var fixture = new EmptyRepositoryFixture()) + { + fixture.Repository.MakeACommit("initial"); + fixture.Repository.CreateBranch("develop"); + Commands.Checkout(fixture.Repository, "develop"); + fixture.Repository.CreateBranch("release-2.0.0"); + Commands.Checkout(fixture.Repository, "release-2.0.0"); + fixture.AssertFullSemver(config, "2.0.0-beta.0"); + + // Make some commits on release + var commit1 = fixture.Repository.MakeACommit(); + var commit2 = fixture.Repository.MakeACommit(); + fixture.AssertFullSemver(config, "2.0.0-beta.2"); + + // Merge release to develop - emulate commit beetween other person release commit push and this commit merge to develop + Commands.Checkout(fixture.Repository, "develop"); + fixture.Repository.Merge(commit1, Generate.SignatureNow(), new MergeOptions { FastForwardStrategy = FastForwardStrategy.NoFastForward }); + fixture.Repository.MergeNoFF("release-2.0.0", Generate.SignatureNow()); + + // Check version on release after merge to develop + Commands.Checkout(fixture.Repository, "release-2.0.0"); + fixture.AssertFullSemver(config, "2.0.0-beta.2"); + + // Check version on release after making some new commits + fixture.Repository.MakeACommit(); + fixture.Repository.MakeACommit(); + fixture.AssertFullSemver(config, "2.0.0-beta.4"); + } + } + public void ReleaseBranchShouldUseBranchNameVersionDespiteBumpInPreviousCommit() { using (var fixture = new EmptyRepositoryFixture()) diff --git a/src/GitVersionCore/GitRepoMetadataProvider.cs b/src/GitVersionCore/GitRepoMetadataProvider.cs index f9aa811506..189b9e1195 100644 --- a/src/GitVersionCore/GitRepoMetadataProvider.cs +++ b/src/GitVersionCore/GitRepoMetadataProvider.cs @@ -140,6 +140,7 @@ public Commit FindMergeBase(Branch branch, Branch otherBranch) mergeBaseAsForwardMerge = otherBranch.Commits .SkipWhile(c => c != commitToFindCommonBase) .TakeWhile(c => c != findMergeBase) + .OrderBy(c => c.Parents.Count()) .LastOrDefault(c => c.Parents.Contains(findMergeBase)); if (mergeBaseAsForwardMerge != null)