Skip to content

Commit 6401cd4

Browse files
committed
use BranchConfigurationBuilder
1 parent a2299d0 commit 6401cd4

File tree

8 files changed

+52
-48
lines changed

8 files changed

+52
-48
lines changed

src/GitVersion.App.Tests/ArgumentParserTests.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -395,7 +395,7 @@ private static IEnumerable<TestCaseData> OverrideconfigWithInvalidOptionTestData
395395
}
396396

397397
[TestCaseSource(nameof(OverrideConfigWithSingleOptionTestData))]
398-
public void OverrideConfigWithSingleOptions(string options, GitVersionConfiguration expected)
398+
public void OverrideConfigWithSingleOptions(string options, IGitVersionConfiguration expected)
399399
{
400400
var arguments = this.argumentParser.ParseArguments($"/overrideconfig {options}");
401401

@@ -534,7 +534,7 @@ private static IEnumerable<TestCaseData> OverrideConfigWithSingleOptionTestData(
534534
}
535535

536536
[TestCaseSource(nameof(OverrideConfigWithMultipleOptionsTestData))]
537-
public void OverrideConfigWithMultipleOptions(string options, GitVersionConfiguration expected)
537+
public void OverrideConfigWithMultipleOptions(string options, IGitVersionConfiguration expected)
538538
{
539539
var arguments = this.argumentParser.ParseArguments(options);
540540
ConfigurationHelper configurationHelper = new(arguments.OverrideConfiguration);

src/GitVersion.Core/Configuration/ConfigurationBuilderBase.cs

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -206,6 +206,9 @@ public virtual TConfigurationBuilder WithoutBranches()
206206
public virtual BranchConfigurationBuilder WithBranch(string value)
207207
=> this.branchConfigurationBuilders.GetOrAdd(value, () => BranchConfigurationBuilder.New);
208208

209+
public virtual BranchConfigurationBuilder WithBranch(string value, BranchConfigurationBuilder builder)
210+
=> this.branchConfigurationBuilders.GetOrAdd(value, () => builder);
211+
209212
public virtual TConfigurationBuilder WithBranch(string value, Action<BranchConfigurationBuilder> action)
210213
{
211214
var result = this.branchConfigurationBuilders.GetOrAdd(value, () => BranchConfigurationBuilder.New);
@@ -338,15 +341,15 @@ public void AddOverride(IReadOnlyDictionary<object, object?> value)
338341
}
339342
}
340343

341-
public virtual GitVersionConfiguration Build()
344+
public virtual IGitVersionConfiguration Build()
342345
{
343346
Dictionary<string, BranchConfiguration> branches = new();
344347
foreach (var (name, branchConfigurationBuilder) in this.branchConfigurationBuilders)
345348
{
346349
branches.Add(name, branchConfigurationBuilder.Build());
347350
}
348351

349-
GitVersionConfiguration configuration = new()
352+
IGitVersionConfiguration configuration = new GitVersionConfiguration
350353
{
351354
AssemblyVersioningScheme = this.assemblyVersioningScheme,
352355
AssemblyFileVersioningScheme = this.assemblyFileVersioningScheme,
@@ -397,26 +400,26 @@ public virtual GitVersionConfiguration Build()
397400
return configuration;
398401
}
399402

400-
private static void FinalizeConfiguration(GitVersionConfiguration configuration)
403+
private static void FinalizeConfiguration(IGitVersionConfiguration configuration)
401404
{
402405
foreach (var (name, branchConfiguration) in configuration.Branches)
403406
{
404407
FinalizeBranchConfiguration(configuration, name, branchConfiguration);
405408
}
406409
}
407410

408-
private static void FinalizeBranchConfiguration(GitVersionConfiguration configuration, string branchName,
411+
private static void FinalizeBranchConfiguration(IGitVersionConfiguration configuration, string branchName,
409412
IBranchConfiguration branchConfiguration)
410413
{
411-
var branches = new Dictionary<string, BranchConfiguration>(configuration.Branches);
414+
var branches = configuration.Branches.ToDictionary(x => x.Key, x => (BranchConfiguration)x.Value);
412415
foreach (var targetBranchName in branchConfiguration.IsSourceBranchFor)
413416
{
414417
var targetBranchConfiguration = branches[targetBranchName];
415418
targetBranchConfiguration.SourceBranches.Add(branchName);
416419
}
417420
}
418421

419-
private static void ValidateConfiguration(GitVersionConfiguration configuration)
422+
private static void ValidateConfiguration(IGitVersionConfiguration configuration)
420423
{
421424
foreach (var (name, branchConfiguration) in configuration.Branches)
422425
{

src/GitVersion.Core/Configuration/ConfigurationHelper.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,14 +23,14 @@ internal class ConfigurationHelper
2323
}
2424
private IReadOnlyDictionary<object, object?>? _dictionary;
2525

26-
public GitVersionConfiguration Configuration => this.configuration ??= ConfigurationSerializer.Deserialize<GitVersionConfiguration>(Yaml);
27-
private GitVersionConfiguration? configuration;
26+
public IGitVersionConfiguration Configuration => this.configuration ??= ConfigurationSerializer.Deserialize<GitVersionConfiguration>(Yaml);
27+
private IGitVersionConfiguration? configuration;
2828

2929
internal ConfigurationHelper(string yaml) => this._yaml = yaml.NotNull();
3030

3131
internal ConfigurationHelper(IReadOnlyDictionary<object, object?> dictionary) => this._dictionary = dictionary.NotNull();
3232

33-
public ConfigurationHelper(GitVersionConfiguration configuration) => this.configuration = configuration.NotNull();
33+
public ConfigurationHelper(IGitVersionConfiguration configuration) => this.configuration = configuration.NotNull();
3434

3535
public void Override(IReadOnlyDictionary<object, object?> value)
3636
{

src/GitVersion.Core/Configuration/IConfigurationBuilder.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,5 @@ internal interface IConfigurationBuilder
44
{
55
void AddOverride(IReadOnlyDictionary<object, object?> value);
66

7-
GitVersionConfiguration Build();
7+
IGitVersionConfiguration Build();
88
}

src/GitVersion.Core/Configuration/Init/SetConfig/ConfigureBranch.cs

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,15 @@ namespace GitVersion.Configuration.Init.SetConfig;
66
internal class ConfigureBranch : ConfigInitWizardStep
77
{
88
private string name;
9-
private BranchConfiguration branchConfiguration;
9+
private BranchConfigurationBuilder branchConfigurationBuilder;
1010

1111
public ConfigureBranch(IConsole console, IFileSystem fileSystem, ILog log, IConfigInitStepFactory stepFactory) : base(console, fileSystem, log, stepFactory)
1212
{
1313
}
1414

15-
public ConfigureBranch WithData(string configName, BranchConfiguration configuration)
15+
public ConfigureBranch WithData(string configName, BranchConfigurationBuilder configurationBuilder)
1616
{
17-
this.branchConfiguration = configuration;
17+
this.branchConfigurationBuilder = configurationBuilder;
1818
this.name = configName;
1919
return this;
2020
}
@@ -27,21 +27,25 @@ protected override StepResult HandleResult(string? result, Queue<ConfigInitWizar
2727
steps.Enqueue(this.StepFactory.CreateStep<ConfigureBranches>());
2828
return StepResult.Ok();
2929
case "1":
30-
steps.Enqueue(this.StepFactory.CreateStep<SetBranchTag>().WithData(name, branchConfiguration));
30+
steps.Enqueue(this.StepFactory.CreateStep<SetBranchTag>().WithData(name, this.branchConfigurationBuilder));
3131
return StepResult.Ok();
3232
case "2":
33-
steps.Enqueue(this.StepFactory.CreateStep<SetBranchIncrementMode>().WithData(name, branchConfiguration));
33+
steps.Enqueue(this.StepFactory.CreateStep<SetBranchIncrementMode>().WithData(name, this.branchConfigurationBuilder));
3434
return StepResult.Ok();
3535
}
3636

3737
return StepResult.InvalidResponseSelected();
3838
}
3939

40-
protected override string GetPrompt(ConfigurationBuilder configurationBuilder, string workingDirectory) => $@"What would you like to change for '{this.name}':
40+
protected override string GetPrompt(ConfigurationBuilder configurationBuilder, string workingDirectory)
41+
{
42+
var branchConfiguration = this.branchConfigurationBuilder.Build();
43+
return $@"What would you like to change for '{this.name}':
4144
4245
0) Go Back
43-
1) Branch Pr-release tag (Current: {this.branchConfiguration.Label})
44-
2) Branch Increment mode (per commit/after tag) (Current: {this.branchConfiguration.VersioningMode})";
46+
1) Branch Pr-release tag (Current: {branchConfiguration.Label})
47+
2) Branch Increment mode (per commit/after tag) (Current: {branchConfiguration.VersioningMode})";
48+
}
4549

4650
protected override string DefaultResult => "0";
4751
}

src/GitVersion.Core/Configuration/Init/SetConfig/ConfigureBranches.cs

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -22,14 +22,10 @@ protected override StepResult HandleResult(string? result, Queue<ConfigInitWizar
2222
try
2323
{
2424
var configuration = configurationBuilder.Build();
25-
var foundBranch = OrderedBranches(configuration).ElementAt(parsed - 1);
26-
var branchConfiguration = foundBranch.Value;
27-
if (branchConfiguration is null)
28-
{
29-
branchConfiguration = new BranchConfiguration();
30-
configurationBuilder.WithBranch(foundBranch.Key, builder => builder.WithConfiguration(branchConfiguration));
31-
}
32-
steps.Enqueue(this.StepFactory.CreateStep<ConfigureBranch>().WithData(foundBranch.Key, branchConfiguration));
25+
var (name, branchConfiguration) = OrderedBranches(configuration).ElementAt(parsed - 1);
26+
var branchConfigurationBuilder = BranchConfigurationBuilder.New.WithConfiguration(branchConfiguration);
27+
configurationBuilder.WithBranch(name, branchConfigurationBuilder);
28+
steps.Enqueue(this.StepFactory.CreateStep<ConfigureBranch>().WithData(name, branchConfigurationBuilder));
3329
return StepResult.Ok();
3430
}
3531
catch (ArgumentOutOfRangeException)
@@ -48,15 +44,16 @@ protected override string GetPrompt(ConfigurationBuilder configurationBuilder, s
4844
" + string.Join(System.Environment.NewLine, OrderedBranches(configuration).Select((c, i) => $"{i + 1}) {c.Key}"));
4945
}
5046

51-
private static IOrderedEnumerable<KeyValuePair<string, BranchConfiguration>> OrderedBranches(GitVersionConfiguration configuration)
47+
private static IOrderedEnumerable<KeyValuePair<string, IBranchConfiguration>> OrderedBranches(IGitVersionConfiguration configuration)
5248
{
5349
var defaultConfig = GitFlowConfigurationBuilder.New.Build();
5450

51+
var configurationBranches = configuration.Branches;
5552
var defaultConfigurationBranches = defaultConfig.Branches
56-
.Where(k => !configuration.Branches.ContainsKey(k.Key))
53+
.Where(k => !configurationBranches.ContainsKey(k.Key))
5754
// Return an empty branch configuration
58-
.Select(v => new KeyValuePair<string, BranchConfiguration>(v.Key, new BranchConfiguration()));
59-
return configuration.Branches.Union(defaultConfigurationBranches).OrderBy(b => b.Key);
55+
.Select(v => new KeyValuePair<string, IBranchConfiguration>(v.Key, new BranchConfiguration()));
56+
return configurationBranches.Union(defaultConfigurationBranches).OrderBy(b => b.Key);
6057
}
6158

6259
protected override string DefaultResult => "0";

src/GitVersion.Core/Configuration/Init/SetConfig/SetBranchIncrementMode.cs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,15 @@ namespace GitVersion.Configuration.Init.SetConfig;
77
internal class SetBranchIncrementMode : ConfigInitWizardStep
88
{
99
private string name;
10-
private BranchConfiguration branchConfiguration;
10+
private BranchConfigurationBuilder branchConfigurationBuilder;
1111

1212
public SetBranchIncrementMode(IConsole console, IFileSystem fileSystem, ILog log, IConfigInitStepFactory stepFactory) : base(console, fileSystem, log, stepFactory)
1313
{
1414
}
1515

16-
public SetBranchIncrementMode WithData(string configName, BranchConfiguration configuration)
16+
public SetBranchIncrementMode WithData(string configName, BranchConfigurationBuilder configurationBuilder)
1717
{
18-
this.branchConfiguration = configuration;
18+
this.branchConfigurationBuilder = configurationBuilder;
1919
this.name = configName;
2020
return this;
2121
}
@@ -26,15 +26,15 @@ protected override StepResult HandleResult(string? result, Queue<ConfigInitWizar
2626
switch (result)
2727
{
2828
case "0":
29-
steps.Enqueue(configureBranchStep.WithData(this.name, this.branchConfiguration));
29+
steps.Enqueue(configureBranchStep.WithData(this.name, this.branchConfigurationBuilder));
3030
return StepResult.Ok();
3131
case "1":
32-
this.branchConfiguration.VersioningMode = VersioningMode.ContinuousDelivery;
33-
steps.Enqueue(configureBranchStep.WithData(name, this.branchConfiguration));
32+
this.branchConfigurationBuilder.WithVersioningMode(VersioningMode.ContinuousDelivery);
33+
steps.Enqueue(configureBranchStep.WithData(name, this.branchConfigurationBuilder));
3434
return StepResult.Ok();
3535
case "2":
36-
this.branchConfiguration.VersioningMode = VersioningMode.ContinuousDeployment;
37-
steps.Enqueue(configureBranchStep.WithData(name, this.branchConfiguration));
36+
this.branchConfigurationBuilder.WithVersioningMode(VersioningMode.ContinuousDeployment);
37+
steps.Enqueue(configureBranchStep.WithData(name, this.branchConfigurationBuilder));
3838
return StepResult.Ok();
3939
}
4040

src/GitVersion.Core/Configuration/Init/SetConfig/SetBranchTag.cs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,15 @@ namespace GitVersion.Configuration.Init.SetConfig;
77
internal class SetBranchTag : ConfigInitWizardStep
88
{
99
private string name;
10-
private BranchConfiguration branchConfiguration;
10+
private BranchConfigurationBuilder branchConfigurationBuilder;
1111

1212
public SetBranchTag(IConsole console, IFileSystem fileSystem, ILog log, IConfigInitStepFactory stepFactory) : base(console, fileSystem, log, stepFactory)
1313
{
1414
}
1515

16-
public SetBranchTag WithData(string configName, BranchConfiguration configuration)
16+
public SetBranchTag WithData(string configName, BranchConfigurationBuilder configurationBuilder)
1717
{
18-
this.branchConfiguration = configuration;
18+
this.branchConfigurationBuilder = configurationBuilder;
1919
this.name = configName;
2020
return this;
2121
}
@@ -31,15 +31,15 @@ protected override StepResult HandleResult(string? result, Queue<ConfigInitWizar
3131
switch (result)
3232
{
3333
case "0":
34-
steps.Enqueue(configureBranchStep.WithData(this.name, this.branchConfiguration));
34+
steps.Enqueue(configureBranchStep.WithData(this.name, this.branchConfigurationBuilder));
3535
return StepResult.Ok();
3636
case "1":
37-
this.branchConfiguration.Label = string.Empty;
38-
steps.Enqueue(configureBranchStep.WithData(name, this.branchConfiguration));
37+
this.branchConfigurationBuilder.WithLabel(string.Empty);
38+
steps.Enqueue(configureBranchStep.WithData(name, this.branchConfigurationBuilder));
3939
return StepResult.Ok();
4040
default:
41-
this.branchConfiguration.Label = result;
42-
steps.Enqueue(configureBranchStep.WithData(name, this.branchConfiguration));
41+
this.branchConfigurationBuilder.WithLabel(result);
42+
steps.Enqueue(configureBranchStep.WithData(name, this.branchConfigurationBuilder));
4343
return StepResult.Ok();
4444
}
4545
}

0 commit comments

Comments
 (0)