Skip to content

Commit 8367064

Browse files
committed
fix merge message parser
fixes #259
1 parent 75b0872 commit 8367064

File tree

8 files changed

+75
-57
lines changed

8 files changed

+75
-57
lines changed

GitVersionCore.Tests/GitHubFlow/ReleaseBranchTests.cs

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,4 +34,27 @@ public void WhenReleaseBranchIsMergedIntoMasterVersionIsTakenWithIt()
3434
fixture.AssertFullSemver("2.0.0+6");
3535
}
3636
}
37+
[Test]
38+
public void WhenReleaseBranchIsMergedIntoMasterHighestVersionIsTakenWithIt()
39+
{
40+
using (var fixture = new EmptyRepositoryFixture())
41+
{
42+
fixture.Repository.MakeATaggedCommit("1.0.3");
43+
fixture.Repository.MakeCommits(1);
44+
45+
fixture.Repository.CreateBranch("release-2.0.0");
46+
fixture.Repository.Checkout("release-2.0.0");
47+
fixture.Repository.MakeCommits(4);
48+
fixture.Repository.Checkout("master");
49+
fixture.Repository.MergeNoFF("release-2.0.0", Constants.SignatureNow());
50+
51+
fixture.Repository.CreateBranch("release-1.0.0");
52+
fixture.Repository.Checkout("release-1.0.0");
53+
fixture.Repository.MakeCommits(4);
54+
fixture.Repository.Checkout("master");
55+
fixture.Repository.MergeNoFF("release-1.0.0", Constants.SignatureNow());
56+
57+
fixture.AssertFullSemver("2.0.0+11");
58+
}
59+
}
3760
}

GitVersionCore/GitFlow/BranchFinders/MasterVersionFinder.cs

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,23 +8,19 @@ public SemanticVersion FindVersion(IRepository repository, Commit tip)
88
{
99
foreach (var tag in repository.TagsByDate(tip))
1010
{
11-
ShortVersion shortVersion;
12-
if (ShortVersionParser.TryParse(tag.Name, out shortVersion))
11+
ShortVersion shortVersion;
12+
if (ShortVersionParser.TryParse(tag.Name, out shortVersion))
1313
{
1414
return BuildVersion(repository, tip, shortVersion);
1515
}
1616
}
1717

1818
var semanticVersion = new SemanticVersion();
1919

20-
string versionString;
21-
if (MergeMessageParser.TryParse(tip, out versionString))
20+
ShortVersion versionFromTip;
21+
if (MergeMessageParser.TryParse(tip, out versionFromTip))
2222
{
23-
ShortVersion shortVersion;
24-
if (ShortVersionParser.TryParse(versionString, out shortVersion))
25-
{
26-
semanticVersion = BuildVersion(repository, tip, shortVersion);
27-
}
23+
semanticVersion = BuildVersion(repository, tip, versionFromTip);
2824
}
2925

3026
if (semanticVersion == null || semanticVersion.IsEmpty())

GitVersionCore/GitFlow/BranchFinders/SupportVersionFinder.cs

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,10 @@ public SemanticVersion FindVersion(IRepository repository, Commit tip)
1717

1818
var semanticVersion = new SemanticVersion();
1919

20-
string versionString;
21-
if (MergeMessageParser.TryParse(tip, out versionString))
20+
ShortVersion versionFromTip;
21+
if (MergeMessageParser.TryParse(tip, out versionFromTip))
2222
{
23-
ShortVersion shortVersion;
24-
if (ShortVersionParser.TryParse(versionString, out shortVersion))
25-
{
26-
semanticVersion = BuildVersion(repository, tip, shortVersion);
27-
}
23+
semanticVersion = BuildVersion(repository, tip, versionFromTip);
2824
}
2925

3026
semanticVersion.OverrideVersionManuallyIfNeeded(repository);
Lines changed: 21 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
namespace GitVersion
22
{
33
using System;
4+
using System.Collections.Generic;
45
using System.Linq;
56

67
public class MergedBranchesWithVersionFinder
@@ -19,28 +20,32 @@ public SemanticVersion GetVersion()
1920

2021
SemanticVersion GetVersion(GitVersionContext context)
2122
{
23+
var shortVersion = GetAllVersions(context)
24+
.OrderBy(x=>x.Major)
25+
.ThenBy(x=>x.Minor).ThenBy(x=>x.Patch)
26+
.LastOrDefault();
27+
if (shortVersion == null)
28+
{
29+
return null;
30+
}
31+
return new SemanticVersion
32+
{
33+
Major = shortVersion.Major,
34+
Minor = shortVersion.Minor,
35+
Patch = shortVersion.Patch
36+
};
37+
}
2238

39+
static IEnumerable<ShortVersion> GetAllVersions(GitVersionContext context)
40+
{
2341
foreach (var commit in context.CurrentBranch.Commits)
2442
{
25-
string versionPart;
26-
if (MergeMessageParser.TryParse(commit, out versionPart))
43+
ShortVersion version;
44+
if (MergeMessageParser.TryParse(commit, out version))
2745
{
28-
46+
yield return version;
2947
}
3048
}
31-
return context.CurrentBranch.Commits.Where(c =>
32-
{
33-
string versionPart;
34-
SemanticVersion semanticVersion;
35-
return MergeMessageParser.TryParse(c, out versionPart) && SemanticVersion.TryParse(versionPart, out semanticVersion);
36-
})
37-
.Select(c =>
38-
{
39-
string versionPart;
40-
MergeMessageParser.TryParse(c, out versionPart);
41-
return SemanticVersion.Parse(versionPart);
42-
})
43-
.Max();
4449
}
4550
}
4651
}

GitVersionCore/MergeMessageParser.cs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,15 @@ namespace GitVersion
66

77
static class MergeMessageParser
88
{
9-
public static bool TryParse(Commit mergeCommit, out string versionPart)
9+
public static bool TryParse(Commit mergeCommit, out ShortVersion shortVersion)
1010
{
11-
return Inner(mergeCommit, out versionPart);
11+
string versionPart;
12+
if (Inner(mergeCommit, out versionPart))
13+
{
14+
return ShortVersionParser.TryParse(versionPart, out shortVersion);
15+
}
16+
shortVersion = null;
17+
return false;
1218
}
1319

1420
static bool Inner(Commit mergeCommit, out string versionPart)

GitVersionCore/VersionOnMasterFinder.cs

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -27,22 +27,18 @@ public VersionPoint Execute(GitVersionContext context, DateTimeOffset olderThan)
2727
};
2828
}
2929
}
30-
string versionString;
31-
if (MergeMessageParser.TryParse(commit, out versionString))
30+
31+
ShortVersion shortVersionFromMergeMessage;
32+
if (MergeMessageParser.TryParse(commit, out shortVersionFromMergeMessage))
3233
{
33-
ShortVersion shortVersion;
34-
if (ShortVersionParser.TryParseMajorMinor(versionString, out shortVersion))
34+
return new VersionPoint
3535
{
36-
return new VersionPoint
37-
{
38-
Major = shortVersion.Major,
39-
Minor = shortVersion.Minor,
40-
Timestamp = commit.When(),
41-
CommitSha = commit.Sha,
42-
};
43-
}
36+
Major = shortVersionFromMergeMessage.Major,
37+
Minor = shortVersionFromMergeMessage.Minor,
38+
Timestamp = commit.When(),
39+
CommitSha = commit.Sha,
40+
};
4441
}
45-
4642
}
4743
return new VersionPoint
4844
{

GitVersionTask.Tests/IntegrationTests.cs

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,10 @@ public void ProcessAllTheCommits()
1616
{
1717
foreach (var commit in branch.Commits)
1818
{
19-
string versionPart;
20-
if (MergeMessageParser.TryParse(commit, out versionPart))
19+
ShortVersion version;
20+
if (MergeMessageParser.TryParse(commit, out version))
2121
{
22-
Debug.WriteLine(versionPart);
23-
SemanticVersion version;
24-
if (SemanticVersion.TryParse(versionPart, out version))
25-
{
26-
Debug.WriteLine("{0}.{1}.{2}.{3}.{4}", version.Major, version.Minor, version.Patch, version.PreReleaseTag, version.BuildMetaData);
27-
}
22+
Debug.WriteLine("{0}.{1}.{2}", version.Major, version.Minor, version.Patch);
2823
}
2924
}
3025
}

GitVersionTask.Tests/MergeMessageParserTests.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ static void AssertMereMessage(string message, string expectedVersion, List<Commi
4646
ParentsEx = parents
4747
};
4848

49-
string versionPart;
49+
ShortVersion versionPart;
5050
var parsed = MergeMessageParser.TryParse(commit, out versionPart);
5151

5252
if (expectedVersion == null)
@@ -56,7 +56,8 @@ static void AssertMereMessage(string message, string expectedVersion, List<Commi
5656
else
5757
{
5858
parsed.ShouldBe(true);
59-
versionPart.ShouldBe(expectedVersion);
59+
var versionAsString = string.Format("{0}.{1}.{2}", versionPart.Major, versionPart.Minor, versionPart.Patch);
60+
versionAsString.ShouldBe(expectedVersion);
6061
}
6162
}
6263

0 commit comments

Comments
 (0)