Skip to content

Commit 8577dd1

Browse files
committed
MergeMessageParser inlined and removed duplicated tests
1 parent 6171f94 commit 8577dd1

File tree

6 files changed

+114
-206
lines changed

6 files changed

+114
-206
lines changed

GitVersionCore.Tests/GitVersionCore.Tests.csproj

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,6 @@
9595
<Compile Include="Helpers\Constants.cs" />
9696
<Compile Include="InformationalVersionBuilderTests.cs" />
9797
<Compile Include="JsonVersionBuilderTests.cs" />
98-
<Compile Include="MergeMessageParserTests.cs" />
9998
<Compile Include="Mocks\MockBranch.cs" />
10099
<Compile Include="Mocks\MockBranchCollection.cs" />
101100
<Compile Include="Mocks\MockCommit.cs" />

GitVersionCore.Tests/MergeMessageParserTests.cs

Lines changed: 0 additions & 82 deletions
This file was deleted.

GitVersionCore.Tests/VersionCalculation/Strategies/MergeMessageBaseVersionStrategyTests.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ public void ShouldNotAllowIncrementOfVersion()
3838
[TestCase("Merge branch 'hotfix-4.6.6' into support-4.6", true, "4.6.6")]
3939
[TestCase("Merge branch 'hotfix-10.10.50'", true, "10.10.50")]
4040
[TestCase("Merge branch 'hotfix-0.1.5'", true, "0.1.5")]
41+
[TestCase("Merge branch 'hotfix-4.2.2' into support-4.2", true, "4.2.2")]
4142
[TestCase("Merge branch 'hotfix-0.1.5'\n\nRelates to: TicketId", true, "0.1.5")]
4243
[TestCase("Merge branch 'alpha-0.1.5'", true, "0.1.5")]
4344
[TestCase("Merge pull request #165 from Particular/release-1.0.0", true, "1.0.0")]

GitVersionCore/GitVersionCore.csproj

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,6 @@
108108
<Compile Include="Extensions\ExtensionMethods.cs" />
109109
<Compile Include="GitDirFinder.cs" />
110110
<Compile Include="GitFlow\BranchType.cs" />
111-
<Compile Include="MergeMessageParser.cs" />
112111
<Compile Include="GitVersionContext.cs" />
113112
<Compile Include="GitVersionFinder.cs" />
114113
<Compile Include="Helpers\DeleteHelper.cs" />

GitVersionCore/MergeMessageParser.cs

Lines changed: 0 additions & 120 deletions
This file was deleted.

GitVersionCore/VersionCalculation/BaseVersionCalculators/MergeMessageBaseVersionStrategy.cs

Lines changed: 113 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
namespace GitVersion.VersionCalculation.BaseVersionCalculators
22
{
3+
using System;
34
using System.Linq;
5+
using LibGit2Sharp;
46

57
public class MergeMessageBaseVersionStrategy : BaseVersionStrategy
68
{
@@ -12,8 +14,7 @@ public override BaseVersion GetVersion(GitVersionContext context)
1214
.SelectMany(c =>
1315
{
1416
SemanticVersion semanticVersion;
15-
// TODO when this approach works, inline the other class into here
16-
if (MergeMessageParser.TryParse(c, context.Configuration, out semanticVersion))
17+
if (TryParse(c, context.Configuration, out semanticVersion))
1718
{
1819
var shouldIncrement = !context.Configuration.PreventIncrementForMergedBranchVersion;
1920
return new[]
@@ -27,5 +28,115 @@ public override BaseVersion GetVersion(GitVersionContext context)
2728

2829
return baseVersions.Length > 1 ? baseVersions.Aggregate((x, y) => x.SemanticVersion > y.SemanticVersion ? x : y) : baseVersions.SingleOrDefault();
2930
}
31+
public static bool TryParse(Commit mergeCommit, EffectiveConfiguration configuration, out SemanticVersion semanticVersion)
32+
{
33+
string versionPart;
34+
if (Inner(mergeCommit, out versionPart))
35+
{
36+
return SemanticVersion.TryParse(versionPart, configuration.GitTagPrefix, out semanticVersion);
37+
}
38+
semanticVersion = null;
39+
return false;
40+
}
41+
42+
static bool Inner(Commit mergeCommit, out string versionPart)
43+
{
44+
if (mergeCommit.Parents.Count() < 2)
45+
{
46+
versionPart = null;
47+
return false;
48+
}
49+
50+
var message = mergeCommit.Message.TrimToFirstLine();
51+
52+
53+
if (message.StartsWith("Merge branch 'hotfix-"))
54+
{
55+
var suffix = message.Replace("Merge branch 'hotfix-", "");
56+
return TryGetPrefix(suffix, out versionPart, "'");
57+
}
58+
59+
if (message.StartsWith("Merge branch 'hotfix/"))
60+
{
61+
var suffix = message.Replace("Merge branch 'hotfix/", "");
62+
return TryGetPrefix(suffix, out versionPart, "'");
63+
}
64+
65+
if (message.StartsWith("Merge branch 'release-"))
66+
{
67+
var suffix = message.Replace("Merge branch 'release-", "");
68+
return TryGetPrefix(suffix, out versionPart, "'");
69+
}
70+
71+
if (message.StartsWith("Merge branch 'release/"))
72+
{
73+
var suffix = message.Replace("Merge branch 'release/", "");
74+
return TryGetPrefix(suffix, out versionPart, "'");
75+
}
76+
77+
if (message.StartsWith("Merge branch '"))
78+
{
79+
var suffix = message.Replace("Merge branch '", "");
80+
81+
if (suffix.Contains("-"))
82+
{
83+
suffix = suffix.Split('-')[1];
84+
}
85+
return TryGetPrefix(suffix, out versionPart, "'");
86+
}
87+
88+
if (message.StartsWith("Merge pull request #"))
89+
{
90+
var split = message.Split(new[]
91+
{
92+
"/"
93+
}, StringSplitOptions.RemoveEmptyEntries);
94+
if (split.Length != 2)
95+
{
96+
versionPart = null;
97+
return false;
98+
}
99+
return TryGetSuffix(split[1], out versionPart, "-");
100+
}
101+
102+
if (message.StartsWith("Finish Release-")) //Match Syntevo SmartGit client's GitFlow 'release' merge commit message formatting
103+
{
104+
versionPart = message.Replace("Finish Release-", "");
105+
return true;
106+
}
107+
108+
if (message.StartsWith("Finish ")) //Match Syntevo SmartGit client's GitFlow 'hotfix' merge commit message formatting
109+
{
110+
versionPart = message.Replace("Finish ", "");
111+
return true;
112+
}
113+
114+
versionPart = null;
115+
return false;
116+
}
117+
118+
static bool TryGetPrefix(string target, out string result, string splitter)
119+
{
120+
var indexOf = target.IndexOf(splitter);
121+
if (indexOf == -1)
122+
{
123+
result = null;
124+
return false;
125+
}
126+
result = target.Substring(0, indexOf);
127+
return true;
128+
}
129+
130+
static bool TryGetSuffix(string target, out string result, string splitter)
131+
{
132+
var indexOf = target.IndexOf(splitter);
133+
if (indexOf == -1)
134+
{
135+
result = null;
136+
return false;
137+
}
138+
result = target.Substring(indexOf + 1, target.Length - indexOf - 1);
139+
return true;
140+
}
30141
}
31142
}

0 commit comments

Comments
 (0)