Skip to content

Commit 767fabd

Browse files
committed
FinalizeConfiguration and ValidateConfiguration in TestConfigurationBuilderBase.
1 parent e18d34d commit 767fabd

File tree

1 file changed

+58
-7
lines changed

1 file changed

+58
-7
lines changed

src/GitVersion.Core.Tests/Helpers/TestConfigurationBuilderBase.cs

Lines changed: 58 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -215,16 +215,16 @@ public virtual TConfigurationBuilder WithConfiguration(GitVersionConfiguration v
215215
WithUpdateBuildNumber(value.UpdateBuildNumber);
216216
WithSemanticVersionFormat(value.SemanticVersionFormat);
217217
WithMergeMessageFormats(value.MergeMessageFormats);
218-
foreach (var item in value.Branches)
218+
foreach (var (name, branchConfiguration) in value.Branches)
219219
{
220-
WithBranch(item.Key).WithConfiguration(item.Value);
220+
WithBranch(name).WithConfiguration(branchConfiguration);
221221
}
222222
return (TConfigurationBuilder)this;
223223
}
224224

225225
public virtual GitVersionConfiguration Build()
226226
{
227-
GitVersionConfiguration result = new()
227+
GitVersionConfiguration configuration = new()
228228
{
229229
AssemblyVersioningScheme = this.assemblyVersioningScheme,
230230
AssemblyFileVersioningScheme = this.assemblyFileVersioningScheme,
@@ -249,12 +249,63 @@ public virtual GitVersionConfiguration Build()
249249
MergeMessageFormats = this.mergeMessageFormats ?? new()
250250
};
251251
Dictionary<string, BranchConfiguration> branches = new();
252-
foreach (var item in this.branchConfigurationBuilders)
252+
foreach (var (name, branchConfigurationBuilder) in this.branchConfigurationBuilders)
253253
{
254-
branches.Add(item.Key, item.Value.Build());
254+
branches.Add(name, branchConfigurationBuilder.Build());
255+
}
256+
257+
FinalizeConfiguration(configuration);
258+
ValidateConfiguration(configuration);
259+
260+
configuration.Branches = branches;
261+
return configuration;
262+
}
263+
264+
private static void FinalizeConfiguration(GitVersionConfiguration configuration)
265+
{
266+
foreach (var (name, branchConfiguration) in configuration.Branches)
267+
{
268+
FinalizeBranchConfiguration(configuration, name, branchConfiguration);
269+
}
270+
}
271+
272+
private static void FinalizeBranchConfiguration(GitVersionConfiguration configuration, string name, BranchConfiguration branchConfiguration)
273+
{
274+
branchConfiguration.Name = name;
275+
if (branchConfiguration.IsSourceBranchFor == null)
276+
return;
277+
278+
foreach (var targetBranchName in branchConfiguration.IsSourceBranchFor)
279+
{
280+
var targetBranchConfig = configuration.Branches[targetBranchName];
281+
targetBranchConfig.SourceBranches ??= new HashSet<string>();
282+
targetBranchConfig.SourceBranches.Add(name);
283+
}
284+
}
285+
286+
private static void ValidateConfiguration(GitVersionConfiguration configuration)
287+
{
288+
foreach (var (name, branchConfiguration) in configuration.Branches)
289+
{
290+
var helpUrl = $"{System.Environment.NewLine}See https://gitversion.net/docs/reference/configuration for more info";
291+
292+
if (branchConfiguration.Regex == null)
293+
{
294+
throw new ConfigurationException($"Branch configuration '{name}' is missing required configuration 'regex'{helpUrl}");
295+
}
296+
297+
var sourceBranches = branchConfiguration?.SourceBranches;
298+
if (sourceBranches == null)
299+
{
300+
throw new ConfigurationException($"Branch configuration '{name}' is missing required configuration 'source-branches'{helpUrl}");
301+
}
302+
303+
var missingSourceBranches = sourceBranches.Where(sb => !configuration.Branches.ContainsKey(sb)).ToArray();
304+
if (missingSourceBranches.Any())
305+
{
306+
throw new ConfigurationException($"Branch configuration '{name}' defines these 'source-branches' that are not configured: '[{string.Join(",", missingSourceBranches)}]'{helpUrl}");
307+
}
255308
}
256-
result.Branches = branches;
257-
return result;
258309
}
259310

260311
public record BranchMetaData

0 commit comments

Comments
 (0)