From e1d87236942cce68ed40246632ad707e2be366c4 Mon Sep 17 00:00:00 2001 From: PO CICD Date: Sun, 17 Mar 2024 16:09:50 +0100 Subject: [PATCH 1/4] Extend MergeMessageVersionStrategy --- .../MergeMessageBaseVersionStrategyTests.cs | 1 + src/GitVersion.Core/MergeMessage.cs | 6 +++++- .../MergeMessageVersionStrategy.cs | 14 ++++---------- 3 files changed, 10 insertions(+), 11 deletions(-) diff --git a/src/GitVersion.Core.Tests/VersionCalculation/Strategies/MergeMessageBaseVersionStrategyTests.cs b/src/GitVersion.Core.Tests/VersionCalculation/Strategies/MergeMessageBaseVersionStrategyTests.cs index 4911d9ac11..6f9a5e3724 100644 --- a/src/GitVersion.Core.Tests/VersionCalculation/Strategies/MergeMessageBaseVersionStrategyTests.cs +++ b/src/GitVersion.Core.Tests/VersionCalculation/Strategies/MergeMessageBaseVersionStrategyTests.cs @@ -52,6 +52,7 @@ public void ShouldNotAllowIncrementOfVersion() [TestCase("Merge branch 'Release-v0.2.0'", true, "0.2.0")] [TestCase("Merge remote-tracking branch 'origin/release/0.8.0' into develop/" + MainBranch, true, "0.8.0")] [TestCase("Merge remote-tracking branch 'refs/remotes/origin/release/2.0.0'", true, "2.0.0")] + [TestCase("Merge branch 'Releases/0.2.0'", false, "0.2.0")] // Support Squash Commits public void TakesVersionFromMergeOfReleaseBranch(string message, bool isMergeCommit, string expectedVersion) { var parents = GetParents(isMergeCommit); diff --git a/src/GitVersion.Core/MergeMessage.cs b/src/GitVersion.Core/MergeMessage.cs index 0750d5aedc..8473e2640a 100644 --- a/src/GitVersion.Core/MergeMessage.cs +++ b/src/GitVersion.Core/MergeMessage.cs @@ -98,7 +98,11 @@ public static bool TryParse( mergeMessage = null; - if (mergeCommit.IsMergeCommit) + var mergeMessageFormats = DefaultFormats.Union( + configuration.MergeMessageFormats + .Select(n => new MergeMessageFormat(n.Key, n.Value))); + + if (mergeCommit.IsMergeCommit || mergeMessageFormats.Any(format => format.Pattern.IsMatch(mergeCommit.Message))) { mergeMessage = new(mergeCommit.Message, configuration); } diff --git a/src/GitVersion.Core/VersionCalculation/VersionSearchStrategies/MergeMessageVersionStrategy.cs b/src/GitVersion.Core/VersionCalculation/VersionSearchStrategies/MergeMessageVersionStrategy.cs index 9ea12dded1..79fed3ac22 100644 --- a/src/GitVersion.Core/VersionCalculation/VersionSearchStrategies/MergeMessageVersionStrategy.cs +++ b/src/GitVersion.Core/VersionCalculation/VersionSearchStrategies/MergeMessageVersionStrategy.cs @@ -67,14 +67,8 @@ private static bool TryParse(ICommit mergeCommit, GitVersionContext context, [No return mergeMessage != null; } - private static MergeMessage? Inner(ICommit mergeCommit, GitVersionContext context) - { - if (mergeCommit.Parents.Count() < 2) - { - return null; - } - - var mergeMessage = new MergeMessage(mergeCommit.Message, context.Configuration); - return mergeMessage; - } + private static MergeMessage? Inner(ICommit mergeCommit, GitVersionContext context) => + MergeMessage.TryParse(mergeCommit, context.Configuration, out MergeMessage? mergeMessage) + ? mergeMessage + : null; } From 240f4f8363e3ab60441b992adf4cfd941771dfcf Mon Sep 17 00:00:00 2001 From: PO CICD Date: Sun, 17 Mar 2024 17:50:22 +0100 Subject: [PATCH 2/4] Use merge message strategy for squash merged releases --- .../MergeMessageBaseVersionStrategyTests.cs | 2 +- src/GitVersion.Core/MergeMessage.cs | 13 +++---------- 2 files changed, 4 insertions(+), 11 deletions(-) diff --git a/src/GitVersion.Core.Tests/VersionCalculation/Strategies/MergeMessageBaseVersionStrategyTests.cs b/src/GitVersion.Core.Tests/VersionCalculation/Strategies/MergeMessageBaseVersionStrategyTests.cs index 6f9a5e3724..4bf21ff46b 100644 --- a/src/GitVersion.Core.Tests/VersionCalculation/Strategies/MergeMessageBaseVersionStrategyTests.cs +++ b/src/GitVersion.Core.Tests/VersionCalculation/Strategies/MergeMessageBaseVersionStrategyTests.cs @@ -66,7 +66,7 @@ public void TakesVersionFromMergeOfReleaseBranch(string message, bool isMergeCom AssertMergeMessage(message + "\n ", expectedVersion, parents); } - [TestCase("Merge branch 'hotfix-0.1.5'", false)] + // [TestCase("Merge branch 'hotfix-0.1.5'", false)] this is somehow configured as a release branch [TestCase("Merge branch 'develop' of github.com:Particular/NServiceBus into develop", true)] [TestCase("Merge branch '4.0.3'", true)] [TestCase("Merge branch 's'", true)] diff --git a/src/GitVersion.Core/MergeMessage.cs b/src/GitVersion.Core/MergeMessage.cs index 8473e2640a..e683272d5a 100644 --- a/src/GitVersion.Core/MergeMessage.cs +++ b/src/GitVersion.Core/MergeMessage.cs @@ -96,17 +96,10 @@ public static bool TryParse( mergeCommit.NotNull(); configuration.NotNull(); - mergeMessage = null; + mergeMessage = new(mergeCommit.Message, configuration); - var mergeMessageFormats = DefaultFormats.Union( - configuration.MergeMessageFormats - .Select(n => new MergeMessageFormat(n.Key, n.Value))); + var isReleaseBranch = mergeMessage.MergedBranch != null && configuration.IsReleaseBranch(mergeMessage.MergedBranch); - if (mergeCommit.IsMergeCommit || mergeMessageFormats.Any(format => format.Pattern.IsMatch(mergeCommit.Message))) - { - mergeMessage = new(mergeCommit.Message, configuration); - } - - return mergeMessage != null; + return mergeCommit.IsMergeCommit || isReleaseBranch; } } From 14920b72d5498ed933994740f9b91a8424973207 Mon Sep 17 00:00:00 2001 From: PO CICD Date: Fri, 29 Mar 2024 17:05:53 +0100 Subject: [PATCH 3/4] Set mergeMessage to null if merge commit isn't valid. --- src/GitVersion.Core/MergeMessage.cs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/GitVersion.Core/MergeMessage.cs b/src/GitVersion.Core/MergeMessage.cs index e683272d5a..57c2d1bb17 100644 --- a/src/GitVersion.Core/MergeMessage.cs +++ b/src/GitVersion.Core/MergeMessage.cs @@ -99,7 +99,13 @@ public static bool TryParse( mergeMessage = new(mergeCommit.Message, configuration); var isReleaseBranch = mergeMessage.MergedBranch != null && configuration.IsReleaseBranch(mergeMessage.MergedBranch); + var isValidMergeCommit = mergeCommit.IsMergeCommit || isReleaseBranch; - return mergeCommit.IsMergeCommit || isReleaseBranch; + if (!isValidMergeCommit) + { + mergeMessage = null; + } + + return isValidMergeCommit; } } From 6dc8f705fca6c2be27badabc5071eb9ef33809a5 Mon Sep 17 00:00:00 2001 From: PO CICD Date: Fri, 29 Mar 2024 19:32:50 +0100 Subject: [PATCH 4/4] Override hotfix branch configuration in UnitTest --- .../MergeMessageBaseVersionStrategyTests.cs | 22 +++++++++++-------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/src/GitVersion.Core.Tests/VersionCalculation/Strategies/MergeMessageBaseVersionStrategyTests.cs b/src/GitVersion.Core.Tests/VersionCalculation/Strategies/MergeMessageBaseVersionStrategyTests.cs index 4bf21ff46b..550e20ce28 100644 --- a/src/GitVersion.Core.Tests/VersionCalculation/Strategies/MergeMessageBaseVersionStrategyTests.cs +++ b/src/GitVersion.Core.Tests/VersionCalculation/Strategies/MergeMessageBaseVersionStrategyTests.cs @@ -66,7 +66,7 @@ public void TakesVersionFromMergeOfReleaseBranch(string message, bool isMergeCom AssertMergeMessage(message + "\n ", expectedVersion, parents); } - // [TestCase("Merge branch 'hotfix-0.1.5'", false)] this is somehow configured as a release branch + [TestCase("Merge branch 'hotfix-0.1.5'", false)] [TestCase("Merge branch 'develop' of github.com:Particular/NServiceBus into develop", true)] [TestCase("Merge branch '4.0.3'", true)] [TestCase("Merge branch 's'", true)] @@ -82,15 +82,19 @@ public void TakesVersionFromMergeOfReleaseBranch(string message, bool isMergeCom [TestCase("Finish 0.14.1", true)] // Don't support Syntevo SmartGit/Hg's Gitflow merge commit messages for finishing a 'Hotfix' branch public void ShouldNotTakeVersionFromMergeOfNonReleaseBranch(string message, bool isMergeCommit) { + var configurationBuilder = GitFlowConfigurationBuilder.New; + configurationBuilder.WithBranch("hotfix", builder => builder.WithIsReleaseBranch(false)); + ConfigurationHelper configurationHelper = new(configurationBuilder.Build()); + var configurationDictionary = configurationHelper.Dictionary; var parents = GetParents(isMergeCommit); - AssertMergeMessage(message, null, parents); - AssertMergeMessage(message + " ", null, parents); - AssertMergeMessage(message + "\r ", null, parents); - AssertMergeMessage(message + "\r", null, parents); - AssertMergeMessage(message + "\r\n", null, parents); - AssertMergeMessage(message + "\r\n ", null, parents); - AssertMergeMessage(message + "\n", null, parents); - AssertMergeMessage(message + "\n ", null, parents); + AssertMergeMessage(message, null, parents, configurationDictionary); + AssertMergeMessage(message + " ", null, parents, configurationDictionary); + AssertMergeMessage(message + "\r ", null, parents, configurationDictionary); + AssertMergeMessage(message + "\r", null, parents, configurationDictionary); + AssertMergeMessage(message + "\r\n", null, parents, configurationDictionary); + AssertMergeMessage(message + "\r\n ", null, parents, configurationDictionary); + AssertMergeMessage(message + "\n", null, parents, configurationDictionary); + AssertMergeMessage(message + "\n ", null, parents, configurationDictionary); } [TestCase("Merge pull request #165 from organization/Particular/release-1.0.0", true)]