Skip to content

Commit db7beab

Browse files
committed
A more strict approach for finding versions in commit messages
* Applied a more strict approach to find version in merge commits * Assume that the version is specified at the first commit message line Fixed #385
1 parent d282d79 commit db7beab

File tree

2 files changed

+27
-29
lines changed

2 files changed

+27
-29
lines changed

GitVersionCore.Tests/VersionCalculation/Strategies/MergeMessageBaseVersionStrategyTests.cs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,25 @@ public void AssertMergeMessage(string message, bool isMergeCommit, string expect
6767
AssertMergeMessage(message + "\n ", expectedVersion, parents);
6868
}
6969

70+
[TestCase(@"Merge pull request #1 in FOO/bar from feature/ISSUE-1 to develop
71+
72+
* commit '38560a7eed06e8d3f3f1aaf091befcdf8bf50fea':
73+
Updated jQuery to v2.1.3")]
74+
[TestCase(@"Merge pull request #45 in BRIKKS/brikks from feature/NOX-68 to develop
75+
76+
* commit '38560a7eed06e8d3f3f1aaf091befcdf8bf50fea':
77+
Another commit message
78+
Commit message including a IP-number https://10.50.1.1
79+
A commit message")]
80+
[TestCase(@"Merge branch 'release/Sprint_2.0_Holdings_Computed_Balances'")]
81+
public void MergeMessagesThatsNotRelatedToGitVersion(string commitMessage)
82+
{
83+
84+
var parents = GetParents(true);
85+
86+
AssertMergeMessage(commitMessage, null, parents);
87+
}
88+
7089
static void AssertMergeMessage(string message, string expectedVersion, List<Commit> parents)
7190
{
7291
var commit = new MockCommit

GitVersionCore/VersionCalculation/BaseVersionCalculators/MergeMessageBaseVersionStrategy.cs

Lines changed: 8 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
namespace GitVersion.VersionCalculation.BaseVersionCalculators
22
{
33
using System;
4+
using System.Collections.Generic;
45
using System.Linq;
6+
using System.Text.RegularExpressions;
57
using LibGit2Sharp;
68

79
public class MergeMessageBaseVersionStrategy : BaseVersionStrategy
@@ -42,39 +44,16 @@ private static SemanticVersion Inner(Commit mergeCommit, EffectiveConfiguration
4244
return null;
4345
}
4446

45-
return mergeCommit
46-
.Message.Split('/', '-', '\'', '"', ' ')
47+
var possibleVersions = Regex.Matches(mergeCommit.Message, @"^.*?(-|/|'|Finish )(?<PossibleVersions>\d+\.\d+\.\d+)")
48+
.Cast<Match>()
49+
.Select(m => m.Groups["PossibleVersions"].Value);
50+
51+
return possibleVersions
4752
.Select(part =>
4853
{
4954
SemanticVersion v;
5055
return SemanticVersion.TryParse(part, configuration.GitTagPrefix, out v) ? v : null;
51-
}).FirstOrDefault(v => v != null)
52-
;
53-
54-
}
55-
56-
static bool TryGetPrefix(string target, out string result, string splitter)
57-
{
58-
var indexOf = target.IndexOf(splitter, StringComparison.Ordinal);
59-
if (indexOf == -1)
60-
{
61-
result = null;
62-
return false;
63-
}
64-
result = target.Substring(0, indexOf);
65-
return true;
66-
}
67-
68-
static bool TryGetSuffix(string target, out string result, string splitter)
69-
{
70-
var indexOf = target.IndexOf(splitter, StringComparison.Ordinal);
71-
if (indexOf == -1)
72-
{
73-
result = null;
74-
return false;
75-
}
76-
result = target.Substring(indexOf + 1, target.Length - indexOf - 1);
77-
return true;
56+
}).FirstOrDefault(v => v != null);
7857
}
7958
}
8059
}

0 commit comments

Comments
 (0)