Skip to content

Commit 83e150f

Browse files
committed
When a branch is merged in mainline, try to get the increment configuration for the merged branch
1 parent 047de5c commit 83e150f

File tree

2 files changed

+51
-4
lines changed

2 files changed

+51
-4
lines changed

src/GitVersionCore.Tests/IntegrationTests/MainlineDevelopmentMode.cs

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
using GitVersionCore.Tests;
77
using LibGit2Sharp;
88
using NUnit.Framework;
9+
using System.Collections.Generic;
910

1011
public class MainlineDevelopmentMode
1112
{
@@ -206,7 +207,7 @@ public void VerifyMergingMasterToFeatureDoesNotCauseBranchCommitsToIncrementVers
206207

207208
fixture.BranchTo("feature/foo", "foo");
208209
fixture.MakeACommit("first in foo");
209-
210+
210211
fixture.Checkout("master");
211212
fixture.MakeACommit("second in master");
212213

@@ -303,6 +304,41 @@ public void VerifyMergingMasterIntoAFeatureBranchWorksWithMultipleBranches()
303304
fixture.AssertFullSemver(config, "1.0.2");
304305
}
305306
}
307+
308+
[Test]
309+
public void MergingFeatureBranchThatIncrementsMinorNumberIncrementsMinorVersionOfMaster()
310+
{
311+
var currentConfig = new Config
312+
{
313+
VersioningMode = VersioningMode.Mainline,
314+
Branches = new Dictionary<string, BranchConfig>
315+
{
316+
{
317+
"feature", new BranchConfig
318+
{
319+
VersioningMode = VersioningMode.ContinuousDeployment,
320+
Increment = IncrementStrategy.Minor
321+
}
322+
}
323+
}
324+
};
325+
326+
using (var fixture = new EmptyRepositoryFixture())
327+
{
328+
fixture.MakeACommit("first in master");
329+
fixture.MakeATaggedCommit("1.0.0");
330+
fixture.AssertFullSemver(currentConfig, "1.0.0");
331+
332+
fixture.BranchTo("feature/foo", "foo");
333+
fixture.MakeACommit("first in foo");
334+
fixture.MakeACommit("second in foo");
335+
fixture.AssertFullSemver(currentConfig, "1.1.0-foo.2");
336+
337+
fixture.Checkout("master");
338+
fixture.MergeNoFF("feature/foo");
339+
fixture.AssertFullSemver(currentConfig, "1.1.0");
340+
}
341+
}
306342
}
307343

308344
static class CommitExtensions

src/GitVersionCore/VersionCalculation/MainlineVersionCalculator.cs

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -192,12 +192,23 @@ private static VersionField FindMessageIncrement(
192192
new[] { mergeCommit }.Union(context.Repository.Commits.QueryBy(filter)).ToList();
193193
commitLog.RemoveAll(c => commits.Any(c1 => c1.Sha == c.Sha));
194194
return IncrementStrategyFinder.GetIncrementForCommits(context, commits)
195-
?? TryFindIncrementFromMergeMessage(mergeCommit);
195+
?? TryFindIncrementFromMergeMessage(mergeCommit, context);
196196
}
197197

198-
private static VersionField TryFindIncrementFromMergeMessage(Commit mergeCommit)
198+
private static VersionField TryFindIncrementFromMergeMessage(Commit mergeCommit, GitVersionContext context)
199199
{
200-
200+
if (mergeCommit != null)
201+
{
202+
var mergeMessage = new MergeMessage(mergeCommit.Message, context.FullConfiguration);
203+
if (mergeMessage.MergedBranch != null)
204+
{
205+
var config = context.FullConfiguration.GetConfigForBranch(mergeMessage.MergedBranch);
206+
if (config != null && config.Increment.HasValue && config.Increment != IncrementStrategy.Inherit)
207+
{
208+
return config.Increment.Value.ToVersionField();
209+
}
210+
}
211+
}
201212

202213
// Fallback to patch
203214
return VersionField.Patch;

0 commit comments

Comments
 (0)