Skip to content

Commit 6185485

Browse files
authored
Merge pull request #3392 from HHobeck/feature/3302_introducing_a_new_branch_related_property_track-merge-message
Introducing a new branch related property with name track-merge-message
2 parents 19b97e5 + 21230f2 commit 6185485

15 files changed

+82
-27
lines changed

BREAKING_CHANGES.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
* When overriding the configuration with e.g. GitVersion.yaml the software distinguishes between properties who are not existent and properties who are `null`. This is especially important if the user wants to define branch related configuration which are marked with `increment` strategy `Inherit`.
2323
* Following root configuration properties have been removed:
2424
* continuous-delivery-fallback-tag
25+
* A new branch related property with name `track-merge-message` has been introduced. Consider we have a `main` branch and a `release/1.0.0` branch and merge changes from `release/1.0.0` to the main branch. In this scenario the merge message will be interpreted as a next version `1.0.0` when `track-merge-message` is set to `true` otherwise `0.0.1`.
2526
2627
## v5.0.0
2728

docs/input/docs/reference/configuration.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,7 @@ label: '{BranchName}'
163163
increment: Inherit
164164
prevent-increment-of-merged-branch-version: false
165165
track-merge-target: false
166+
track-merge-message: true
166167
commit-message-incrementing: Enabled
167168
regex: ''
168169
tracks-release-branches: false
@@ -602,6 +603,13 @@ Strategy which will look for tagged merge commits directly off the current
602603
branch. For example `develop` → `release/1.0.0` → merge into `main` and tag
603604
`1.0.0`. The tag is _not_ on develop, but develop should be version `1.0.0` now.
604605

606+
### track-merge-message
607+
608+
This property is a branch related property and gives the user the possibility to control the behavior of whether the merge
609+
commit message will be interpreted as a next version or not. Consider we have a main branch and a `release/1.0.0` branch and
610+
merge changes from `release/1.0.0` to the `main` branch. If `track-merge-message` is set to `true` then the next version will
611+
be `1.0.0` otherwise `0.0.1`.
612+
605613
### tracks-release-branches
606614

607615
Indicates this branch config represents develop in GitFlow.

src/GitVersion.Core.Tests/Configuration/ConfigurationProviderTests.CanWriteOutEffectiveConfiguration.approved.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,7 @@ label: '{BranchName}'
121121
increment: Inherit
122122
prevent-increment-of-merged-branch-version: false
123123
track-merge-target: false
124+
track-merge-message: true
124125
commit-message-incrementing: Enabled
125126
regex: ''
126127
tracks-release-branches: false

src/GitVersion.Core.Tests/IntegrationTests/MainScenarios.cs

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -371,4 +371,39 @@ public void PreventDecrementationOfVersionsOnTheDevelopmentBranch()
371371
// ✅ succeeds as expected
372372
fixture.AssertFullSemver("1.1.0-alpha.3", configurationBuilder.Build());
373373
}
374+
375+
[TestCase(true, "1.1.0+0")]
376+
[TestCase(false, "1.0.1+4")]
377+
public void TrackMergeMessageShouldBeConsideredOnTheMainBranch(bool trackMergeMessage, string expectedSemanticVersion)
378+
{
379+
using EmptyRepositoryFixture fixture = new("main");
380+
381+
var configuration = GitFlowConfigurationBuilder.New
382+
.WithBranch("main", branchBuilder => branchBuilder.WithTrackMergeMessage(trackMergeMessage))
383+
.Build();
384+
385+
fixture.MakeATaggedCommit("1.0.0");
386+
fixture.BranchTo("release/1.1.0");
387+
fixture.MakeACommit();
388+
fixture.MakeACommit();
389+
390+
// ✅ succeeds as expected
391+
fixture.AssertFullSemver("1.1.0-beta.1+2", configuration);
392+
393+
fixture.Checkout("main");
394+
fixture.MakeACommit();
395+
396+
// ✅ succeeds as expected
397+
fixture.AssertFullSemver("1.0.1+1", configuration);
398+
399+
fixture.MergeNoFF("release/1.1.0");
400+
401+
// ✅ succeeds as expected
402+
fixture.AssertFullSemver(expectedSemanticVersion, configuration);
403+
404+
fixture.Remove("release/1.0.0");
405+
406+
// ✅ succeeds as expected
407+
fixture.AssertFullSemver(expectedSemanticVersion, configuration);
408+
}
374409
}

src/GitVersion.Core/Configuration/BranchConfiguration.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ public BranchConfiguration(BranchConfiguration branchConfiguration)
1717
PreventIncrementOfMergedBranchVersion = branchConfiguration.PreventIncrementOfMergedBranchVersion;
1818
LabelNumberPattern = branchConfiguration.LabelNumberPattern;
1919
TrackMergeTarget = branchConfiguration.TrackMergeTarget;
20+
TrackMergeMessage = branchConfiguration.TrackMergeMessage;
2021
CommitMessageIncrementing = branchConfiguration.CommitMessageIncrementing;
2122
TracksReleaseBranches = branchConfiguration.TracksReleaseBranches;
2223
Regex = branchConfiguration.Regex;
@@ -49,6 +50,9 @@ public BranchConfiguration(BranchConfiguration branchConfiguration)
4950
[YamlMember(Alias = "track-merge-target")]
5051
public bool? TrackMergeTarget { get; set; }
5152

53+
[YamlMember(Alias = "track-merge-message")]
54+
public bool? TrackMergeMessage { get; set; }
55+
5256
[YamlMember(Alias = "commit-message-incrementing")]
5357
public CommitMessageIncrementMode? CommitMessageIncrementing { get; set; }
5458

@@ -92,6 +96,7 @@ public BranchConfiguration Inherit(BranchConfiguration? parentConfig)
9296
result.PreventIncrementOfMergedBranchVersion ??= parentConfig.PreventIncrementOfMergedBranchVersion;
9397
result.LabelNumberPattern ??= parentConfig.LabelNumberPattern;
9498
result.TrackMergeTarget ??= parentConfig.TrackMergeTarget;
99+
result.TrackMergeMessage ??= parentConfig.TrackMergeMessage;
95100
result.CommitMessageIncrementing ??= parentConfig.CommitMessageIncrementing;
96101
result.Regex ??= parentConfig.Regex;
97102
result.SourceBranches ??= parentConfig.SourceBranches;

src/GitVersion.Core/Configuration/BranchConfigurationBuilder.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ public class BranchConfigurationBuilder
1313
private bool? preventIncrementOfMergedBranchVersion;
1414
private string? labelNumberPattern;
1515
private bool? trackMergeTarget;
16+
private bool? trackMergeMessage;
1617
private CommitMessageIncrementMode? commitMessageIncrementing;
1718
private string? regex;
1819
private HashSet<string>? sourceBranches;
@@ -68,6 +69,12 @@ public virtual BranchConfigurationBuilder WithTrackMergeTarget(bool? value)
6869
return this;
6970
}
7071

72+
public virtual BranchConfigurationBuilder WithTrackMergeMessage(bool? value)
73+
{
74+
this.trackMergeMessage = value;
75+
return this;
76+
}
77+
7178
public virtual BranchConfigurationBuilder WithCommitMessageIncrementing(CommitMessageIncrementMode? value)
7279
{
7380
this.commitMessageIncrementing = value;
@@ -137,6 +144,7 @@ public virtual BranchConfigurationBuilder WithConfiguration(BranchConfiguration
137144
WithPreventIncrementOfMergedBranchVersion(value.PreventIncrementOfMergedBranchVersion);
138145
WithLabelNumberPattern(value.LabelNumberPattern);
139146
WithTrackMergeTarget(value.TrackMergeTarget);
147+
WithTrackMergeMessage(value.TrackMergeMessage);
140148
WithCommitMessageIncrementing(value.CommitMessageIncrementing);
141149
WithRegex(value.Regex);
142150
WithTracksReleaseBranches(value.TracksReleaseBranches);
@@ -159,6 +167,7 @@ public BranchConfiguration Build()
159167
Regex = regex,
160168
TracksReleaseBranches = tracksReleaseBranches,
161169
TrackMergeTarget = trackMergeTarget,
170+
TrackMergeMessage = trackMergeMessage,
162171
CommitMessageIncrementing = commitMessageIncrementing,
163172
IsMainline = isMainline,
164173
IsReleaseBranch = isReleaseBranch,

src/GitVersion.Core/Configuration/ConfigurationBuilderBase.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ internal abstract class ConfigurationBuilderBase<TConfigurationBuilder>
3131
private bool? preventIncrementOfMergedBranchVersion;
3232
private string? labelNumberPattern;
3333
private bool? trackMergeTarget;
34+
private bool? trackMergeMessage;
3435
private CommitMessageIncrementMode? commitMessageIncrementing;
3536
private string? regex;
3637
private HashSet<string>? sourceBranches;
@@ -207,6 +208,12 @@ public virtual TConfigurationBuilder WithTrackMergeTarget(bool? value)
207208
return (TConfigurationBuilder)this;
208209
}
209210

211+
public virtual TConfigurationBuilder WithTrackMergeMessage(bool? value)
212+
{
213+
this.trackMergeMessage = value;
214+
return (TConfigurationBuilder)this;
215+
}
216+
210217
public virtual TConfigurationBuilder WithCommitMessageIncrementing(CommitMessageIncrementMode? value)
211218
{
212219
this.commitMessageIncrementing = value;
@@ -296,6 +303,7 @@ public virtual TConfigurationBuilder WithConfiguration(GitVersionConfiguration v
296303
WithPreventIncrementOfMergedBranchVersion(value.PreventIncrementOfMergedBranchVersion);
297304
WithLabelNumberPattern(value.LabelNumberPattern);
298305
WithTrackMergeTarget(value.TrackMergeTarget);
306+
WithTrackMergeMessage(value.TrackMergeMessage);
299307
WithCommitMessageIncrementing(value.CommitMessageIncrementing);
300308
WithRegex(value.Regex);
301309
WithTracksReleaseBranches(value.TracksReleaseBranches);
@@ -343,6 +351,7 @@ public virtual GitVersionConfiguration Build()
343351
Regex = this.regex,
344352
TracksReleaseBranches = this.tracksReleaseBranches,
345353
TrackMergeTarget = this.trackMergeTarget,
354+
TrackMergeMessage = this.trackMergeMessage,
346355
CommitMessageIncrementing = this.commitMessageIncrementing,
347356
IsMainline = this.isMainline,
348357
IsReleaseBranch = this.isReleaseBranch,

src/GitVersion.Core/Configuration/ConfigurationExtensions.cs

Lines changed: 1 addition & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
using System.Text.RegularExpressions;
22
using GitVersion.Extensions;
33
using GitVersion.Logging;
4-
using GitVersion.VersionCalculation;
54

65
namespace GitVersion.Configuration;
76

@@ -56,32 +55,10 @@ private static IEnumerable<BranchConfiguration> GetBranchConfigurations(GitVersi
5655
public static BranchConfiguration GetFallbackBranchConfiguration(this GitVersionConfiguration configuration)
5756
{
5857
BranchConfiguration result = new(configuration);
59-
result.Name ??= "fallback";
60-
result.Regex ??= "";
61-
result.Label ??= "{BranchName}";
62-
result.VersioningMode ??= VersioningMode.ContinuousDelivery;
63-
result.PreventIncrementOfMergedBranchVersion ??= false;
64-
result.TrackMergeTarget ??= false;
65-
result.TracksReleaseBranches ??= false;
66-
result.IsReleaseBranch ??= false;
67-
result.IsMainline ??= false;
68-
result.CommitMessageIncrementing ??= CommitMessageIncrementMode.Enabled;
69-
if (result.Increment == IncrementStrategy.Inherit)
70-
{
71-
result.Increment = IncrementStrategy.None;
72-
}
58+
if (result.Increment == IncrementStrategy.Inherit) result.Increment = IncrementStrategy.None;
7359
return result;
7460
}
7561

76-
private static BranchConfiguration? ForBranch(GitVersionConfiguration configuration, string branchName)
77-
{
78-
var matches = configuration.Branches
79-
.Where(b => b.Value.Regex != null && Regex.IsMatch(branchName, b.Value.Regex, RegexOptions.IgnoreCase))
80-
.ToArray();
81-
82-
return matches.Select(kvp => kvp.Value).FirstOrDefault();
83-
}
84-
8562
public static bool IsReleaseBranch(this GitVersionConfiguration configuration, string branchName) => configuration.GetBranchConfiguration(branchName).IsReleaseBranch ?? false;
8663

8764
public static string GetBranchSpecificTag(this EffectiveConfiguration configuration, ILog log, string? branchFriendlyName, string? branchNameOverride)

src/GitVersion.Core/Configuration/EffectiveConfiguration.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ public EffectiveConfiguration(GitVersionConfiguration configuration, BranchConfi
4848
PreventIncrementOfMergedBranchVersion = currentBranchConfig.PreventIncrementOfMergedBranchVersion ?? false;
4949
LabelNumberPattern = currentBranchConfig.LabelNumberPattern;
5050
TrackMergeTarget = currentBranchConfig.TrackMergeTarget ?? false;
51+
TrackMergeMessage = currentBranchConfig.TrackMergeMessage ?? true;
5152
MajorVersionBumpMessage = configuration.MajorVersionBumpMessage;
5253
MinorVersionBumpMessage = configuration.MinorVersionBumpMessage;
5354
PatchVersionBumpMessage = configuration.PatchVersionBumpMessage;
@@ -155,6 +156,8 @@ protected EffectiveConfiguration(AssemblyVersioningScheme assemblyVersioningSche
155156

156157
public bool TrackMergeTarget { get; }
157158

159+
public bool TrackMergeMessage { get; }
160+
158161
public string? MajorVersionBumpMessage { get; }
159162

160163
public string? MinorVersionBumpMessage { get; }

src/GitVersion.Core/Configuration/GitFlowConfigurationBuilder.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ private GitFlowConfigurationBuilder()
2929
CommitMessageIncrementing = CommitMessageIncrementMode.Enabled,
3030
PreventIncrementOfMergedBranchVersion = false,
3131
TrackMergeTarget = false,
32+
TrackMergeMessage = true,
3233
TracksReleaseBranches = false,
3334
IsReleaseBranch = false,
3435
IsMainline = false

0 commit comments

Comments
 (0)