Skip to content

Commit 8cb2665

Browse files
committed
Using effective branch configuration
1 parent 9e0c7a9 commit 8cb2665

File tree

10 files changed

+54
-72
lines changed

10 files changed

+54
-72
lines changed

global.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
22
"sdk": {
3-
"version": "7.0.103"
3+
"version": "7.0.200"
44
}
55
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ ignore:
118118
sha: []
119119
mode: ContinuousDelivery
120120
label: '{BranchName}'
121-
increment: Inherit
121+
increment: Patch
122122
prevent-increment-of-merged-branch-version: false
123123
track-merge-target: false
124124
track-merge-message: true

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,6 @@ public void DoesNotTakeVersionFromNameOfRemoteReleaseBranchInCustomRemote()
6262

6363
fixture.LocalRepositoryFixture.Checkout("upstream/release/2.0.0");
6464

65-
fixture.LocalRepositoryFixture.AssertFullSemver("0.0.0-beta.1+6");
65+
fixture.LocalRepositoryFixture.AssertFullSemver("0.0.0-beta.1+6"); // This test fails with 2.0.0-beta.1+1
6666
}
6767
}

src/GitVersion.Core.Tests/VersionCalculation/Strategies/VersionInBranchNameBaseVersionStrategyTests.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -60,14 +60,14 @@ public void CanTakeVersionFromNameOfConfiguredReleaseBranch(string branchName, s
6060
fixture.Repository.MakeACommit();
6161
fixture.Repository.CreateBranch(branchName);
6262

63-
var configurationBuilder = GitFlowConfigurationBuilder.New
64-
.WithBranch("support", builder => builder.WithIsReleaseBranch(true));
65-
ConfigurationHelper configurationHelper = new(configurationBuilder.Build());
63+
var configuration = GitFlowConfigurationBuilder.New
64+
.WithBranch("support", builder => builder.WithIsReleaseBranch(true))
65+
.Build();
66+
ConfigurationHelper configurationHelper = new(configuration);
6667

6768
var gitRepository = fixture.Repository.ToGitRepository();
6869
var strategy = GetVersionStrategy(fixture.RepositoryPath, gitRepository, branchName, configurationHelper.Dictionary);
6970

70-
var configuration = GitFlowConfigurationBuilder.New.Build();
7171
var branchConfiguration = configuration.GetBranchConfiguration(branchName);
7272
var effectiveConfiguration = new EffectiveConfiguration(configuration, branchConfiguration);
7373

src/GitVersion.Core/Configuration/ConfigurationExtensions.cs

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,11 @@ namespace GitVersion.Configuration;
77
public static class ConfigurationExtensions
88
{
99
public static EffectiveConfiguration GetEffectiveConfiguration(this GitVersionConfiguration configuration, IBranch branch)
10+
=> GetEffectiveConfiguration(configuration, branch.NotNull().Name.WithoutRemote);
11+
12+
public static EffectiveConfiguration GetEffectiveConfiguration(this GitVersionConfiguration configuration, string branchName)
1013
{
11-
var branchConfiguration = configuration.GetBranchConfiguration(branch);
14+
BranchConfiguration branchConfiguration = configuration.GetBranchConfiguration(branchName);
1215
return new EffectiveConfiguration(configuration, branchConfiguration);
1316
}
1417

@@ -25,16 +28,6 @@ public static BranchConfiguration GetBranchConfiguration(this GitVersionConfigur
2528
Label = ConfigurationConstants.BranchNamePlaceholder,
2629
Increment = IncrementStrategy.Inherit
2730
};
28-
29-
if (branchConfiguration.Increment == IncrementStrategy.Inherit)
30-
return branchConfiguration;
31-
32-
var fallbackBranchConfiguration = GetFallbackBranchConfiguration(configuration);
33-
branchConfiguration.Increment ??= fallbackBranchConfiguration.Increment;
34-
if (branchConfiguration.Increment != IncrementStrategy.Inherit)
35-
{
36-
branchConfiguration = branchConfiguration.Inherit(fallbackBranchConfiguration);
37-
}
3831
return branchConfiguration;
3932
}
4033

src/GitVersion.Core/Configuration/EffectiveConfiguration.cs

Lines changed: 23 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -9,17 +9,20 @@ namespace GitVersion.Configuration;
99
/// </summary>
1010
public class EffectiveConfiguration
1111
{
12-
public EffectiveConfiguration(GitVersionConfiguration configuration, BranchConfiguration currentBranchConfig)
12+
public EffectiveConfiguration(GitVersionConfiguration configuration, BranchConfiguration branchConfiguration)
1313
{
1414
configuration.NotNull();
15-
currentBranchConfig.NotNull();
15+
branchConfiguration.NotNull();
1616

17-
var name = currentBranchConfig.Name;
17+
var fallbackBranchConfiguration = configuration.GetFallbackBranchConfiguration();
18+
branchConfiguration = branchConfiguration.Inherit(fallbackBranchConfiguration);
1819

19-
if (!currentBranchConfig.VersioningMode.HasValue)
20+
var name = branchConfiguration.Name;
21+
22+
if (!branchConfiguration.VersioningMode.HasValue)
2023
throw new Exception($"Configuration value for 'Versioning mode' for branch {name} has no value. (this should not happen, please report an issue)");
2124

22-
if (!currentBranchConfig.Increment.HasValue)
25+
if (!branchConfiguration.Increment.HasValue)
2326
throw new Exception($"Configuration value for 'Increment' for branch {name} has no value. (this should not happen, please report an issue)");
2427

2528
if (!configuration.AssemblyVersioningScheme.HasValue)
@@ -28,7 +31,7 @@ public EffectiveConfiguration(GitVersionConfiguration configuration, BranchConfi
2831
if (!configuration.AssemblyFileVersioningScheme.HasValue)
2932
throw new Exception("Configuration value for 'AssemblyFileVersioningScheme' has no value. (this should not happen, please report an issue)");
3033

31-
if (!currentBranchConfig.CommitMessageIncrementing.HasValue)
34+
if (!branchConfiguration.CommitMessageIncrementing.HasValue)
3235
throw new Exception("Configuration value for 'CommitMessageIncrementing' has no value. (this should not happen, please report an issue)");
3336

3437
if (!configuration.LabelPreReleaseWeight.HasValue)
@@ -39,29 +42,29 @@ public EffectiveConfiguration(GitVersionConfiguration configuration, BranchConfi
3942
AssemblyInformationalFormat = configuration.AssemblyInformationalFormat;
4043
AssemblyVersioningFormat = configuration.AssemblyVersioningFormat;
4144
AssemblyFileVersioningFormat = configuration.AssemblyFileVersioningFormat;
42-
VersioningMode = currentBranchConfig.VersioningMode.Value;
45+
VersioningMode = branchConfiguration.VersioningMode.Value;
4346
LabelPrefix = configuration.LabelPrefix;
44-
Label = currentBranchConfig.Label ?? string.Empty;
47+
Label = branchConfiguration.Label ?? string.Empty;
4548
NextVersion = configuration.NextVersion;
46-
Increment = currentBranchConfig.Increment.Value;
47-
BranchPrefixToTrim = currentBranchConfig.Regex;
48-
PreventIncrementOfMergedBranchVersion = currentBranchConfig.PreventIncrementOfMergedBranchVersion ?? false;
49-
LabelNumberPattern = currentBranchConfig.LabelNumberPattern;
50-
TrackMergeTarget = currentBranchConfig.TrackMergeTarget ?? false;
51-
TrackMergeMessage = currentBranchConfig.TrackMergeMessage ?? true;
49+
Increment = branchConfiguration.Increment.Value;
50+
BranchPrefixToTrim = branchConfiguration.Regex;
51+
PreventIncrementOfMergedBranchVersion = branchConfiguration.PreventIncrementOfMergedBranchVersion ?? false;
52+
LabelNumberPattern = branchConfiguration.LabelNumberPattern;
53+
TrackMergeTarget = branchConfiguration.TrackMergeTarget ?? false;
54+
TrackMergeMessage = branchConfiguration.TrackMergeMessage ?? true;
5255
MajorVersionBumpMessage = configuration.MajorVersionBumpMessage;
5356
MinorVersionBumpMessage = configuration.MinorVersionBumpMessage;
5457
PatchVersionBumpMessage = configuration.PatchVersionBumpMessage;
5558
NoBumpMessage = configuration.NoBumpMessage;
56-
CommitMessageIncrementing = currentBranchConfig.CommitMessageIncrementing.Value;
59+
CommitMessageIncrementing = branchConfiguration.CommitMessageIncrementing.Value;
5760
VersionFilters = configuration.Ignore.ToFilters();
58-
TracksReleaseBranches = currentBranchConfig.TracksReleaseBranches ?? false;
59-
IsReleaseBranch = currentBranchConfig.IsReleaseBranch ?? false;
60-
IsMainline = currentBranchConfig.IsMainline ?? false;
61+
TracksReleaseBranches = branchConfiguration.TracksReleaseBranches ?? false;
62+
IsReleaseBranch = branchConfiguration.IsReleaseBranch ?? false;
63+
IsMainline = branchConfiguration.IsMainline ?? false;
6164
CommitDateFormat = configuration.CommitDateFormat;
6265
UpdateBuildNumber = configuration.UpdateBuildNumber;
6366
SemanticVersionFormat = configuration.SemanticVersionFormat;
64-
PreReleaseWeight = currentBranchConfig.PreReleaseWeight ?? 0;
67+
PreReleaseWeight = branchConfiguration.PreReleaseWeight ?? 0;
6568
LabelPreReleaseWeight = configuration.LabelPreReleaseWeight.Value;
6669
}
6770

@@ -174,7 +177,7 @@ protected EffectiveConfiguration(AssemblyVersioningScheme assemblyVersioningSche
174177

175178
public bool UpdateBuildNumber { get; }
176179

177-
public SemanticVersionFormat SemanticVersionFormat { get; set; } = SemanticVersionFormat.Strict;
180+
public SemanticVersionFormat SemanticVersionFormat { get; set; }
178181

179182
public int PreReleaseWeight { get; }
180183

src/GitVersion.Core/PublicAPI.Unshipped.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,7 @@ GitVersion.Configuration.EffectiveConfiguration.AssemblyVersioningScheme.get ->
164164
GitVersion.Configuration.EffectiveConfiguration.BranchPrefixToTrim.get -> string?
165165
GitVersion.Configuration.EffectiveConfiguration.CommitDateFormat.get -> string?
166166
GitVersion.Configuration.EffectiveConfiguration.CommitMessageIncrementing.get -> GitVersion.VersionCalculation.CommitMessageIncrementMode
167-
GitVersion.Configuration.EffectiveConfiguration.EffectiveConfiguration(GitVersion.Configuration.GitVersionConfiguration! configuration, GitVersion.Configuration.BranchConfiguration! currentBranchConfig) -> void
167+
GitVersion.Configuration.EffectiveConfiguration.EffectiveConfiguration(GitVersion.Configuration.GitVersionConfiguration! configuration, GitVersion.Configuration.BranchConfiguration! branchConfiguration) -> void
168168
GitVersion.Configuration.EffectiveConfiguration.EffectiveConfiguration(GitVersion.Extensions.AssemblyVersioningScheme assemblyVersioningScheme, GitVersion.Extensions.AssemblyFileVersioningScheme assemblyFileVersioningScheme, string? assemblyInformationalFormat, string? assemblyVersioningFormat, string? assemblyFileVersioningFormat, GitVersion.VersionCalculation.VersioningMode versioningMode, string? labelPrefix, string! label, string? nextVersion, GitVersion.IncrementStrategy increment, string? branchPrefixToTrim, bool preventIncrementOfMergedBranchVersion, string? labelNumberPattern, bool trackMergeTarget, string? majorVersionBumpMessage, string? minorVersionBumpMessage, string? patchVersionBumpMessage, string? noBumpMessage, GitVersion.VersionCalculation.CommitMessageIncrementMode commitMessageIncrementing, System.Collections.Generic.IEnumerable<GitVersion.VersionCalculation.IVersionFilter!>! versionFilters, bool tracksReleaseBranches, bool isReleaseBranch, bool isMainline, string? commitDateFormat, bool updateBuildNumber, GitVersion.SemanticVersionFormat semanticVersionFormat, int preReleaseWeight, int labelPreReleaseWeight) -> void
169169
GitVersion.Configuration.EffectiveConfiguration.Increment.get -> GitVersion.IncrementStrategy
170170
GitVersion.Configuration.EffectiveConfiguration.IsMainline.get -> bool
@@ -1063,6 +1063,7 @@ static GitVersion.Configuration.ConfigurationExtensions.GetBranchConfiguration(t
10631063
static GitVersion.Configuration.ConfigurationExtensions.GetBranchConfiguration(this GitVersion.Configuration.GitVersionConfiguration! configuration, string! branchName) -> GitVersion.Configuration.BranchConfiguration!
10641064
static GitVersion.Configuration.ConfigurationExtensions.GetBranchSpecificTag(this GitVersion.Configuration.EffectiveConfiguration! configuration, GitVersion.Logging.ILog! log, string? branchFriendlyName, string? branchNameOverride) -> string!
10651065
static GitVersion.Configuration.ConfigurationExtensions.GetEffectiveConfiguration(this GitVersion.Configuration.GitVersionConfiguration! configuration, GitVersion.IBranch! branch) -> GitVersion.Configuration.EffectiveConfiguration!
1066+
static GitVersion.Configuration.ConfigurationExtensions.GetEffectiveConfiguration(this GitVersion.Configuration.GitVersionConfiguration! configuration, string! branchName) -> GitVersion.Configuration.EffectiveConfiguration!
10661067
static GitVersion.Configuration.ConfigurationExtensions.GetFallbackBranchConfiguration(this GitVersion.Configuration.GitVersionConfiguration! configuration) -> GitVersion.Configuration.BranchConfiguration!
10671068
static GitVersion.Configuration.ConfigurationExtensions.GetReleaseBranchConfiguration(this GitVersion.Configuration.GitVersionConfiguration! configuration) -> System.Collections.Generic.List<System.Collections.Generic.KeyValuePair<string!, GitVersion.Configuration.BranchConfiguration!>>!
10681069
static GitVersion.Configuration.ConfigurationExtensions.IsReleaseBranch(this GitVersion.Configuration.GitVersionConfiguration! configuration, string! branchName) -> bool

src/GitVersion.Core/VersionCalculation/BaseVersionCalculators/VersionInBranchNameVersionStrategy.cs

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -18,17 +18,18 @@ public VersionInBranchNameVersionStrategy(IRepositoryStore repositoryStore, Lazy
1818

1919
public override IEnumerable<BaseVersion> GetBaseVersions(EffectiveBranchConfiguration configuration)
2020
{
21-
string nameWithoutOrigin = NameWithoutOrigin(configuration.Branch);
22-
var contextConfiguration = Context.Configuration;
23-
if (contextConfiguration.IsReleaseBranch(nameWithoutOrigin))
21+
if (!configuration.Value.IsReleaseBranch) yield break;
22+
23+
var versionInBranch = GetVersionInBranch(
24+
configuration.Branch.Name.Friendly, configuration.Value.LabelPrefix, configuration.Value.SemanticVersionFormat
25+
);
26+
if (versionInBranch != null)
2427
{
25-
var versionInBranch = GetVersionInBranch(configuration.Branch.Name.Friendly, contextConfiguration.LabelPrefix, contextConfiguration.SemanticVersionFormat);
26-
if (versionInBranch != null)
27-
{
28-
var commitBranchWasBranchedFrom = this.repositoryStore.FindCommitBranchWasBranchedFrom(configuration.Branch, contextConfiguration);
29-
var branchNameOverride = Context.CurrentBranch.Name.Friendly.RegexReplace("[-/]" + versionInBranch.Item1, string.Empty);
30-
yield return new BaseVersion("Version in branch name", false, versionInBranch.Item2, commitBranchWasBranchedFrom.Commit, branchNameOverride);
31-
}
28+
var commitBranchWasBranchedFrom = this.repositoryStore.FindCommitBranchWasBranchedFrom(
29+
configuration.Branch, Context.Configuration
30+
);
31+
var branchNameOverride = Context.CurrentBranch.Name.Friendly.RegexReplace("[-/]" + versionInBranch.Item1, string.Empty);
32+
yield return new BaseVersion("Version in branch name", false, versionInBranch.Item2, commitBranchWasBranchedFrom.Commit, branchNameOverride);
3233
}
3334
}
3435

@@ -45,8 +46,4 @@ public override IEnumerable<BaseVersion> GetBaseVersions(EffectiveBranchConfigur
4546

4647
return null;
4748
}
48-
49-
private static string NameWithoutOrigin(IBranch branch) => branch.IsRemote && branch.Name.Friendly.StartsWith("origin/")
50-
? branch.Name.Friendly.Substring("origin/".Length)
51-
: branch.Name.Friendly;
5249
}

src/GitVersion.Core/VersionCalculation/EffectiveBranchConfigurationFinder.cs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,7 @@ private IEnumerable<EffectiveBranchConfiguration> GetEffectiveConfigurationsRecu
4545
{
4646
// Because the actual branch is marked with the inherit increment strategy we need to either skip the iteration or go further
4747
// while inheriting from the fallback branch configuration. This behavior is configurable via the increment settings of the configuration.
48-
var fallbackBranchConfiguration = configuration.GetFallbackBranchConfiguration();
49-
var skipTraversingOfOrphanedBranches = fallbackBranchConfiguration.Increment == null;
48+
var skipTraversingOfOrphanedBranches = configuration.Increment == null;
5049
this.log.Info(
5150
$"An orphaned branch '{branch}' has been detected and will be skipped={skipTraversingOfOrphanedBranches}."
5251
);
@@ -67,8 +66,6 @@ in GetEffectiveConfigurationsRecursive(sourceBranch, configuration, branchConfig
6766
}
6867
else
6968
{
70-
var fallbackBranchConfiguration = configuration.GetFallbackBranchConfiguration();
71-
branchConfiguration = branchConfiguration.Inherit(fallbackBranchConfiguration);
7269
yield return new(branch, new EffectiveConfiguration(configuration, branchConfiguration));
7370
}
7471
}

src/GitVersion.Core/VersionCalculation/MainlineVersionCalculator.cs

Lines changed: 6 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -273,12 +273,12 @@ private IBranch FindMainlineBranch(List<IBranch> possibleMainlineBranches, IComm
273273
return (null, null);
274274
}
275275

276-
private SemanticVersion IncrementForEachCommit(IEnumerable<ICommit> directCommits, SemanticVersion mainlineVersion, INamedReference mainline)
276+
private SemanticVersion IncrementForEachCommit(IEnumerable<ICommit> directCommits, SemanticVersion mainlineVersion, IBranch mainline)
277277
{
278278
foreach (var directCommit in directCommits)
279279
{
280280
var directCommitIncrement = this.incrementStrategyFinder.GetIncrementForCommits(context.Configuration, new[] { directCommit })
281-
?? FindDefaultIncrementForBranch(context, mainline.Name.Friendly);
281+
?? FindDefaultIncrementForBranch(context, mainline);
282282
mainlineVersion = mainlineVersion.IncrementVersion(directCommitIncrement);
283283
this.log.Info($"Direct commit on main {directCommit} incremented base versions {directCommitIncrement}, now {mainlineVersion}");
284284
}
@@ -310,20 +310,11 @@ private VersionField TryFindIncrementFromMergeMessage(ICommit? mergeCommit)
310310
return FindDefaultIncrementForBranch(context);
311311
}
312312

313-
private static VersionField FindDefaultIncrementForBranch(GitVersionContext context, string? branchName = null)
314-
{
315-
var configuration = context.Configuration.GetBranchConfiguration(branchName ?? context.CurrentBranch.Name.WithoutRemote);
316-
if (configuration.Increment != null && configuration.Increment != IncrementStrategy.Inherit)
317-
{
318-
return configuration.Increment.Value.ToVersionField();
319-
}
313+
private static VersionField FindDefaultIncrementForBranch(GitVersionContext context)
314+
=> FindDefaultIncrementForBranch(context, context.CurrentBranch);
320315

321-
// TODO: Hardcoded fallback values are not so good. It might be better to get this information either from the fallback or the unknown
322-
// branch configuration settings I have introduced. We should think about it: This is a cooking machine... the ingredients are coming from the user. ;)
323-
324-
// Fallback to patch
325-
return VersionField.Patch;
326-
}
316+
private static VersionField FindDefaultIncrementForBranch(GitVersionContext context, IBranch branch)
317+
=> context.Configuration.GetEffectiveConfiguration(branch).Increment.ToVersionField();
327318

328319
private static ICommit GetMergedHead(ICommit mergeCommit)
329320
{

0 commit comments

Comments
 (0)