diff --git a/GitVersionCore.Tests/VersionCalculation/Strategies/MergeMessageBaseVersionStrategyTests.cs b/GitVersionCore.Tests/VersionCalculation/Strategies/MergeMessageBaseVersionStrategyTests.cs index 3ec927236d..1e193003d5 100644 --- a/GitVersionCore.Tests/VersionCalculation/Strategies/MergeMessageBaseVersionStrategyTests.cs +++ b/GitVersionCore.Tests/VersionCalculation/Strategies/MergeMessageBaseVersionStrategyTests.cs @@ -34,6 +34,7 @@ public void ShouldNotAllowIncrementOfVersion() [TestCase("Merge branch '4.0.3'", true, "4.0.3")] //TODO: possible make it a config option to support this [TestCase("Merge branch 'release-10.10.50'", true, "10.10.50")] [TestCase("Merge branch 's'", true, null)] // Must start with a number + [TestCase("Merge tag '10.10.50'", true, "10.10.50")] [TestCase("Merge branch 'release-0.2.0'", true, "0.2.0")] [TestCase("Merge branch 'Release-0.2.0'", true, "0.2.0")] [TestCase("Merge branch 'Release/0.2.0'", true, "0.2.0")] diff --git a/GitVersionCore/VersionCalculation/BaseVersionCalculators/MergeMessageBaseVersionStrategy.cs b/GitVersionCore/VersionCalculation/BaseVersionCalculators/MergeMessageBaseVersionStrategy.cs index 05a30725ec..54a3a810a3 100644 --- a/GitVersionCore/VersionCalculation/BaseVersionCalculators/MergeMessageBaseVersionStrategy.cs +++ b/GitVersionCore/VersionCalculation/BaseVersionCalculators/MergeMessageBaseVersionStrategy.cs @@ -31,75 +31,26 @@ public override BaseVersion GetVersion(GitVersionContext context) static bool TryParse(Commit mergeCommit, EffectiveConfiguration configuration, out SemanticVersion semanticVersion) { - string versionPart; - if (Inner(mergeCommit, out versionPart)) - { - return SemanticVersion.TryParse(versionPart, configuration.GitTagPrefix, out semanticVersion); - } - semanticVersion = null; - return false; + semanticVersion = Inner(mergeCommit, configuration); + return semanticVersion != null; } - static bool Inner(Commit mergeCommit, out string versionPart) + private static SemanticVersion Inner(Commit mergeCommit, EffectiveConfiguration configuration) { if (mergeCommit.Parents.Count() < 2) { - versionPart = null; - return false; - } - - var message = mergeCommit.Message.TrimToFirstLine(); - - var knownMergePrefixes = new[] { "Merge branch 'hotfix-", "Merge branch 'hotfix/", "Merge branch 'release-", "Merge branch 'release/" }; - - foreach (var prefix in knownMergePrefixes) - { - if (message.StartsWith(prefix)) - { - var suffix = message.Substring(prefix.Length); - return TryGetPrefix(suffix, out versionPart, "'"); - } - } - - if (message.StartsWith("Merge branch '")) - { - var suffix = message.Replace("Merge branch '", ""); - - if (suffix.Contains("-")) - { - suffix = suffix.Split('-')[1]; - } - return TryGetPrefix(suffix, out versionPart, "'"); + return null; } - if (message.StartsWith("Merge pull request #")) - { - var split = message.Split(new[] + return mergeCommit + .Message.Split('/', '-', '\'', '"', ' ') + .Select(part => { - "/" - }, StringSplitOptions.RemoveEmptyEntries); - if (split.Length != 2) - { - versionPart = null; - return false; - } - return TryGetSuffix(split[1], out versionPart, "-"); - } - - if (message.StartsWith("Finish Release-")) //Match Syntevo SmartGit client's GitFlow 'release' merge commit message formatting - { - versionPart = message.Replace("Finish Release-", ""); - return true; - } - - if (message.StartsWith("Finish ")) //Match Syntevo SmartGit client's GitFlow 'hotfix' merge commit message formatting - { - versionPart = message.Replace("Finish ", ""); - return true; - } + SemanticVersion v; + return SemanticVersion.TryParse(part, configuration.GitTagPrefix, out v) ? v : null; + }).FirstOrDefault(v => v != null) + ; - versionPart = null; - return false; } static bool TryGetPrefix(string target, out string result, string splitter)