Skip to content

Commit e91288d

Browse files
committed
Include merge commit in increment calculation for mainline
1 parent 960def5 commit e91288d

File tree

3 files changed

+24
-19
lines changed

3 files changed

+24
-19
lines changed

docs/versioning-mode.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
# Versioning modes
2+
GitVersion has multiple modes to fit different

src/GitVersionCore.Tests/IntegrationTests/MainlineDevelopmentMode.cs

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using GitTools.Testing;
22
using GitVersion;
33
using GitVersionCore.Tests;
4+
using LibGit2Sharp;
45
using NUnit.Framework;
56

67
public class MainlineDevelopmentMode
@@ -34,10 +35,16 @@ public void MergedFeatureBranchesToMasterImpliesRelease()
3435
fixture.AssertFullSemver(config, "0.2.0+5");
3536

3637
fixture.BranchTo("feature/foo3");
37-
fixture.Repository.MakeACommit("4 +semver: minor");
38-
fixture.AssertFullSemver(config, "0.3.0-foo3.1+6");
38+
fixture.Repository.MakeACommit("4");
3939
fixture.Checkout("master");
4040
fixture.MergeNoFF("feature/foo3");
41+
var commit = fixture.Repository.Head.Tip;
42+
// Put semver increment in merge message
43+
fixture.Repository.Commit(commit.Message + " +semver: minor", commit.Author, commit.Committer, new CommitOptions
44+
{
45+
AmendPreviousCommit = true
46+
});
47+
commit = fixture.Repository.Head.Tip;
4148
fixture.AssertFullSemver(config, "0.3.0+7");
4249

4350
fixture.BranchTo("feature/foo4");

src/GitVersionCore/VersionCalculation/NextVersionCalculator.cs

Lines changed: 13 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -43,15 +43,9 @@ public SemanticVersion FindVersion(GitVersionContext context)
4343
}
4444

4545
var baseVersion = baseVersionFinder.GetBaseVersion(context);
46-
var semver = baseVersion.SemanticVersion;
47-
if (context.Configuration.VersioningMode == VersioningMode.Mainline)
48-
{
49-
semver = FindMainlineModeVersion(baseVersion, context);
50-
}
51-
else
52-
{
53-
semver = PerformIncrement(context, baseVersion, semver);
54-
}
46+
var semver = context.Configuration.VersioningMode == VersioningMode.Mainline ?
47+
FindMainlineModeVersion(baseVersion, context) :
48+
PerformIncrement(context, baseVersion);
5549

5650
if (!semver.PreReleaseTag.HasTag() && !string.IsNullOrEmpty(context.Configuration.Tag))
5751
{
@@ -69,8 +63,9 @@ public SemanticVersion FindVersion(GitVersionContext context)
6963
return taggedSemanticVersion ?? semver;
7064
}
7165

72-
private static SemanticVersion PerformIncrement(GitVersionContext context, BaseVersion baseVersion, SemanticVersion semver)
66+
private static SemanticVersion PerformIncrement(GitVersionContext context, BaseVersion baseVersion)
7367
{
68+
var semver = baseVersion.SemanticVersion;
7469
var increment = IncrementStrategyFinder.DetermineIncrementedField(context, baseVersion);
7570
if (increment != null)
7671
{
@@ -102,35 +97,36 @@ private SemanticVersion FindMainlineModeVersion(BaseVersion baseVersion, GitVers
10297
Logger.WriteInfo(string.Format("Found {0} merge commits to evaluate increments for..", mergeCommits.Count));
10398

10499
var mainlineVersion = mergeCommits
105-
.Select(mc =>
100+
.Select(mergeCommit =>
106101
{
107-
var mergedHead = GetMergedHead(mc);
108-
var findMergeBase = context.Repository.ObjectDatabase.FindMergeBase(mc.Parents.First(), mergedHead);
109-
return FindMessageIncrement(context, mergedHead, findMergeBase);
102+
var mergedHead = GetMergedHead(mergeCommit);
103+
var findMergeBase = context.Repository.ObjectDatabase.FindMergeBase(mergeCommit.Parents.First(), mergedHead);
104+
return FindMessageIncrement(context, mergeCommit, mergedHead, findMergeBase);
110105
})
111106
.Aggregate(baseVersion.SemanticVersion, (v, i) => v.IncrementVersion(i));
112107

113108
if (context.CurrentBranch.FriendlyName != "master")
114109
{
115110
var mergedHead = context.CurrentCommit;
116111
var findMergeBase = context.Repository.FindBranch("master").Tip;
117-
var branchIncrement = FindMessageIncrement(context, mergedHead, findMergeBase);
112+
var branchIncrement = FindMessageIncrement(context, findMergeBase, mergedHead, findMergeBase);
118113
Logger.WriteInfo(string.Format("Performing {0} increment for current branch ", branchIncrement));
119114
mainlineVersion = mainlineVersion.IncrementVersion(branchIncrement);
120115
}
121116
return mainlineVersion;
122117
}
123118
}
124119

125-
private static VersionField FindMessageIncrement(GitVersionContext context, Commit mergedHead, Commit findMergeBase)
120+
private static VersionField FindMessageIncrement(GitVersionContext context, Commit mergeCommit, Commit mergedHead, Commit findMergeBase)
126121
{
127122
var filter = new CommitFilter
128123
{
129124
IncludeReachableFrom = mergedHead,
130125
ExcludeReachableFrom = findMergeBase
131126
};
132127
var commits = context.Repository.Commits.QueryBy(filter).ToList();
133-
return IncrementStrategyFinder.GetIncrementForCommits(context, commits) ?? VersionField.Patch;
128+
// Need to include merge commit in increment cal
129+
return IncrementStrategyFinder.GetIncrementForCommits(context, new [] { mergeCommit }.Union(commits)) ?? VersionField.Patch;
134130
}
135131

136132
private Commit GetMergedHead(Commit mergeCommit)

0 commit comments

Comments
 (0)