Skip to content

Commit ab9cc0d

Browse files
committed
Merge pull request #383 from eggapauli/feature/fix-merge-detection
Feature/fix merge detection
2 parents ea74acb + 0ee69e9 commit ab9cc0d

File tree

2 files changed

+12
-60
lines changed

2 files changed

+12
-60
lines changed

GitVersionCore.Tests/VersionCalculation/Strategies/MergeMessageBaseVersionStrategyTests.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ public void ShouldNotAllowIncrementOfVersion()
3434
[TestCase("Merge branch '4.0.3'", true, "4.0.3")] //TODO: possible make it a config option to support this
3535
[TestCase("Merge branch 'release-10.10.50'", true, "10.10.50")]
3636
[TestCase("Merge branch 's'", true, null)] // Must start with a number
37+
[TestCase("Merge tag '10.10.50'", true, "10.10.50")]
3738
[TestCase("Merge branch 'release-0.2.0'", true, "0.2.0")]
3839
[TestCase("Merge branch 'Release-0.2.0'", true, "0.2.0")]
3940
[TestCase("Merge branch 'Release/0.2.0'", true, "0.2.0")]

GitVersionCore/VersionCalculation/BaseVersionCalculators/MergeMessageBaseVersionStrategy.cs

Lines changed: 11 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -31,75 +31,26 @@ public override BaseVersion GetVersion(GitVersionContext context)
3131

3232
static bool TryParse(Commit mergeCommit, EffectiveConfiguration configuration, out SemanticVersion semanticVersion)
3333
{
34-
string versionPart;
35-
if (Inner(mergeCommit, out versionPart))
36-
{
37-
return SemanticVersion.TryParse(versionPart, configuration.GitTagPrefix, out semanticVersion);
38-
}
39-
semanticVersion = null;
40-
return false;
34+
semanticVersion = Inner(mergeCommit, configuration);
35+
return semanticVersion != null;
4136
}
4237

43-
static bool Inner(Commit mergeCommit, out string versionPart)
38+
private static SemanticVersion Inner(Commit mergeCommit, EffectiveConfiguration configuration)
4439
{
4540
if (mergeCommit.Parents.Count() < 2)
4641
{
47-
versionPart = null;
48-
return false;
49-
}
50-
51-
var message = mergeCommit.Message.TrimToFirstLine();
52-
53-
var knownMergePrefixes = new[] { "Merge branch 'hotfix-", "Merge branch 'hotfix/", "Merge branch 'release-", "Merge branch 'release/" };
54-
55-
foreach (var prefix in knownMergePrefixes)
56-
{
57-
if (message.StartsWith(prefix))
58-
{
59-
var suffix = message.Substring(prefix.Length);
60-
return TryGetPrefix(suffix, out versionPart, "'");
61-
}
62-
}
63-
64-
if (message.StartsWith("Merge branch '"))
65-
{
66-
var suffix = message.Replace("Merge branch '", "");
67-
68-
if (suffix.Contains("-"))
69-
{
70-
suffix = suffix.Split('-')[1];
71-
}
72-
return TryGetPrefix(suffix, out versionPart, "'");
42+
return null;
7343
}
7444

75-
if (message.StartsWith("Merge pull request #"))
76-
{
77-
var split = message.Split(new[]
45+
return mergeCommit
46+
.Message.Split('/', '-', '\'', '"', ' ')
47+
.Select(part =>
7848
{
79-
"/"
80-
}, StringSplitOptions.RemoveEmptyEntries);
81-
if (split.Length != 2)
82-
{
83-
versionPart = null;
84-
return false;
85-
}
86-
return TryGetSuffix(split[1], out versionPart, "-");
87-
}
88-
89-
if (message.StartsWith("Finish Release-")) //Match Syntevo SmartGit client's GitFlow 'release' merge commit message formatting
90-
{
91-
versionPart = message.Replace("Finish Release-", "");
92-
return true;
93-
}
94-
95-
if (message.StartsWith("Finish ")) //Match Syntevo SmartGit client's GitFlow 'hotfix' merge commit message formatting
96-
{
97-
versionPart = message.Replace("Finish ", "");
98-
return true;
99-
}
49+
SemanticVersion v;
50+
return SemanticVersion.TryParse(part, configuration.GitTagPrefix, out v) ? v : null;
51+
}).FirstOrDefault(v => v != null)
52+
;
10053

101-
versionPart = null;
102-
return false;
10354
}
10455

10556
static bool TryGetPrefix(string target, out string result, string splitter)

0 commit comments

Comments
 (0)