From c063d670018c1da5f01c204175d9087e54c7ee68 Mon Sep 17 00:00:00 2001 From: Konstantin Ershov Date: Tue, 27 Jul 2021 18:22:57 +0200 Subject: [PATCH 1/3] Test for issue 2786 --- .../MainlineDevelopmentMode.cs | 122 ++++++++++++++++++ .../MainlineVersionCalculator.cs | 1 + 2 files changed, 123 insertions(+) diff --git a/src/GitVersion.Core.Tests/IntegrationTests/MainlineDevelopmentMode.cs b/src/GitVersion.Core.Tests/IntegrationTests/MainlineDevelopmentMode.cs index dbc5e627d6..665f387e4e 100644 --- a/src/GitVersion.Core.Tests/IntegrationTests/MainlineDevelopmentMode.cs +++ b/src/GitVersion.Core.Tests/IntegrationTests/MainlineDevelopmentMode.cs @@ -156,6 +156,128 @@ public void SupportBranches() fixture.AssertFullSemver("1.0.5-PullRequest0007.3", config); } + [Test] + public void HotfixBranchesWithTaggedCommitsOnMain() + { + using var fixture = new EmptyRepositoryFixture(); + var configBumpMinor = new Config() + { + VersioningMode = VersioningMode.Mainline, + Increment = IncrementStrategy.Minor, + Branches = + { + { + Config.MainBranchKey, + new BranchConfig + { + Regex = Config.MainBranchRegex, + SourceBranches = new HashSet + { + Config.DevelopBranchKey, + Config.ReleaseBranchKey + }, + Tag = string.Empty, + PreventIncrementOfMergedBranchVersion = true, + Increment = IncrementStrategy.Minor, + IsMainline = true, + PreReleaseWeight = 55000, + } + }, + { + Config.HotfixBranchKey, + new BranchConfig + { + Tag = "" + } + } + } + }; + + fixture.Repository.MakeACommit("1"); + fixture.MakeATaggedCommit("1.0.0"); + + fixture.MakeACommit(); // 1.1.0 + fixture.AssertFullSemver("1.1.0", configBumpMinor); + fixture.ApplyTag("1.1.0"); + fixture.AssertFullSemver("1.1.0", configBumpMinor); + + fixture.BranchTo("hotfix/may"); + fixture.AssertFullSemver("1.1.1", configBumpMinor); + + // Move main on + fixture.Checkout(MainBranch); + fixture.MakeACommit(); + fixture.AssertFullSemver("1.2.0", configBumpMinor); + + // Continue on hotfix + fixture.Checkout("hotfix/may"); + fixture.MakeACommit(); // 1.2.1 + fixture.AssertFullSemver("1.1.1", configBumpMinor); + } + + [Test] + public void HotfixBranchesWithTaggedCommitsOnHotfix() + { + using var fixture = new EmptyRepositoryFixture(); + var configBumpMinor = new Config() + { + VersioningMode = VersioningMode.Mainline, + Increment = IncrementStrategy.Minor, + Branches = + { + { + Config.MainBranchKey, + new BranchConfig + { + Regex = Config.MainBranchRegex, + SourceBranches = new HashSet + { + Config.DevelopBranchKey, + Config.ReleaseBranchKey + }, + Tag = string.Empty, + PreventIncrementOfMergedBranchVersion = true, + Increment = IncrementStrategy.Minor, + IsMainline = true, + PreReleaseWeight = 55000, + } + }, + { + Config.HotfixBranchKey, + new BranchConfig + { + Tag = "" + } + } + } + }; + + fixture.Repository.MakeACommit("1"); + fixture.MakeATaggedCommit("1.0.0"); + + fixture.MakeACommit(); // 1.1.0 + fixture.AssertFullSemver("1.1.0", configBumpMinor); + fixture.ApplyTag("1.1.0"); + fixture.AssertFullSemver("1.1.0", configBumpMinor); + fixture.MakeACommit(); // 1.2.0 + fixture.AssertFullSemver("1.2.0", configBumpMinor); + + fixture.BranchTo("hotfix/may"); + fixture.AssertFullSemver("1.2.1", configBumpMinor); + + // Move main on + fixture.Checkout(MainBranch); + fixture.MakeACommit(); + fixture.AssertFullSemver("1.3.0", configBumpMinor); + + // Continue on hotfix + fixture.Checkout("hotfix/may"); + fixture.MakeACommit(); // 1.2.1 + fixture.MakeATaggedCommit("1.2.2"); + fixture.MakeACommit(); // 1.2.3 + fixture.AssertFullSemver("1.2.3", configBumpMinor); + } + [Test] public void VerifyForwardMerge() { diff --git a/src/GitVersion.Core/VersionCalculation/MainlineVersionCalculator.cs b/src/GitVersion.Core/VersionCalculation/MainlineVersionCalculator.cs index 5b0d819676..692a539893 100644 --- a/src/GitVersion.Core/VersionCalculation/MainlineVersionCalculator.cs +++ b/src/GitVersion.Core/VersionCalculation/MainlineVersionCalculator.cs @@ -200,6 +200,7 @@ private ICommit GetEffectiveMainlineTip(IEnumerable mainlineCommitLog, private ICommit FindMergeBaseBeforeForwardMerge(ICommit baseVersionSource, IBranch mainline, out ICommit mainlineTip) { var mergeBase = repositoryStore.FindMergeBase(context.CurrentCommit, mainline.Tip); + //var mainlineCommitLog = repositoryStore.GetMainlineCommitLog(mergeBase.Parents.FirstOrDefault(), mainline.Tip).ToList(); var mainlineCommitLog = repositoryStore.GetMainlineCommitLog(baseVersionSource, mainline.Tip).ToList(); // find the mainline commit effective for versioning the current branch From 35b904225ba4b6a0b52426ea3608891360bf25c2 Mon Sep 17 00:00:00 2001 From: Konstantin Ershov Date: Tue, 27 Jul 2021 18:22:57 +0200 Subject: [PATCH 2/3] Test for issue 2786 --- .../MainlineDevelopmentMode.cs | 122 ++++++++++++++++++ .../MainlineVersionCalculator.cs | 1 + 2 files changed, 123 insertions(+) diff --git a/src/GitVersion.Core.Tests/IntegrationTests/MainlineDevelopmentMode.cs b/src/GitVersion.Core.Tests/IntegrationTests/MainlineDevelopmentMode.cs index 147fe2aae0..60a5a7a198 100644 --- a/src/GitVersion.Core.Tests/IntegrationTests/MainlineDevelopmentMode.cs +++ b/src/GitVersion.Core.Tests/IntegrationTests/MainlineDevelopmentMode.cs @@ -156,6 +156,128 @@ public void SupportBranches() fixture.AssertFullSemver("1.0.5-PullRequest0007.3", this.config); } + [Test] + public void HotfixBranchesWithTaggedCommitsOnMain() + { + using var fixture = new EmptyRepositoryFixture(); + var configBumpMinor = new Config() + { + VersioningMode = VersioningMode.Mainline, + Increment = IncrementStrategy.Minor, + Branches = + { + { + Config.MainBranchKey, + new BranchConfig + { + Regex = Config.MainBranchRegex, + SourceBranches = new HashSet + { + Config.DevelopBranchKey, + Config.ReleaseBranchKey + }, + Tag = string.Empty, + PreventIncrementOfMergedBranchVersion = true, + Increment = IncrementStrategy.Minor, + IsMainline = true, + PreReleaseWeight = 55000, + } + }, + { + Config.HotfixBranchKey, + new BranchConfig + { + Tag = "" + } + } + } + }; + + fixture.Repository.MakeACommit("1"); + fixture.MakeATaggedCommit("1.0.0"); + + fixture.MakeACommit(); // 1.1.0 + fixture.AssertFullSemver("1.1.0", configBumpMinor); + fixture.ApplyTag("1.1.0"); + fixture.AssertFullSemver("1.1.0", configBumpMinor); + + fixture.BranchTo("hotfix/may"); + fixture.AssertFullSemver("1.1.1", configBumpMinor); + + // Move main on + fixture.Checkout(MainBranch); + fixture.MakeACommit(); + fixture.AssertFullSemver("1.2.0", configBumpMinor); + + // Continue on hotfix + fixture.Checkout("hotfix/may"); + fixture.MakeACommit(); // 1.2.1 + fixture.AssertFullSemver("1.1.1", configBumpMinor); + } + + [Test] + public void HotfixBranchesWithTaggedCommitsOnHotfix() + { + using var fixture = new EmptyRepositoryFixture(); + var configBumpMinor = new Config() + { + VersioningMode = VersioningMode.Mainline, + Increment = IncrementStrategy.Minor, + Branches = + { + { + Config.MainBranchKey, + new BranchConfig + { + Regex = Config.MainBranchRegex, + SourceBranches = new HashSet + { + Config.DevelopBranchKey, + Config.ReleaseBranchKey + }, + Tag = string.Empty, + PreventIncrementOfMergedBranchVersion = true, + Increment = IncrementStrategy.Minor, + IsMainline = true, + PreReleaseWeight = 55000, + } + }, + { + Config.HotfixBranchKey, + new BranchConfig + { + Tag = "" + } + } + } + }; + + fixture.Repository.MakeACommit("1"); + fixture.MakeATaggedCommit("1.0.0"); + + fixture.MakeACommit(); // 1.1.0 + fixture.AssertFullSemver("1.1.0", configBumpMinor); + fixture.ApplyTag("1.1.0"); + fixture.AssertFullSemver("1.1.0", configBumpMinor); + fixture.MakeACommit(); // 1.2.0 + fixture.AssertFullSemver("1.2.0", configBumpMinor); + + fixture.BranchTo("hotfix/may"); + fixture.AssertFullSemver("1.2.1", configBumpMinor); + + // Move main on + fixture.Checkout(MainBranch); + fixture.MakeACommit(); + fixture.AssertFullSemver("1.3.0", configBumpMinor); + + // Continue on hotfix + fixture.Checkout("hotfix/may"); + fixture.MakeACommit(); // 1.2.1 + fixture.MakeATaggedCommit("1.2.2"); + fixture.MakeACommit(); // 1.2.3 + fixture.AssertFullSemver("1.2.3", configBumpMinor); + } + [Test] public void VerifyForwardMerge() { diff --git a/src/GitVersion.Core/VersionCalculation/MainlineVersionCalculator.cs b/src/GitVersion.Core/VersionCalculation/MainlineVersionCalculator.cs index decbd7dab3..2c1df8e3db 100644 --- a/src/GitVersion.Core/VersionCalculation/MainlineVersionCalculator.cs +++ b/src/GitVersion.Core/VersionCalculation/MainlineVersionCalculator.cs @@ -204,6 +204,7 @@ private ICommit FindMergeBaseBeforeForwardMerge(ICommit? baseVersionSource, IBra { var mergeBase = this.repositoryStore.FindMergeBase(context.CurrentCommit!, mainline.Tip!); var mainlineCommitLog = this.repositoryStore.GetMainlineCommitLog(baseVersionSource, mainline.Tip).ToList(); + //var mainlineCommitLog = this.repositoryStore.GetMainlineCommitLog(mergeBase.Parents.FirstOrDefault(), mainline.Tip).ToList(); // find the mainline commit effective for versioning the current branch mainlineTip = GetEffectiveMainlineTip(mainlineCommitLog, mergeBase, mainline.Tip); From ec3b9bbcba9b327458e5bf23bf8047408474c026 Mon Sep 17 00:00:00 2001 From: koershov <46450300+koershov@users.noreply.github.com> Date: Tue, 27 Jul 2021 18:46:35 +0200 Subject: [PATCH 3/3] Update MainlineVersionCalculator.cs conflict fix --- .../VersionCalculation/MainlineVersionCalculator.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/GitVersion.Core/VersionCalculation/MainlineVersionCalculator.cs b/src/GitVersion.Core/VersionCalculation/MainlineVersionCalculator.cs index 289d2e883b..c42e99e237 100644 --- a/src/GitVersion.Core/VersionCalculation/MainlineVersionCalculator.cs +++ b/src/GitVersion.Core/VersionCalculation/MainlineVersionCalculator.cs @@ -202,7 +202,7 @@ private IBranch GetMainline(ICommit? baseVersionSource) /// The best possible merge base between the current commit and that is not the child of a forward merge. private ICommit FindMergeBaseBeforeForwardMerge(ICommit? baseVersionSource, IBranch mainline, [NotNullWhen(true)] out ICommit? mainlineTip) { - var mergeBase = repositoryStore.FindMergeBase(context.CurrentCommit, mainline.Tip); + var mergeBase = this.repositoryStore.FindMergeBase(context.CurrentCommit, mainline.Tip); //var mainlineCommitLog = this.repositoryStore.GetMainlineCommitLog(mergeBase.Parents.FirstOrDefault(), mainline.Tip).ToList(); var mainlineCommitLog = this.repositoryStore.GetMainlineCommitLog(baseVersionSource, mainline.Tip).ToList();