Skip to content

Commit c89c94c

Browse files
committed
Increase version with bump message when commit message increment is enabled and increment strategy is none
1 parent 1847bc9 commit c89c94c

File tree

6 files changed

+166
-69
lines changed

6 files changed

+166
-69
lines changed

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

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -908,4 +908,84 @@ public void EnsurePreReleaseTagLabelWithInitialTagWillBeConsideredIfGammaLabelIs
908908
// ✅ succeeds as expected
909909
fixture.AssertFullSemver($"1.0.{patchNumber + 1}-gamma.1+1", configuration);
910910
}
911+
912+
[TestCase(null)]
913+
[TestCase("")]
914+
public void IncreaseVersionWithBumpMessageWhenCommitMessageIncrementIsEnabledAndIncrementStrategyIsNoneForBranchWithNoLabel(string? label)
915+
{
916+
var configuration = GitFlowConfigurationBuilder.New.WithLabel(null)
917+
.WithBranch("main", _ => _
918+
.WithCommitMessageIncrementing(CommitMessageIncrementMode.Enabled)
919+
.WithVersioningMode(VersioningMode.ContinuousDeployment)
920+
.WithIncrement(IncrementStrategy.None)
921+
.WithLabel(label)
922+
)
923+
.Build();
924+
925+
using var fixture = new EmptyRepositoryFixture("main");
926+
fixture.MakeACommit();
927+
928+
// ✅ succeeds as expected
929+
fixture.AssertFullSemver("0.0.0", configuration);
930+
931+
fixture.MakeACommit("+semver: minor");
932+
933+
// ✅ succeeds as expected
934+
fixture.AssertFullSemver("0.1.0", configuration);
935+
936+
fixture.ApplyTag("1.0.0");
937+
938+
// ✅ succeeds as expected
939+
fixture.AssertFullSemver("1.0.0", configuration);
940+
941+
fixture.MakeACommit("+semver: major");
942+
943+
// ✅ succeeds as expected
944+
fixture.AssertFullSemver("2.0.0", configuration);
945+
946+
fixture.ApplyTag("2.0.0");
947+
fixture.MakeACommit();
948+
949+
// ✅ succeeds as expected
950+
fixture.AssertFullSemver("2.0.0", configuration);
951+
}
952+
953+
[Test]
954+
public void IncreaseVersionWithBumpMessageWhenCommitMessageIncrementIsEnabledAndIncrementStrategyIsNoneForBranchWithAlphaLabel()
955+
{
956+
var configuration = GitFlowConfigurationBuilder.New
957+
.WithBranch("main", _ => _
958+
.WithCommitMessageIncrementing(CommitMessageIncrementMode.Enabled)
959+
.WithVersioningMode(VersioningMode.ContinuousDeployment)
960+
.WithIncrement(IncrementStrategy.None)
961+
.WithLabel("pre")
962+
).Build();
963+
964+
using var fixture = new EmptyRepositoryFixture("main");
965+
fixture.MakeACommit();
966+
967+
// ✅ succeeds as expected
968+
fixture.AssertFullSemver("0.0.0-pre.1", configuration);
969+
970+
fixture.MakeACommit("+semver: minor");
971+
972+
// ✅ succeeds as expected
973+
fixture.AssertFullSemver("0.1.0-pre.2", configuration);
974+
975+
fixture.ApplyTag("1.0.0");
976+
977+
// ✅ succeeds as expected
978+
fixture.AssertFullSemver("1.0.0", configuration);
979+
980+
fixture.MakeACommit("+semver: major");
981+
982+
// ✅ succeeds as expected
983+
fixture.AssertFullSemver("2.0.0-pre.1", configuration);
984+
985+
fixture.ApplyTag("2.0.0");
986+
fixture.MakeACommit();
987+
988+
// ✅ succeeds as expected
989+
fixture.AssertFullSemver("2.0.0-pre.1", configuration);
990+
}
911991
}

src/GitVersion.Core/PublicAPI.Unshipped.txt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -890,12 +890,13 @@ GitVersion.VersionCalculation.EffectiveBranchConfigurationFinder.EffectiveBranch
890890
GitVersion.VersionCalculation.IEffectiveBranchConfigurationFinder
891891
GitVersion.VersionCalculation.IEffectiveBranchConfigurationFinder.GetConfigurations(GitVersion.IBranch! branch, GitVersion.Configuration.IGitVersionConfiguration! configuration) -> System.Collections.Generic.IEnumerable<GitVersion.Configuration.EffectiveBranchConfiguration!>!
892892
GitVersion.VersionCalculation.IIncrementStrategyFinder
893-
GitVersion.VersionCalculation.IIncrementStrategyFinder.DetermineIncrementedField(GitVersion.GitVersionContext! context, GitVersion.VersionCalculation.BaseVersion! baseVersion, GitVersion.Configuration.EffectiveConfiguration! configuration) -> GitVersion.VersionField
894-
GitVersion.VersionCalculation.IIncrementStrategyFinder.GetIncrementForCommits(GitVersion.Configuration.IGitVersionConfiguration! configuration, System.Collections.Generic.IEnumerable<GitVersion.ICommit!>! commits) -> GitVersion.VersionField?
893+
GitVersion.VersionCalculation.IIncrementStrategyFinder.DetermineIncrementedField(GitVersion.ICommit? currentCommit, GitVersion.VersionCalculation.BaseVersion! baseVersion, GitVersion.Configuration.EffectiveConfiguration! configuration) -> GitVersion.VersionField
894+
GitVersion.VersionCalculation.IIncrementStrategyFinder.GetIncrementForCommits(string? majorVersionBumpMessage, string? minorVersionBumpMessage, string? patchVersionBumpMessage, string? noBumpMessage, System.Collections.Generic.IEnumerable<GitVersion.ICommit!>! commits) -> GitVersion.VersionField?
895895
GitVersion.VersionCalculation.IMainlineVersionCalculator
896896
GitVersion.VersionCalculation.IMainlineVersionCalculator.CreateVersionBuildMetaData(GitVersion.ICommit? baseVersionSource) -> GitVersion.SemanticVersionBuildMetaData!
897897
GitVersion.VersionCalculation.IMainlineVersionCalculator.FindMainlineModeVersion(GitVersion.VersionCalculation.NextVersion! nextVersion) -> GitVersion.SemanticVersion!
898-
GitVersion.VersionCalculation.IncrementStrategyFinder.GetIncrementForCommits(GitVersion.Configuration.IGitVersionConfiguration! configuration, System.Collections.Generic.IEnumerable<GitVersion.ICommit!>! commits) -> GitVersion.VersionField?
898+
GitVersion.VersionCalculation.IncrementStrategyFinder.DetermineIncrementedField(GitVersion.ICommit? currentCommit, GitVersion.VersionCalculation.BaseVersion! baseVersion, GitVersion.Configuration.EffectiveConfiguration! configuration) -> GitVersion.VersionField
899+
GitVersion.VersionCalculation.IncrementStrategyFinder.GetIncrementForCommits(string? majorVersionBumpMessage, string? minorVersionBumpMessage, string? patchVersionBumpMessage, string? noBumpMessage, System.Collections.Generic.IEnumerable<GitVersion.ICommit!>! commits) -> GitVersion.VersionField?
899900
GitVersion.VersionCalculation.INextVersionCalculator
900901
GitVersion.VersionCalculation.INextVersionCalculator.FindVersion() -> GitVersion.VersionCalculation.NextVersion!
901902
GitVersion.VersionCalculation.IVariableProvider
@@ -905,7 +906,6 @@ GitVersion.VersionCalculation.IVersionFilter.Exclude(GitVersion.VersionCalculati
905906
GitVersion.VersionCalculation.IVersionStrategy
906907
GitVersion.VersionCalculation.IVersionStrategy.GetBaseVersions(GitVersion.Configuration.EffectiveBranchConfiguration! configuration) -> System.Collections.Generic.IEnumerable<GitVersion.VersionCalculation.BaseVersion!>!
907908
GitVersion.VersionCalculation.IncrementStrategyFinder
908-
GitVersion.VersionCalculation.IncrementStrategyFinder.DetermineIncrementedField(GitVersion.GitVersionContext! context, GitVersion.VersionCalculation.BaseVersion! baseVersion, GitVersion.Configuration.EffectiveConfiguration! configuration) -> GitVersion.VersionField
909909
GitVersion.VersionCalculation.IncrementStrategyFinder.IncrementStrategyFinder(GitVersion.IGitRepository! repository) -> void
910910
GitVersion.VersionCalculation.MergeMessageVersionStrategy
911911
GitVersion.VersionCalculation.MergeMessageVersionStrategy.MergeMessageVersionStrategy(GitVersion.Logging.ILog! log, System.Lazy<GitVersion.GitVersionContext!>! versionContext, GitVersion.Common.IRepositoryStore! repositoryStore) -> void

src/GitVersion.Core/VersionCalculation/Abstractions/IIncrementStrategyFinder.cs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,10 @@ namespace GitVersion.VersionCalculation;
44

55
public interface IIncrementStrategyFinder
66
{
7-
VersionField DetermineIncrementedField(GitVersionContext context, BaseVersion baseVersion, EffectiveConfiguration configuration);
7+
VersionField DetermineIncrementedField(ICommit? currentCommit, BaseVersion baseVersion, EffectiveConfiguration configuration);
88

9-
VersionField? GetIncrementForCommits(IGitVersionConfiguration configuration, IEnumerable<ICommit> commits);
9+
VersionField? GetIncrementForCommits(
10+
string? majorVersionBumpMessage, string? minorVersionBumpMessage, string? patchVersionBumpMessage, string? noBumpMessage,
11+
IEnumerable<ICommit> commits
12+
);
1013
}

src/GitVersion.Core/VersionCalculation/IncrementStrategyFinder.cs

Lines changed: 29 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,12 @@ public class IncrementStrategyFinder : IIncrementStrategyFinder
2626

2727
public IncrementStrategyFinder(IGitRepository repository) => this.repository = repository.NotNull();
2828

29-
public VersionField DetermineIncrementedField(GitVersionContext context, BaseVersion baseVersion, EffectiveConfiguration configuration)
29+
public VersionField DetermineIncrementedField(ICommit? currentCommit, BaseVersion baseVersion, EffectiveConfiguration configuration)
3030
{
31+
baseVersion.NotNull();
3132
configuration.NotNull();
3233

33-
var commitMessageIncrement = FindCommitMessageIncrement(context, configuration, baseVersion.BaseVersionSource);
34+
var commitMessageIncrement = FindCommitMessageIncrement(configuration, baseVersion.BaseVersionSource, currentCommit);
3435

3536
var defaultIncrement = configuration.Increment.ToVersionField();
3637

@@ -40,12 +41,6 @@ public VersionField DetermineIncrementedField(GitVersionContext context, BaseVer
4041
return baseVersion.ShouldIncrement ? defaultIncrement : VersionField.None;
4142
}
4243

43-
// cap the commit message severity to minor for alpha versions
44-
if (baseVersion.SemanticVersion < new SemanticVersion(1) && commitMessageIncrement > VersionField.Minor)
45-
{
46-
commitMessageIncrement = VersionField.Minor;
47-
}
48-
4944
// don't increment for less than the branch configuration increment, if the absence of commit messages would have
5045
// still resulted in an increment of configuration.Increment
5146
if (baseVersion.ShouldIncrement && commitMessageIncrement < defaultIncrement)
@@ -56,12 +51,15 @@ public VersionField DetermineIncrementedField(GitVersionContext context, BaseVer
5651
return commitMessageIncrement.Value;
5752
}
5853

59-
public VersionField? GetIncrementForCommits(IGitVersionConfiguration configuration, IEnumerable<ICommit> commits)
54+
public VersionField? GetIncrementForCommits(string? majorVersionBumpMessage, string? minorVersionBumpMessage,
55+
string? patchVersionBumpMessage, string? noBumpMessage, IEnumerable<ICommit> commits)
6056
{
61-
var majorRegex = TryGetRegexOrDefault(configuration.MajorVersionBumpMessage, DefaultMajorPatternRegex);
62-
var minorRegex = TryGetRegexOrDefault(configuration.MinorVersionBumpMessage, DefaultMinorPatternRegex);
63-
var patchRegex = TryGetRegexOrDefault(configuration.PatchVersionBumpMessage, DefaultPatchPatternRegex);
64-
var none = TryGetRegexOrDefault(configuration.NoBumpMessage, DefaultNoBumpPatternRegex);
57+
commits.NotNull();
58+
59+
var majorRegex = TryGetRegexOrDefault(majorVersionBumpMessage, DefaultMajorPatternRegex);
60+
var minorRegex = TryGetRegexOrDefault(minorVersionBumpMessage, DefaultMinorPatternRegex);
61+
var patchRegex = TryGetRegexOrDefault(patchVersionBumpMessage, DefaultPatchPatternRegex);
62+
var none = TryGetRegexOrDefault(noBumpMessage, DefaultNoBumpPatternRegex);
6563

6664
var increments = commits
6765
.Select(c => GetIncrementFromCommit(c, majorRegex, minorRegex, patchRegex, none))
@@ -73,16 +71,14 @@ public VersionField DetermineIncrementedField(GitVersionContext context, BaseVer
7371
: null;
7472
}
7573

76-
private VersionField? FindCommitMessageIncrement(GitVersionContext context, EffectiveConfiguration configuration, ICommit? baseCommit)
74+
private VersionField? FindCommitMessageIncrement(EffectiveConfiguration configuration, ICommit? baseCommit, ICommit? currentCommit)
7775
{
78-
if (baseCommit == null) return null;
79-
8076
if (configuration.CommitMessageIncrementing == CommitMessageIncrementMode.Disabled)
8177
{
8278
return null;
8379
}
8480

85-
var commits = GetIntermediateCommits(baseCommit, context.CurrentCommit);
81+
var commits = GetIntermediateCommits(baseCommit, currentCommit);
8682

8783
// consider commit messages since latest tag only (see #3071)
8884
var tags = new HashSet<string?>(repository.Tags.Select(t => t.TargetSha));
@@ -96,7 +92,13 @@ public VersionField DetermineIncrementedField(GitVersionContext context, BaseVer
9692
commits = commits.Where(c => c.Parents.Count() > 1);
9793
}
9894

99-
return GetIncrementForCommits(context.Configuration, commits);
95+
return GetIncrementForCommits(
96+
majorVersionBumpMessage: configuration.MajorVersionBumpMessage,
97+
minorVersionBumpMessage: configuration.MinorVersionBumpMessage,
98+
patchVersionBumpMessage: configuration.PatchVersionBumpMessage,
99+
noBumpMessage: configuration.NoBumpMessage,
100+
commits: commits
101+
);
100102
}
101103

102104
private static Regex TryGetRegexOrDefault(string? messageRegex, Regex defaultRegex) =>
@@ -108,11 +110,17 @@ private static Regex TryGetRegexOrDefault(string? messageRegex, Regex defaultReg
108110
/// Get the sequence of commits in a repository between a <paramref name="baseCommit"/> (exclusive)
109111
/// and a particular <paramref name="headCommit"/> (inclusive)
110112
/// </summary>
111-
private IEnumerable<ICommit> GetIntermediateCommits(IGitObject baseCommit, ICommit? headCommit)
113+
private IEnumerable<ICommit> GetIntermediateCommits(ICommit? baseCommit, ICommit? headCommit)
112114
{
113115
var map = GetHeadCommitsMap(headCommit);
114-
if (!map.TryGetValue(baseCommit.Sha, out var baseIndex)) return Enumerable.Empty<ICommit>();
115-
var commitAfterBaseIndex = baseIndex + 1;
116+
117+
var commitAfterBaseIndex = 0;
118+
if (baseCommit != null)
119+
{
120+
if (!map.TryGetValue(baseCommit.Sha, out var baseIndex)) return Enumerable.Empty<ICommit>();
121+
commitAfterBaseIndex = baseIndex + 1;
122+
}
123+
116124
var headCommits = GetHeadCommits(headCommit);
117125
return new ArraySegment<ICommit>(headCommits, commitAfterBaseIndex, headCommits.Length - commitAfterBaseIndex);
118126
}

src/GitVersion.Core/VersionCalculation/MainlineVersionCalculator.cs

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -281,8 +281,13 @@ private SemanticVersion IncrementForEachCommit(IEnumerable<ICommit> directCommit
281281
{
282282
foreach (var directCommit in directCommits)
283283
{
284-
var directCommitIncrement = this.incrementStrategyFinder.GetIncrementForCommits(Context.Configuration, new[] { directCommit })
285-
?? FindDefaultIncrementForBranch(Context, mainline);
284+
var directCommitIncrement = this.incrementStrategyFinder.GetIncrementForCommits(
285+
majorVersionBumpMessage: Context.Configuration.MajorVersionBumpMessage,
286+
minorVersionBumpMessage: Context.Configuration.MinorVersionBumpMessage,
287+
patchVersionBumpMessage: Context.Configuration.PatchVersionBumpMessage,
288+
noBumpMessage: Context.Configuration.NoBumpMessage,
289+
commits: new[] { directCommit }
290+
) ?? FindDefaultIncrementForBranch(Context, mainline);
286291
mainlineVersion = mainlineVersion.IncrementVersion(directCommitIncrement, null);
287292
this.log.Info($"Direct commit on main {directCommit} incremented base versions {directCommitIncrement}, now {mainlineVersion}");
288293
}
@@ -294,8 +299,15 @@ private VersionField FindMessageIncrement(ICommit? mergeCommit, ICommit? mergedH
294299
{
295300
var commits = this.repositoryStore.GetMergeBaseCommits(mergeCommit, mergedHead, findMergeBase);
296301
commitLog.RemoveAll(c => commits.Any(c1 => c1.Sha == c.Sha));
297-
return this.incrementStrategyFinder.GetIncrementForCommits(Context.Configuration, commits)
298-
?? TryFindIncrementFromMergeMessage(mergeCommit);
302+
303+
var messageIncrement = this.incrementStrategyFinder.GetIncrementForCommits(
304+
majorVersionBumpMessage: Context.Configuration.MajorVersionBumpMessage,
305+
minorVersionBumpMessage: Context.Configuration.MinorVersionBumpMessage,
306+
patchVersionBumpMessage: Context.Configuration.PatchVersionBumpMessage,
307+
noBumpMessage: Context.Configuration.NoBumpMessage,
308+
commits: commits
309+
);
310+
return messageIncrement ?? TryFindIncrementFromMergeMessage(mergeCommit);
299311
}
300312

301313
private VersionField TryFindIncrementFromMergeMessage(ICommit? mergeCommit)

0 commit comments

Comments
 (0)