From 6da705980074b9f24ed2cc94d0f8768cab29bece Mon Sep 17 00:00:00 2001 From: Hardy Hobeck Date: Fri, 10 Mar 2023 20:11:47 +0100 Subject: [PATCH 1/7] Change GitVersionConfiguration and BranchConfiguration to record type and extract interfaces. --- .../ConfigurationExtensionsTests.cs | 6 +- ...riteOutEffectiveConfiguration.approved.txt | 10 ++ .../ConfigurationProviderTests.cs | 15 --- ...itScenarios.CanSetNextVersion.approved.txt | 2 + .../MergeMessageTests.cs | 44 +++--- .../NextVersionCalculatorTests.cs | 6 +- .../Configuration/BranchConfiguration.cs | 126 +++++++----------- .../BranchConfigurationBuilder.cs | 69 ++++------ .../Configuration/ConfigurationBuilderBase.cs | 71 +++------- .../Configuration/ConfigurationExtensions.cs | 20 ++- .../Configuration/ConfigurationProvider.cs | 3 +- .../Configuration/EffectiveConfiguration.cs | 4 +- .../Configuration/GitVersionConfiguration.cs | 68 +++++----- .../Configuration/IBranchConfiguration.cs | 42 ++++++ .../Configuration/IGitVersionConfiguration.cs | 44 ++++++ .../Configuration/IIgnoreConfiguration.cs | 9 ++ .../Configuration/IgnoreConfiguration.cs | 11 +- .../Init/SetConfig/ConfigureBranches.cs | 2 +- src/GitVersion.Core/Core/RepositoryStore.cs | 3 +- .../Core/SourceBranchFinder.cs | 3 +- src/GitVersion.Core/PublicAPI.Unshipped.txt | 105 +++++++-------- .../MainlineVersionCalculator.cs | 2 +- .../NextVersionCalculator.cs | 4 +- 23 files changed, 343 insertions(+), 326 deletions(-) create mode 100644 src/GitVersion.Core/Configuration/IBranchConfiguration.cs create mode 100644 src/GitVersion.Core/Configuration/IGitVersionConfiguration.cs create mode 100644 src/GitVersion.Core/Configuration/IIgnoreConfiguration.cs diff --git a/src/GitVersion.Core.Tests/Configuration/ConfigurationExtensionsTests.cs b/src/GitVersion.Core.Tests/Configuration/ConfigurationExtensionsTests.cs index 453e999a8b..1aa8147b48 100644 --- a/src/GitVersion.Core.Tests/Configuration/ConfigurationExtensionsTests.cs +++ b/src/GitVersion.Core.Tests/Configuration/ConfigurationExtensionsTests.cs @@ -13,9 +13,9 @@ public void GetReleaseBranchConfigReturnsAllReleaseBranches() { Branches = new Dictionary { - { "foo", new BranchConfiguration { Name = "foo" } }, - { "bar", new BranchConfiguration { Name = "bar", IsReleaseBranch = true } }, - { "baz", new BranchConfiguration { Name = "baz", IsReleaseBranch = true } } + { "foo", new BranchConfiguration() }, + { "bar", new BranchConfiguration { IsReleaseBranch = true } }, + { "baz", new BranchConfiguration { IsReleaseBranch = true } } } }; diff --git a/src/GitVersion.Core.Tests/Configuration/ConfigurationProviderTests.CanWriteOutEffectiveConfiguration.approved.txt b/src/GitVersion.Core.Tests/Configuration/ConfigurationProviderTests.CanWriteOutEffectiveConfiguration.approved.txt index 31e89185aa..24ef92139a 100644 --- a/src/GitVersion.Core.Tests/Configuration/ConfigurationProviderTests.CanWriteOutEffectiveConfiguration.approved.txt +++ b/src/GitVersion.Core.Tests/Configuration/ConfigurationProviderTests.CanWriteOutEffectiveConfiguration.approved.txt @@ -19,6 +19,7 @@ branches: track-merge-target: true regex: ^dev(elop)?(ment)?$ source-branches: [] + is-source-branch-for: [] tracks-release-branches: true is-release-branch: false is-mainline: false @@ -32,6 +33,7 @@ branches: source-branches: - develop - release + is-source-branch-for: [] tracks-release-branches: false is-release-branch: false is-mainline: true @@ -47,6 +49,7 @@ branches: - main - support - release + is-source-branch-for: [] tracks-release-branches: false is-release-branch: true is-mainline: false @@ -63,6 +66,7 @@ branches: - feature - support - hotfix + is-source-branch-for: [] pre-release-weight: 30000 pull-request: mode: ContinuousDelivery @@ -77,6 +81,7 @@ branches: - feature - support - hotfix + is-source-branch-for: [] pre-release-weight: 30000 hotfix: mode: ContinuousDelivery @@ -88,6 +93,7 @@ branches: - main - support - hotfix + is-source-branch-for: [] pre-release-weight: 30000 support: label: '' @@ -97,6 +103,7 @@ branches: regex: ^support[/-] source-branches: - main + is-source-branch-for: [] tracks-release-branches: false is-release-branch: false is-mainline: true @@ -114,6 +121,7 @@ branches: - pull-request - hotfix - support + is-source-branch-for: [] ignore: sha: [] mode: ContinuousDelivery @@ -124,6 +132,8 @@ track-merge-target: false track-merge-message: true commit-message-incrementing: Enabled regex: '' +source-branches: [] +is-source-branch-for: [] tracks-release-branches: false is-release-branch: false is-mainline: false diff --git a/src/GitVersion.Core.Tests/Configuration/ConfigurationProviderTests.cs b/src/GitVersion.Core.Tests/Configuration/ConfigurationProviderTests.cs index d861613e1e..42d7fc8c6b 100644 --- a/src/GitVersion.Core.Tests/Configuration/ConfigurationProviderTests.cs +++ b/src/GitVersion.Core.Tests/Configuration/ConfigurationProviderTests.cs @@ -79,21 +79,6 @@ public void RegexIsRequired() "See https://gitversion.net/docs/reference/configuration for more info"); } - [Test] - public void SourceBranchIsRequired() - { - const string text = @" -next-version: 2.0.0 -branches: - bug: - regex: 'bug[/-]' - label: bugfix"; - SetupConfigFileContent(text); - var ex = Should.Throw(() => this.configurationProvider.ProvideForDirectory(this.repoPath)); - ex.Message.ShouldBe($"Branch configuration 'bug' is missing required configuration 'source-branches'{System.Environment.NewLine}" + - "See https://gitversion.net/docs/reference/configuration for more info"); - } - [Test(Description = "This test proves the configuration validation will fail early with a helpful message when a branch listed in source-branches has no configuration.")] public void SourceBranchesValidationShouldFailWhenMatchingBranchConfigurationIsMissing() { diff --git a/src/GitVersion.Core.Tests/Configuration/Init/InitScenarios.CanSetNextVersion.approved.txt b/src/GitVersion.Core.Tests/Configuration/Init/InitScenarios.CanSetNextVersion.approved.txt index 71bbab7634..5d5d726917 100644 --- a/src/GitVersion.Core.Tests/Configuration/Init/InitScenarios.CanSetNextVersion.approved.txt +++ b/src/GitVersion.Core.Tests/Configuration/Init/InitScenarios.CanSetNextVersion.approved.txt @@ -6,3 +6,5 @@ branches: {} ignore: sha: [] increment: None +source-branches: [] +is-source-branch-for: [] diff --git a/src/GitVersion.Core.Tests/MergeMessageTests.cs b/src/GitVersion.Core.Tests/MergeMessageTests.cs index 87d6f2ff31..2468ade21e 100644 --- a/src/GitVersion.Core.Tests/MergeMessageTests.cs +++ b/src/GitVersion.Core.Tests/MergeMessageTests.cs @@ -6,19 +6,19 @@ namespace GitVersion.Core.Tests; [TestFixture] public class MergeMessageTests : TestBase { - private readonly GitVersionConfiguration configuration = new() { LabelPrefix = ConfigurationConstants.DefaultLabelPrefix }; + private readonly GitFlowConfigurationBuilder configurationBuilder = GitFlowConfigurationBuilder.New; [Test] public void NullMessageStringThrows() => // Act / Assert - Should.Throw(() => new MergeMessage(null!, this.configuration)); + Should.Throw(() => new MergeMessage(null!, this.configurationBuilder.Build())); [TestCase("")] [TestCase("\t\t ")] public void EmptyMessageString(string message) { // Act - var sut = new MergeMessage(message, this.configuration); + var sut = new MergeMessage(message, this.configurationBuilder.Build()); // Assert sut.TargetBranch.ShouldBeNull(); @@ -67,7 +67,7 @@ public void ParsesMergeMessage( SemanticVersion expectedVersion) { // Act - var sut = new MergeMessage(message, this.configuration); + var sut = new MergeMessage(message, this.configurationBuilder.Build()); // Assert sut.FormatName.ShouldBe("Default"); @@ -97,7 +97,7 @@ public void ParsesGitHubPullMergeMessage( int? expectedPullRequestNumber) { // Act - var sut = new MergeMessage(message, this.configuration); + var sut = new MergeMessage(message, this.configurationBuilder.Build()); // Assert sut.FormatName.ShouldBe("GitHubPull"); @@ -132,7 +132,7 @@ public void ParsesBitBucketPullMergeMessage( int? expectedPullRequestNumber) { // Act - var sut = new MergeMessage(message, this.configuration); + var sut = new MergeMessage(message, this.configurationBuilder.Build()); // Assert sut.FormatName.ShouldBe("BitBucketPull"); @@ -162,7 +162,7 @@ public void ParsesBitBucketPullMergeMessage_v7( int? expectedPullRequestNumber) { // Act - var sut = new MergeMessage(message, this.configuration); + var sut = new MergeMessage(message, this.configurationBuilder.Build()); // Assert sut.FormatName.ShouldBe("BitBucketPullv7"); @@ -193,7 +193,7 @@ public void ParsesSmartGitMergeMessage( SemanticVersion expectedVersion) { // Act - var sut = new MergeMessage(message, this.configuration); + var sut = new MergeMessage(message, this.configurationBuilder.Build()); // Assert sut.FormatName.ShouldBe("SmartGit"); @@ -224,7 +224,7 @@ public void ParsesRemoteTrackingMergeMessage( SemanticVersion expectedVersion) { // Act - var sut = new MergeMessage(message, this.configuration); + var sut = new MergeMessage(message, this.configurationBuilder.Build()); // Assert sut.FormatName.ShouldBe("RemoteTracking"); @@ -247,7 +247,7 @@ public void ParsesRemoteTrackingMergeMessage( public void ParsesInvalidMergeMessage(string message) { // Act - var sut = new MergeMessage(message, this.configuration); + var sut = new MergeMessage(message, this.configurationBuilder.Build()); // Assert sut.FormatName.ShouldBeNull(); @@ -264,13 +264,13 @@ public void MatchesSingleCustomMessage() // Arrange const string message = "My custom message"; const string definition = "MyCustom"; - this.configuration.MergeMessageFormats = new Dictionary + this.configurationBuilder.WithMergeMessageFormats(new Dictionary { [definition] = message - }; + }); // Act - var sut = new MergeMessage(message, this.configuration); + var sut = new MergeMessage(message, this.configurationBuilder.Build()); // Assert sut.FormatName.ShouldBe(definition); @@ -288,15 +288,15 @@ public void MatchesMultipleCustomMessages() // Arrange const string format = "My custom message"; const string definition = "MyCustom"; - this.configuration.MergeMessageFormats = new Dictionary + this.configurationBuilder.WithMergeMessageFormats(new Dictionary { ["Default2"] = "some example", ["Default3"] = "another example", [definition] = format - }; + }); // Act - var sut = new MergeMessage(format, this.configuration); + var sut = new MergeMessage(format, this.configurationBuilder.Build()); // Assert sut.FormatName.ShouldBe(definition); @@ -314,16 +314,16 @@ public void MatchesCaptureGroupsFromCustomMessages() // Arrange const string format = @"^Merged PR #(?\d+) into (?[^\s]*) from (?:(?[^\s]*))"; const string definition = "MyCustom"; - this.configuration.MergeMessageFormats = new Dictionary + this.configurationBuilder.WithMergeMessageFormats(new Dictionary { [definition] = format - }; + }); const int pr = 1234; const string target = MainBranch; const string source = "feature/2.0.0/example"; // Act - var sut = new MergeMessage($"Merged PR #{pr} into {target} from {source}", this.configuration); + var sut = new MergeMessage($"Merged PR #{pr} into {target} from {source}", this.configurationBuilder.Build()); // Assert sut.FormatName.ShouldBe(definition); @@ -341,15 +341,15 @@ public void ReturnsAfterFirstMatchingPattern() // Arrange const string format = @"^Merge (branch|tag) '(?[^']*)'(?: into (?[^\s]*))*"; const string definition = "MyCustom"; - this.configuration.MergeMessageFormats = new Dictionary + this.configurationBuilder.WithMergeMessageFormats(new Dictionary { [definition] = format, ["Default2"] = format, ["Default3"] = format - }; + }); // Act - var sut = new MergeMessage("Merge branch 'this'", this.configuration); + var sut = new MergeMessage("Merge branch 'this'", this.configurationBuilder.Build()); // Assert sut.FormatName.ShouldBe(definition); diff --git a/src/GitVersion.Core.Tests/VersionCalculation/NextVersionCalculatorTests.cs b/src/GitVersion.Core.Tests/VersionCalculation/NextVersionCalculatorTests.cs index 20f5ec3b5b..f17257b913 100644 --- a/src/GitVersion.Core.Tests/VersionCalculation/NextVersionCalculatorTests.cs +++ b/src/GitVersion.Core.Tests/VersionCalculation/NextVersionCalculatorTests.cs @@ -148,8 +148,6 @@ public void MergeFeatureIntoMainline() public void MergeFeatureIntoMainlineWithMinorIncrement() { var configuration = GitFlowConfigurationBuilder.New - .WithIgnoreConfiguration(new()) - .WithMergeMessageFormats(new()) .WithBranch("main", builder => builder.WithVersioningMode(VersioningMode.Mainline)) .WithBranch("feature", builder => builder .WithVersioningMode(VersioningMode.Mainline) @@ -176,8 +174,6 @@ public void MergeFeatureIntoMainlineWithMinorIncrement() public void MergeFeatureIntoMainlineWithMinorIncrementAndThenMergeHotfix() { var configuration = GitFlowConfigurationBuilder.New - .WithIgnoreConfiguration(new()) - .WithMergeMessageFormats(new()) .WithVersioningMode(VersioningMode.Mainline) .WithBranch("feature", builder => builder .WithIncrement(IncrementStrategy.Minor) @@ -477,7 +473,7 @@ public void ShouldIgnorePreReleaseVersionInMainlineMode() nextVersion.BaseVersion.SemanticVersion.ShouldBe(lowerVersion.SemanticVersion); } - private class TestIgnoreConfig : IgnoreConfiguration + private record TestIgnoreConfig : IgnoreConfiguration { private readonly IVersionFilter filter; diff --git a/src/GitVersion.Core/Configuration/BranchConfiguration.cs b/src/GitVersion.Core/Configuration/BranchConfiguration.cs index cf3edfceef..6f85cca803 100644 --- a/src/GitVersion.Core/Configuration/BranchConfiguration.cs +++ b/src/GitVersion.Core/Configuration/BranchConfiguration.cs @@ -1,127 +1,101 @@ using GitVersion.Attributes; +using GitVersion.Extensions; using GitVersion.VersionCalculation; namespace GitVersion.Configuration; -public class BranchConfiguration +public record BranchConfiguration : IBranchConfiguration { - public BranchConfiguration() - { - } - - public BranchConfiguration(BranchConfiguration branchConfiguration) - { - VersioningMode = branchConfiguration.VersioningMode; - Label = branchConfiguration.Label; - Increment = branchConfiguration.Increment; - PreventIncrementOfMergedBranchVersion = branchConfiguration.PreventIncrementOfMergedBranchVersion; - LabelNumberPattern = branchConfiguration.LabelNumberPattern; - TrackMergeTarget = branchConfiguration.TrackMergeTarget; - TrackMergeMessage = branchConfiguration.TrackMergeMessage; - CommitMessageIncrementing = branchConfiguration.CommitMessageIncrementing; - TracksReleaseBranches = branchConfiguration.TracksReleaseBranches; - Regex = branchConfiguration.Regex; - IsReleaseBranch = branchConfiguration.IsReleaseBranch; - IsMainline = branchConfiguration.IsMainline; - Name = branchConfiguration.Name; - SourceBranches = branchConfiguration.SourceBranches; - IsSourceBranchFor = branchConfiguration.IsSourceBranchFor; - PreReleaseWeight = branchConfiguration.PreReleaseWeight; - } - [JsonPropertyName("mode")] [JsonPropertyDescription("The versioning mode for this branch. Can be 'ContinuousDelivery', 'ContinuousDeployment', 'Mainline'.")] - public VersioningMode? VersioningMode { get; set; } + public VersioningMode? VersioningMode { get; internal set; } - /// - /// Special value 'useBranchName' will extract the tag from the branch name - /// [JsonPropertyName("label")] [JsonPropertyDescription("The label to use for this branch. Can be 'useBranchName' to extract the label from the branch name. Use the value {BranchName} as a placeholder to insert the branch name.")] - public string? Label { get; set; } + public string? Label { get; internal set; } [JsonPropertyName("increment")] [JsonPropertyDescription("The increment strategy for this branch. Can be 'Inherit', 'Patch', 'Minor', 'Major', 'None'.")] - public IncrementStrategy Increment { get; set; } + public IncrementStrategy Increment { get; internal set; } [JsonPropertyName("prevent-increment-of-merged-branch-version")] [JsonPropertyDescription("Prevent increment of merged branch version.")] - public bool? PreventIncrementOfMergedBranchVersion { get; set; } + public bool? PreventIncrementOfMergedBranchVersion { get; internal set; } [JsonPropertyName("label-number-pattern")] - [JsonPropertyDescription(@"The regex pattern to use to extract the number from the branch name. Defaults to '[/-](?\d+)[-/]'.")] + [JsonPropertyDescription(@"The regular expression pattern to use to extract the number from the branch name. Defaults to '[/-](?\d+)[-/]'.")] [JsonPropertyPattern(@"[/-](?\d+)[-/]")] - public string? LabelNumberPattern { get; set; } + public string? LabelNumberPattern { get; internal set; } [JsonPropertyName("track-merge-target")] [JsonPropertyDescription("Strategy which will look for tagged merge commits directly off the current branch.")] - public bool? TrackMergeTarget { get; set; } + public bool? TrackMergeTarget { get; internal set; } [JsonPropertyName("track-merge-message")] [JsonPropertyDescription("This property is a branch related property and gives the user the possibility to control the behavior of whether the merge commit message will be interpreted as a next version or not.")] - public bool? TrackMergeMessage { get; set; } + public bool? TrackMergeMessage { get; internal set; } [JsonPropertyName("commit-message-incrementing")] [JsonPropertyDescription("Sets whether it should be possible to increment the version with special syntax in the commit message. Can be 'Disabled', 'Enabled' or 'MergeMessageOnly'.")] - public CommitMessageIncrementMode? CommitMessageIncrementing { get; set; } + public CommitMessageIncrementMode? CommitMessageIncrementing { get; internal set; } [JsonPropertyName("regex")] - [JsonPropertyDescription("The regex pattern to use to match this branch.")] - public string? Regex { get; set; } + [JsonPropertyDescription("The regular expression pattern to use to match this branch.")] + public string? Regex { get; internal set; } + + [JsonIgnore] + string? IBranchConfiguration.RegularExpression => Regex; [JsonPropertyName("source-branches")] [JsonPropertyDescription("The source branches for this branch.")] - public HashSet? SourceBranches { get; set; } + public HashSet SourceBranches { get; internal set; } = new(); + + [JsonIgnore] + IReadOnlyCollection IBranchConfiguration.SourceBranches => SourceBranches; [JsonPropertyName("is-source-branch-for")] [JsonPropertyDescription("The branches that this branch is a source branch.")] - public HashSet? IsSourceBranchFor { get; set; } + public HashSet IsSourceBranchFor { get; internal set; } = new(); + + [JsonIgnore] + IReadOnlyCollection IBranchConfiguration.IsSourceBranchFor => IsSourceBranchFor; [JsonPropertyName("tracks-release-branches")] - [JsonPropertyDescription("Indicates this branch config represents develop in GitFlow.")] - public bool? TracksReleaseBranches { get; set; } + [JsonPropertyDescription("Indicates this branch configuration represents develop in GitFlow.")] + public bool? TracksReleaseBranches { get; internal set; } [JsonPropertyName("is-release-branch")] - [JsonPropertyDescription("Indicates this branch config represents a release branch in GitFlow.")] - public bool? IsReleaseBranch { get; set; } + [JsonPropertyDescription("Indicates this branch configuration represents a release branch in GitFlow.")] + public bool? IsReleaseBranch { get; internal set; } [JsonPropertyName("is-mainline")] [JsonPropertyDescription("When using Mainline mode, this indicates that this branch is a mainline. By default main and support/* are mainlines.")] - public bool? IsMainline { get; set; } + public bool? IsMainline { get; internal set; } [JsonPropertyName("pre-release-weight")] [JsonPropertyDescription("Provides a way to translate the PreReleaseLabel to a number.")] - public int? PreReleaseWeight { get; set; } - - /// - /// The name given to this configuration in the configuration file. - /// - [JsonIgnore] - public string Name { get; set; } + public int? PreReleaseWeight { get; internal set; } - public BranchConfiguration Inherit(BranchConfiguration? parentConfig) + public virtual BranchConfiguration Inherit(BranchConfiguration configuration) { - if (parentConfig is null) return this; - - var result = new BranchConfiguration(this); - - if (result.Increment == IncrementStrategy.Inherit) - result.Increment = parentConfig.Increment; - result.VersioningMode ??= parentConfig.VersioningMode; - result.Label ??= parentConfig.Label; - result.PreventIncrementOfMergedBranchVersion ??= parentConfig.PreventIncrementOfMergedBranchVersion; - result.LabelNumberPattern ??= parentConfig.LabelNumberPattern; - result.TrackMergeTarget ??= parentConfig.TrackMergeTarget; - result.TrackMergeMessage ??= parentConfig.TrackMergeMessage; - result.CommitMessageIncrementing ??= parentConfig.CommitMessageIncrementing; - result.Regex ??= parentConfig.Regex; - result.SourceBranches ??= parentConfig.SourceBranches; - result.IsSourceBranchFor ??= parentConfig.IsSourceBranchFor; - result.TracksReleaseBranches ??= parentConfig.TracksReleaseBranches; - result.IsReleaseBranch ??= parentConfig.IsReleaseBranch; - result.IsMainline ??= parentConfig.IsMainline; - result.PreReleaseWeight ??= parentConfig.PreReleaseWeight; - - return result; + configuration.NotNull(); + + return new BranchConfiguration(this) + { + Increment = Increment == IncrementStrategy.Inherit ? configuration.Increment : Increment, + VersioningMode = VersioningMode ?? configuration.VersioningMode, + Label = Label ?? configuration.Label, + PreventIncrementOfMergedBranchVersion = PreventIncrementOfMergedBranchVersion + ?? configuration.PreventIncrementOfMergedBranchVersion, + LabelNumberPattern = LabelNumberPattern ?? configuration.LabelNumberPattern, + TrackMergeTarget = TrackMergeTarget ?? configuration.TrackMergeTarget, + TrackMergeMessage = TrackMergeMessage ?? configuration.TrackMergeMessage, + CommitMessageIncrementing = CommitMessageIncrementing ?? configuration.CommitMessageIncrementing, + Regex = Regex ?? configuration.Regex, + TracksReleaseBranches = TracksReleaseBranches ?? configuration.TracksReleaseBranches, + IsReleaseBranch = IsReleaseBranch ?? configuration.IsReleaseBranch, + IsMainline = IsMainline ?? configuration.IsMainline, + PreReleaseWeight = PreReleaseWeight ?? configuration.PreReleaseWeight + }; } } diff --git a/src/GitVersion.Core/Configuration/BranchConfigurationBuilder.cs b/src/GitVersion.Core/Configuration/BranchConfigurationBuilder.cs index 13d06d3f62..579dd326cb 100644 --- a/src/GitVersion.Core/Configuration/BranchConfigurationBuilder.cs +++ b/src/GitVersion.Core/Configuration/BranchConfigurationBuilder.cs @@ -6,7 +6,6 @@ public class BranchConfigurationBuilder { public static BranchConfigurationBuilder New => new(); - private string name; private VersioningMode? versioningMode; private string? label; private IncrementStrategy increment; @@ -16,8 +15,8 @@ public class BranchConfigurationBuilder private bool? trackMergeMessage; private CommitMessageIncrementMode? commitMessageIncrementing; private string? regex; - private HashSet? sourceBranches; - private HashSet? isSourceBranchFor; + private HashSet sourceBranches = new(); + private HashSet isSourceBranchFor = new(); private bool? tracksReleaseBranches; private bool? isReleaseBranch; private bool? isMainline; @@ -27,12 +26,6 @@ private BranchConfigurationBuilder() { } - public virtual BranchConfigurationBuilder WithName(string value) - { - this.name = value; - return this; - } - public virtual BranchConfigurationBuilder WithVersioningMode(VersioningMode? value) { this.versioningMode = value; @@ -87,27 +80,27 @@ public virtual BranchConfigurationBuilder WithRegex(string? value) return this; } - public virtual BranchConfigurationBuilder WithSourceBranches(IEnumerable? values) + public virtual BranchConfigurationBuilder WithSourceBranches(IEnumerable values) { - WithSourceBranches(values?.ToArray()); + WithSourceBranches(values.ToArray()); return this; } - public virtual BranchConfigurationBuilder WithSourceBranches(params string[]? values) + public virtual BranchConfigurationBuilder WithSourceBranches(params string[] values) { - this.sourceBranches = values == null ? null : new HashSet(values); + this.sourceBranches = new HashSet(values); return this; } - public virtual BranchConfigurationBuilder WithIsSourceBranchFor(IEnumerable? values) + public virtual BranchConfigurationBuilder WithIsSourceBranchFor(IEnumerable values) { - WithIsSourceBranchFor(values?.ToArray()); + WithIsSourceBranchFor(values.ToArray()); return this; } - public virtual BranchConfigurationBuilder WithIsSourceBranchFor(params string[]? values) + public virtual BranchConfigurationBuilder WithIsSourceBranchFor(params string[] values) { - this.isSourceBranchFor = values == null ? null : new HashSet(values); + this.isSourceBranchFor = new HashSet(values); return this; } @@ -137,7 +130,6 @@ public virtual BranchConfigurationBuilder WithPreReleaseWeight(int? value) public virtual BranchConfigurationBuilder WithConfiguration(BranchConfiguration value) { - WithName(value.Name); WithVersioningMode(value.VersioningMode); WithLabel(value.Label); WithIncrement(value.Increment); @@ -156,27 +148,22 @@ public virtual BranchConfigurationBuilder WithConfiguration(BranchConfiguration return this; } - public BranchConfiguration Build() - { - var result = new BranchConfiguration() - { - Name = name, - VersioningMode = versioningMode, - Label = label, - Increment = increment, - Regex = regex, - TracksReleaseBranches = tracksReleaseBranches, - TrackMergeTarget = trackMergeTarget, - TrackMergeMessage = trackMergeMessage, - CommitMessageIncrementing = commitMessageIncrementing, - IsMainline = isMainline, - IsReleaseBranch = isReleaseBranch, - LabelNumberPattern = labelNumberPattern, - PreventIncrementOfMergedBranchVersion = preventIncrementOfMergedBranchVersion, - PreReleaseWeight = preReleaseWeight, - SourceBranches = sourceBranches, - IsSourceBranchFor = isSourceBranchFor - }; - return result; - } + public BranchConfiguration Build() => new() + { + VersioningMode = versioningMode, + Label = label, + Increment = increment, + Regex = regex, + TracksReleaseBranches = tracksReleaseBranches, + TrackMergeTarget = trackMergeTarget, + TrackMergeMessage = trackMergeMessage, + CommitMessageIncrementing = commitMessageIncrementing, + IsMainline = isMainline, + IsReleaseBranch = isReleaseBranch, + LabelNumberPattern = labelNumberPattern, + PreventIncrementOfMergedBranchVersion = preventIncrementOfMergedBranchVersion, + PreReleaseWeight = preReleaseWeight, + SourceBranches = sourceBranches, + IsSourceBranchFor = isSourceBranchFor + }; } diff --git a/src/GitVersion.Core/Configuration/ConfigurationBuilderBase.cs b/src/GitVersion.Core/Configuration/ConfigurationBuilderBase.cs index 28177a0913..49980c4528 100644 --- a/src/GitVersion.Core/Configuration/ConfigurationBuilderBase.cs +++ b/src/GitVersion.Core/Configuration/ConfigurationBuilderBase.cs @@ -22,7 +22,7 @@ internal abstract class ConfigurationBuilderBase : IConfi private string? commitDateFormat; private bool updateBuildNumber; private SemanticVersionFormat semanticVersionFormat; - private Dictionary? mergeMessageFormats; + private Dictionary mergeMessageFormats = new(); private readonly List> overrides = new(); private readonly Dictionary branchConfigurationBuilders = new(); private VersioningMode? versioningMode; @@ -34,8 +34,6 @@ internal abstract class ConfigurationBuilderBase : IConfi private bool? trackMergeMessage; private CommitMessageIncrementMode? commitMessageIncrementing; private string? regex; - private HashSet? sourceBranches; - private HashSet? isSourceBranchFor; private bool? tracksReleaseBranches; private bool? isReleaseBranch; private bool? isMainline; @@ -195,7 +193,7 @@ public virtual TConfigurationBuilder WithSemanticVersionFormat(SemanticVersionFo public virtual TConfigurationBuilder WithMergeMessageFormats(Dictionary value) { - this.mergeMessageFormats = value; + this.mergeMessageFormats = new(value); return (TConfigurationBuilder)this; } @@ -206,16 +204,11 @@ public virtual TConfigurationBuilder WithoutBranches() } public virtual BranchConfigurationBuilder WithBranch(string value) - { - var result = this.branchConfigurationBuilders.GetOrAdd(value, () => BranchConfigurationBuilder.New); - result.WithName(value); - return result; - } + => this.branchConfigurationBuilders.GetOrAdd(value, () => BranchConfigurationBuilder.New); public virtual TConfigurationBuilder WithBranch(string value, Action action) { var result = this.branchConfigurationBuilders.GetOrAdd(value, () => BranchConfigurationBuilder.New); - result.WithName(value); action(result); return (TConfigurationBuilder)this; } @@ -274,30 +267,6 @@ public virtual TConfigurationBuilder WithRegex(string? value) return (TConfigurationBuilder)this; } - public virtual TConfigurationBuilder WithSourceBranches(IEnumerable? values) - { - WithSourceBranches(values?.ToArray()); - return (TConfigurationBuilder)this; - } - - public virtual TConfigurationBuilder WithSourceBranches(params string[]? values) - { - this.sourceBranches = values == null ? null : new HashSet(values); - return (TConfigurationBuilder)this; - } - - public virtual TConfigurationBuilder WithIsSourceBranchFor(IEnumerable? values) - { - WithIsSourceBranchFor(values?.ToArray()); - return (TConfigurationBuilder)this; - } - - public virtual TConfigurationBuilder WithIsSourceBranchFor(params string[]? values) - { - this.isSourceBranchFor = values == null ? null : new HashSet(values); - return (TConfigurationBuilder)this; - } - public virtual TConfigurationBuilder WithTracksReleaseBranches(bool? value) { this.tracksReleaseBranches = value; @@ -358,8 +327,6 @@ public virtual TConfigurationBuilder WithConfiguration(GitVersionConfiguration v WithIsReleaseBranch(value.IsReleaseBranch); WithIsMainline(value.IsMainline); WithPreReleaseWeight(value.PreReleaseWeight); - WithSourceBranches(value.SourceBranches); - WithIsSourceBranchFor(value.IsSourceBranchFor); return (TConfigurationBuilder)this; } @@ -373,6 +340,12 @@ public void AddOverride(IReadOnlyDictionary value) public virtual GitVersionConfiguration Build() { + Dictionary branches = new(); + foreach (var (name, branchConfigurationBuilder) in this.branchConfigurationBuilders) + { + branches.Add(name, branchConfigurationBuilder.Build()); + } + GitVersionConfiguration configuration = new() { AssemblyVersioningScheme = this.assemblyVersioningScheme, @@ -391,7 +364,8 @@ public virtual GitVersionConfiguration Build() CommitDateFormat = this.commitDateFormat, UpdateBuildNumber = this.updateBuildNumber, SemanticVersionFormat = this.semanticVersionFormat, - MergeMessageFormats = this.mergeMessageFormats ?? new(), + Branches = branches, + MergeMessageFormats = this.mergeMessageFormats, VersioningMode = this.versioningMode, Label = this.label, Increment = this.increment, @@ -404,18 +378,9 @@ public virtual GitVersionConfiguration Build() IsReleaseBranch = this.isReleaseBranch, LabelNumberPattern = this.labelNumberPattern, PreventIncrementOfMergedBranchVersion = this.preventIncrementOfMergedBranchVersion, - PreReleaseWeight = this.preReleaseWeight, - SourceBranches = this.sourceBranches, - IsSourceBranchFor = this.isSourceBranchFor + PreReleaseWeight = this.preReleaseWeight }; - Dictionary branches = new(); - foreach (var (name, branchConfigurationBuilder) in this.branchConfigurationBuilders) - { - branches.Add(name, branchConfigurationBuilder.Build()); - } - configuration.Branches = branches; - if (this.overrides.Any()) { ConfigurationHelper configurationHelper = new(configuration); @@ -440,17 +405,15 @@ private static void FinalizeConfiguration(GitVersionConfiguration configuration) } } - private static void FinalizeBranchConfiguration(GitVersionConfiguration configuration, string name, BranchConfiguration branchConfiguration) + private static void FinalizeBranchConfiguration(GitVersionConfiguration configuration, string branchName, + BranchConfiguration branchConfiguration) { - branchConfiguration.Name = name; - if (branchConfiguration.IsSourceBranchFor == null) - return; + var branches = new Dictionary(configuration.Branches); foreach (var targetBranchName in branchConfiguration.IsSourceBranchFor) { - var targetBranchConfig = configuration.Branches[targetBranchName]; - targetBranchConfig.SourceBranches ??= new HashSet(); - targetBranchConfig.SourceBranches.Add(name); + var targetBranchConfiguration = branches[targetBranchName]; + targetBranchConfiguration.SourceBranches.Add(branchName); } } diff --git a/src/GitVersion.Core/Configuration/ConfigurationExtensions.cs b/src/GitVersion.Core/Configuration/ConfigurationExtensions.cs index dbabd6ecf2..2be53561a1 100644 --- a/src/GitVersion.Core/Configuration/ConfigurationExtensions.cs +++ b/src/GitVersion.Core/Configuration/ConfigurationExtensions.cs @@ -23,7 +23,6 @@ public static BranchConfiguration GetBranchConfiguration(this GitVersionConfigur var branchConfiguration = GetBranchConfigurations(configuration, branchName.WithoutOrigin).FirstOrDefault(); branchConfiguration ??= new() { - Name = branchName.WithoutOrigin, Regex = string.Empty, Label = ConfigurationConstants.BranchNamePlaceholder, Increment = IncrementStrategy.Inherit @@ -34,17 +33,17 @@ public static BranchConfiguration GetBranchConfiguration(this GitVersionConfigur private static IEnumerable GetBranchConfigurations(GitVersionConfiguration configuration, string branchName) { BranchConfiguration? unknownBranchConfiguration = null; - foreach (var item in configuration.Branches.Values.Where(branch => branch.Regex != null)) + foreach ((string key, BranchConfiguration branchConfiguration) in configuration.Branches) { - if (item.Regex != null && Regex.IsMatch(branchName, item.Regex, RegexOptions.IgnoreCase)) + if (((IBranchConfiguration)branchConfiguration).IsMatch(branchName)) { - if (item.Name == "unknown") + if (key == "unknown") { - unknownBranchConfiguration = item; + unknownBranchConfiguration = branchConfiguration; } else { - yield return item; + yield return branchConfiguration; } } } @@ -52,11 +51,7 @@ private static IEnumerable GetBranchConfigurations(GitVersi if (unknownBranchConfiguration != null) yield return unknownBranchConfiguration; } - public static BranchConfiguration GetFallbackBranchConfiguration(this GitVersionConfiguration configuration) - { - BranchConfiguration result = new(configuration); - return result; - } + public static BranchConfiguration GetFallbackBranchConfiguration(this GitVersionConfiguration configuration) => configuration; public static bool IsReleaseBranch(this GitVersionConfiguration configuration, IBranch branch) => IsReleaseBranch(configuration, branch.NotNull().Name); @@ -64,7 +59,8 @@ public static bool IsReleaseBranch(this GitVersionConfiguration configuration, I public static bool IsReleaseBranch(this GitVersionConfiguration configuration, ReferenceName branchName) => configuration.GetBranchConfiguration(branchName).IsReleaseBranch ?? false; - public static string GetBranchSpecificTag(this EffectiveConfiguration configuration, ILog log, string? branchFriendlyName, string? branchNameOverride) + public static string GetBranchSpecificTag(this EffectiveConfiguration configuration, ILog log, string? branchFriendlyName, + string? branchNameOverride) { var tagToUse = configuration.Label; if (tagToUse == "useBranchName") diff --git a/src/GitVersion.Core/Configuration/ConfigurationProvider.cs b/src/GitVersion.Core/Configuration/ConfigurationProvider.cs index 030d5c1a8b..20dbe044ad 100644 --- a/src/GitVersion.Core/Configuration/ConfigurationProvider.cs +++ b/src/GitVersion.Core/Configuration/ConfigurationProvider.cs @@ -84,8 +84,9 @@ private GitVersionConfiguration ProvideConfiguration(string? configFile, } catch (YamlException exception) { + var baseException = exception.GetBaseException(); throw new WarningException( - $"Could not build the configuration instance because following exception occurred: '{exception.Message}' " + + $"Could not build the configuration instance because following exception occurred: '{baseException.Message}' " + "Please ensure that the /overrideconfig parameters are correct and the configuration file is in the correct format." ); } diff --git a/src/GitVersion.Core/Configuration/EffectiveConfiguration.cs b/src/GitVersion.Core/Configuration/EffectiveConfiguration.cs index 48ac103a68..b1678dbb1c 100644 --- a/src/GitVersion.Core/Configuration/EffectiveConfiguration.cs +++ b/src/GitVersion.Core/Configuration/EffectiveConfiguration.cs @@ -17,10 +17,8 @@ public EffectiveConfiguration(GitVersionConfiguration configuration, BranchConfi var fallbackBranchConfiguration = configuration.GetFallbackBranchConfiguration(); branchConfiguration = branchConfiguration.Inherit(fallbackBranchConfiguration); - var name = branchConfiguration.Name; - if (!branchConfiguration.VersioningMode.HasValue) - throw new Exception($"Configuration value for 'Versioning mode' for branch {name} has no value. (this should not happen, please report an issue)"); + throw new Exception("Configuration value for 'Versioning mode' has no value. (this should not happen, please report an issue)"); if (!configuration.AssemblyVersioningScheme.HasValue) throw new Exception("Configuration value for 'AssemblyVersioningScheme' has no value. (this should not happen, please report an issue)"); diff --git a/src/GitVersion.Core/Configuration/GitVersionConfiguration.cs b/src/GitVersion.Core/Configuration/GitVersionConfiguration.cs index cec6af1b89..8e81670143 100644 --- a/src/GitVersion.Core/Configuration/GitVersionConfiguration.cs +++ b/src/GitVersion.Core/Configuration/GitVersionConfiguration.cs @@ -4,103 +4,107 @@ namespace GitVersion.Configuration; -public class GitVersionConfiguration : BranchConfiguration +public sealed record GitVersionConfiguration : BranchConfiguration, IGitVersionConfiguration { - private string? nextVersion; - - public GitVersionConfiguration() - { - Branches = new Dictionary(); - Ignore = new IgnoreConfiguration(); - } - [JsonPropertyName("workflow")] [JsonPropertyDescription("The base template of the configuration to use. Possible values are: GitFlow/v1 or GitHubFlow/v1")] - public string? Workflow { get; set; } + public string? Workflow { get; internal set; } [JsonPropertyName("assembly-versioning-scheme")] [JsonPropertyDescription("The scheme to use when setting AssemblyVersion attribute. Can be 'MajorMinorPatchTag', 'MajorMinorPatch', 'MajorMinor', 'Major', 'None'.")] - public AssemblyVersioningScheme? AssemblyVersioningScheme { get; set; } + public AssemblyVersioningScheme? AssemblyVersioningScheme { get; internal set; } [JsonPropertyName("assembly-file-versioning-scheme")] [JsonPropertyDescription("The scheme to use when setting AssemblyFileVersion attribute. Can be 'MajorMinorPatchTag', 'MajorMinorPatch', 'MajorMinor', 'Major', 'None'.")] - public AssemblyFileVersioningScheme? AssemblyFileVersioningScheme { get; set; } + public AssemblyFileVersioningScheme? AssemblyFileVersioningScheme { get; internal set; } [JsonPropertyName("assembly-informational-format")] [JsonPropertyDescription("Specifies the format of AssemblyInformationalVersion. The default value is {InformationalVersion}.")] - public string? AssemblyInformationalFormat { get; set; } + public string? AssemblyInformationalFormat { get; internal set; } [JsonPropertyName("assembly-versioning-format")] [JsonPropertyDescription("Specifies the format of AssemblyVersion and overwrites the value of assembly-versioning-scheme.")] - public string? AssemblyVersioningFormat { get; set; } + public string? AssemblyVersioningFormat { get; internal set; } [JsonPropertyName("assembly-file-versioning-format")] [JsonPropertyDescription("Specifies the format of AssemblyFileVersion and overwrites the value of assembly-file-versioning-scheme.")] - public string? AssemblyFileVersioningFormat { get; set; } + public string? AssemblyFileVersioningFormat { get; internal set; } [JsonPropertyName("label-prefix")] - [JsonPropertyDescription($"A regex which is used to trim Git tags before processing. Defaults to {ConfigurationConstants.DefaultLabelPrefix}")] - public string? LabelPrefix { get; set; } + [JsonPropertyDescription($"A regular expression which is used to trim Git tags before processing. Defaults to {ConfigurationConstants.DefaultLabelPrefix}")] + public string? LabelPrefix { get; internal set; } [JsonPropertyName("next-version")] [JsonPropertyDescription("Allows you to bump the next version explicitly. Useful for bumping main or a feature branch with breaking changes")] public string? NextVersion { get => nextVersion; - set => + internal set => nextVersion = int.TryParse(value, NumberStyles.Any, NumberFormatInfo.InvariantInfo, out var major) ? $"{major}.0" : value; } + private string? nextVersion; [JsonPropertyName("major-version-bump-message")] - [JsonPropertyDescription(@"The regex to match commit messages with to perform a major version increment. Default set to '\+semver:\s?(breaking|major)'")] + [JsonPropertyDescription(@"The regular expression to match commit messages with to perform a major version increment. Default set to '\+semver:\s?(breaking|major)'")] [JsonPropertyPattern(@"'\+semver:\s?(breaking|major)'")] - public string? MajorVersionBumpMessage { get; set; } + public string? MajorVersionBumpMessage { get; internal set; } [JsonPropertyName("minor-version-bump-message")] - [JsonPropertyDescription(@"The regex to match commit messages with to perform a minor version increment. Default set to '\+semver:\s?(feature|minor)'")] + [JsonPropertyDescription(@"The regular expression to match commit messages with to perform a minor version increment. Default set to '\+semver:\s?(feature|minor)'")] [JsonPropertyPattern(@"'\+semver:\s?(feature|minor)'")] - public string? MinorVersionBumpMessage { get; set; } + public string? MinorVersionBumpMessage { get; internal set; } [JsonPropertyName("patch-version-bump-message")] - [JsonPropertyDescription(@"The regex to match commit messages with to perform a patch version increment. Default set to '\+semver:\s?(fix|patch)'")] + [JsonPropertyDescription(@"The regular expression to match commit messages with to perform a patch version increment. Default set to '\+semver:\s?(fix|patch)'")] [JsonPropertyPattern(@"'\+semver:\s?(fix|patch)'")] - public string? PatchVersionBumpMessage { get; set; } + public string? PatchVersionBumpMessage { get; internal set; } [JsonPropertyName("no-bump-message")] [JsonPropertyDescription(@"Used to tell GitVersion not to increment when in Mainline development mode. . Default set to '\+semver:\s?(none|skip)'")] [JsonPropertyPattern(@"'\+semver:\s?(none|skip)'")] - public string? NoBumpMessage { get; set; } + public string? NoBumpMessage { get; internal set; } [JsonPropertyName("label-pre-release-weight")] [JsonPropertyDescription("The pre-release weight in case of tagged commits. Defaults to 60000.")] - public int? LabelPreReleaseWeight { get; set; } + public int? LabelPreReleaseWeight { get; internal set; } [JsonPropertyName("commit-date-format")] [JsonPropertyDescription("The format to use when calculating the commit date. Defaults to 'yyyy-MM-dd'.")] [JsonPropertyPattern("'yyyy-MM-dd'", PatternFormat.DateTime)] - public string? CommitDateFormat { get; set; } + public string? CommitDateFormat { get; internal set; } [JsonPropertyName("merge-message-formats")] [JsonPropertyDescription("Custom merge message formats to enable identification of merge messages that do not follow the built-in conventions.")] - public Dictionary MergeMessageFormats { get; set; } = new(); + public Dictionary MergeMessageFormats { get; internal set; } = new(); + + [JsonIgnore] + IReadOnlyDictionary IGitVersionConfiguration.MergeMessageFormats => MergeMessageFormats; [JsonPropertyName("update-build-number")] [JsonPropertyDescription("Whether to update the build number in the project file. Defaults to true.")] - public bool UpdateBuildNumber { get; set; } = true; + public bool UpdateBuildNumber { get; internal set; } = true; [JsonPropertyName("semantic-version-format")] [JsonPropertyDescription("Specifies the semantic version format that is used when parsing the string. Can be 'Strict' or 'Loose'.")] - public SemanticVersionFormat SemanticVersionFormat { get; set; } + public SemanticVersionFormat SemanticVersionFormat { get; internal set; } + + [JsonIgnore] + IReadOnlyDictionary IGitVersionConfiguration.Branches => Branches; [JsonPropertyName("branches")] [JsonPropertyDescription("The header for all the individual branch configuration.")] - public Dictionary Branches { get; set; } + public Dictionary Branches { get; internal set; } = new(); + + [JsonIgnore] + IIgnoreConfiguration IGitVersionConfiguration.Ignore => Ignore; [JsonPropertyName("ignore")] [JsonPropertyDescription("The header property for the ignore configuration.")] - public IgnoreConfiguration Ignore { get; set; } + public IgnoreConfiguration Ignore { get; internal set; } = new(); + + public override BranchConfiguration Inherit(BranchConfiguration configuration) => throw new NotSupportedException(); public override string ToString() { diff --git a/src/GitVersion.Core/Configuration/IBranchConfiguration.cs b/src/GitVersion.Core/Configuration/IBranchConfiguration.cs new file mode 100644 index 0000000000..acab9e3770 --- /dev/null +++ b/src/GitVersion.Core/Configuration/IBranchConfiguration.cs @@ -0,0 +1,42 @@ +using System.Text.RegularExpressions; +using GitVersion.VersionCalculation; + +namespace GitVersion.Configuration; + +public interface IBranchConfiguration +{ + VersioningMode? VersioningMode { get; } + + string? Label { get; } + + IncrementStrategy Increment { get; } + + bool? PreventIncrementOfMergedBranchVersion { get; } + + string? LabelNumberPattern { get; } + + bool? TrackMergeTarget { get; } + + bool? TrackMergeMessage { get; } + + CommitMessageIncrementMode? CommitMessageIncrementing { get; } + + public string? RegularExpression { get; } + + public bool IsMatch(string branchName) + => RegularExpression != null && Regex.IsMatch(branchName, RegularExpression, RegexOptions.IgnoreCase); + + bool? TracksReleaseBranches { get; } + + bool? IsReleaseBranch { get; } + + bool? IsMainline { get; } + + int? PreReleaseWeight { get; } + + IReadOnlyCollection SourceBranches { get; } + + IReadOnlyCollection IsSourceBranchFor { get; } + + BranchConfiguration Inherit(BranchConfiguration configuration); +} diff --git a/src/GitVersion.Core/Configuration/IGitVersionConfiguration.cs b/src/GitVersion.Core/Configuration/IGitVersionConfiguration.cs new file mode 100644 index 0000000000..589f2b1436 --- /dev/null +++ b/src/GitVersion.Core/Configuration/IGitVersionConfiguration.cs @@ -0,0 +1,44 @@ +using GitVersion.Extensions; + +namespace GitVersion.Configuration; + +public interface IGitVersionConfiguration : IBranchConfiguration +{ + string? Workflow { get; } + + AssemblyVersioningScheme? AssemblyVersioningScheme { get; } + + AssemblyFileVersioningScheme? AssemblyFileVersioningScheme { get; } + + string? AssemblyInformationalFormat { get; } + + string? AssemblyVersioningFormat { get; } + + string? AssemblyFileVersioningFormat { get; } + + string? LabelPrefix { get; } + + string? NextVersion { get; } + + string? MajorVersionBumpMessage { get; } + + string? MinorVersionBumpMessage { get; } + + string? PatchVersionBumpMessage { get; } + + string? NoBumpMessage { get; } + + int? LabelPreReleaseWeight { get; } + + string? CommitDateFormat { get; } + + IReadOnlyDictionary MergeMessageFormats { get; } + + bool UpdateBuildNumber { get; } + + SemanticVersionFormat SemanticVersionFormat { get; } + + IReadOnlyDictionary Branches { get; } + + IIgnoreConfiguration Ignore { get; } +} diff --git a/src/GitVersion.Core/Configuration/IIgnoreConfiguration.cs b/src/GitVersion.Core/Configuration/IIgnoreConfiguration.cs new file mode 100644 index 0000000000..bbb7d17bc2 --- /dev/null +++ b/src/GitVersion.Core/Configuration/IIgnoreConfiguration.cs @@ -0,0 +1,9 @@ +namespace GitVersion.Configuration +{ + public interface IIgnoreConfiguration + { + DateTimeOffset? Before { get; } + + IReadOnlyList Shas { get; } + } +} diff --git a/src/GitVersion.Core/Configuration/IgnoreConfiguration.cs b/src/GitVersion.Core/Configuration/IgnoreConfiguration.cs index 228039ad4a..a20f9da218 100644 --- a/src/GitVersion.Core/Configuration/IgnoreConfiguration.cs +++ b/src/GitVersion.Core/Configuration/IgnoreConfiguration.cs @@ -3,18 +3,19 @@ namespace GitVersion.Configuration; -public class IgnoreConfiguration +public record IgnoreConfiguration : IIgnoreConfiguration { - public IgnoreConfiguration() => Shas = Array.Empty(); - [JsonPropertyName("commits-before")] [JsonPropertyDescription("Commits before this date will be ignored. Format: yyyy-MM-ddTHH:mm:ss.")] [JsonPropertyPattern("'yyyy-MM-ddTHH:mm:ss'", PatternFormat.DateTime)] - public DateTimeOffset? Before { get; set; } + public DateTimeOffset? Before { get; init; } + + [JsonIgnore] + IReadOnlyList IIgnoreConfiguration.Shas => Shas; [JsonPropertyName("sha")] [JsonPropertyDescription("A sequence of SHAs to be excluded from the version calculations.")] - public string[] Shas { get; set; } + public List Shas { get; init; } = new(); [JsonIgnore] public virtual bool IsEmpty => Before == null && !Shas.Any(); diff --git a/src/GitVersion.Core/Configuration/Init/SetConfig/ConfigureBranches.cs b/src/GitVersion.Core/Configuration/Init/SetConfig/ConfigureBranches.cs index 592edc3ccf..442ff98754 100644 --- a/src/GitVersion.Core/Configuration/Init/SetConfig/ConfigureBranches.cs +++ b/src/GitVersion.Core/Configuration/Init/SetConfig/ConfigureBranches.cs @@ -25,7 +25,7 @@ protected override StepResult HandleResult(string? result, Queue().WithData(foundBranch.Key, branchConfiguration)); diff --git a/src/GitVersion.Core/Core/RepositoryStore.cs b/src/GitVersion.Core/Core/RepositoryStore.cs index 867d9d8071..951f23813b 100644 --- a/src/GitVersion.Core/Core/RepositoryStore.cs +++ b/src/GitVersion.Core/Core/RepositoryStore.cs @@ -104,8 +104,9 @@ public IBranch GetTargetBranch(string? targetBranchName) public IBranch? FindMainBranch(GitVersionConfiguration configuration) { + var branches = configuration.Branches; var mainBranchRegex = configuration.Branches[ConfigurationConstants.MainBranchKey].Regex - ?? configuration.Branches[ConfigurationConstants.MasterBranchKey].Regex; + ?? branches[ConfigurationConstants.MasterBranchKey].Regex; if (mainBranchRegex == null) { diff --git a/src/GitVersion.Core/Core/SourceBranchFinder.cs b/src/GitVersion.Core/Core/SourceBranchFinder.cs index 7073299851..3d58c86f39 100644 --- a/src/GitVersion.Core/Core/SourceBranchFinder.cs +++ b/src/GitVersion.Core/Core/SourceBranchFinder.cs @@ -51,9 +51,10 @@ private static IEnumerable GetSourceBranchRegexes(INamedReference branch } else { + var branches = configuration.Branches; foreach (var sourceBranch in currentBranchConfig.SourceBranches) { - var regex = configuration.Branches[sourceBranch].Regex; + var regex = branches[sourceBranch].Regex; if (regex != null) yield return regex; } diff --git a/src/GitVersion.Core/PublicAPI.Unshipped.txt b/src/GitVersion.Core/PublicAPI.Unshipped.txt index 38ea0ad608..f8e7fcb43d 100644 --- a/src/GitVersion.Core/PublicAPI.Unshipped.txt +++ b/src/GitVersion.Core/PublicAPI.Unshipped.txt @@ -1,4 +1,5 @@ #nullable enable +abstract GitVersion.Configuration.Init.Wizard.ConfigInitWizardStep.HandleResult(string? result, System.Collections.Generic.Queue! steps, GitVersion.Configuration.GitVersionConfiguration! configuration, string! workingDirectory) -> GitVersion.Configuration.Init.StepResult! GitVersion.Agents.BuildAgentBase GitVersion.Agents.BuildAgentBase.BuildAgentBase(GitVersion.IEnvironment! environment, GitVersion.Logging.ILog! log) -> void GitVersion.Agents.BuildAgentBase.Environment.get -> GitVersion.IEnvironment! @@ -93,41 +94,21 @@ GitVersion.Common.IRepositoryStore.GetTargetBranch(string? targetBranchName) -> GitVersion.Common.IRepositoryStore.GetVersionTagsOnBranch(GitVersion.IBranch! branch, string? tagPrefixRegex, GitVersion.SemanticVersionFormat versionFormat) -> System.Collections.Generic.IEnumerable! GitVersion.Common.IRepositoryStore.IsCommitOnBranch(GitVersion.ICommit? baseVersionSource, GitVersion.IBranch! branch, GitVersion.ICommit! firstMatchingCommit) -> bool GitVersion.Configuration.BranchConfiguration -GitVersion.Configuration.BranchConfiguration.BranchConfiguration() -> void -GitVersion.Configuration.BranchConfiguration.BranchConfiguration(GitVersion.Configuration.BranchConfiguration! branchConfiguration) -> void GitVersion.Configuration.BranchConfiguration.CommitMessageIncrementing.get -> GitVersion.VersionCalculation.CommitMessageIncrementMode? -GitVersion.Configuration.BranchConfiguration.CommitMessageIncrementing.set -> void GitVersion.Configuration.BranchConfiguration.Increment.get -> GitVersion.IncrementStrategy -GitVersion.Configuration.BranchConfiguration.Increment.set -> void -GitVersion.Configuration.BranchConfiguration.Inherit(GitVersion.Configuration.BranchConfiguration? parentConfig) -> GitVersion.Configuration.BranchConfiguration! GitVersion.Configuration.BranchConfiguration.IsMainline.get -> bool? -GitVersion.Configuration.BranchConfiguration.IsMainline.set -> void GitVersion.Configuration.BranchConfiguration.IsReleaseBranch.get -> bool? -GitVersion.Configuration.BranchConfiguration.IsReleaseBranch.set -> void -GitVersion.Configuration.BranchConfiguration.IsSourceBranchFor.get -> System.Collections.Generic.HashSet? -GitVersion.Configuration.BranchConfiguration.IsSourceBranchFor.set -> void +GitVersion.Configuration.BranchConfiguration.IsSourceBranchFor.get -> System.Collections.Generic.HashSet! GitVersion.Configuration.BranchConfiguration.Label.get -> string? -GitVersion.Configuration.BranchConfiguration.Label.set -> void GitVersion.Configuration.BranchConfiguration.LabelNumberPattern.get -> string? -GitVersion.Configuration.BranchConfiguration.LabelNumberPattern.set -> void -GitVersion.Configuration.BranchConfiguration.Name.get -> string! -GitVersion.Configuration.BranchConfiguration.Name.set -> void GitVersion.Configuration.BranchConfiguration.PreReleaseWeight.get -> int? -GitVersion.Configuration.BranchConfiguration.PreReleaseWeight.set -> void GitVersion.Configuration.BranchConfiguration.PreventIncrementOfMergedBranchVersion.get -> bool? -GitVersion.Configuration.BranchConfiguration.PreventIncrementOfMergedBranchVersion.set -> void GitVersion.Configuration.BranchConfiguration.Regex.get -> string? -GitVersion.Configuration.BranchConfiguration.Regex.set -> void -GitVersion.Configuration.BranchConfiguration.SourceBranches.get -> System.Collections.Generic.HashSet? -GitVersion.Configuration.BranchConfiguration.SourceBranches.set -> void +GitVersion.Configuration.BranchConfiguration.SourceBranches.get -> System.Collections.Generic.HashSet! GitVersion.Configuration.BranchConfiguration.TrackMergeMessage.get -> bool? -GitVersion.Configuration.BranchConfiguration.TrackMergeMessage.set -> void GitVersion.Configuration.BranchConfiguration.TrackMergeTarget.get -> bool? -GitVersion.Configuration.BranchConfiguration.TrackMergeTarget.set -> void GitVersion.Configuration.BranchConfiguration.TracksReleaseBranches.get -> bool? -GitVersion.Configuration.BranchConfiguration.TracksReleaseBranches.set -> void GitVersion.Configuration.BranchConfiguration.VersioningMode.get -> GitVersion.VersionCalculation.VersioningMode? -GitVersion.Configuration.BranchConfiguration.VersioningMode.set -> void GitVersion.Configuration.BranchConfigurationBuilder GitVersion.Configuration.BranchConfigurationBuilder.Build() -> GitVersion.Configuration.BranchConfiguration! GitVersion.Configuration.ConfigurationConstants @@ -191,44 +172,42 @@ GitVersion.Configuration.EffectiveConfiguration.VersionFilters.get -> System.Col GitVersion.Configuration.EffectiveConfiguration.VersioningMode.get -> GitVersion.VersionCalculation.VersioningMode GitVersion.Configuration.GitVersionConfiguration GitVersion.Configuration.GitVersionConfiguration.AssemblyFileVersioningFormat.get -> string? -GitVersion.Configuration.GitVersionConfiguration.AssemblyFileVersioningFormat.set -> void GitVersion.Configuration.GitVersionConfiguration.AssemblyFileVersioningScheme.get -> GitVersion.Extensions.AssemblyFileVersioningScheme? -GitVersion.Configuration.GitVersionConfiguration.AssemblyFileVersioningScheme.set -> void GitVersion.Configuration.GitVersionConfiguration.AssemblyInformationalFormat.get -> string? -GitVersion.Configuration.GitVersionConfiguration.AssemblyInformationalFormat.set -> void GitVersion.Configuration.GitVersionConfiguration.AssemblyVersioningFormat.get -> string? -GitVersion.Configuration.GitVersionConfiguration.AssemblyVersioningFormat.set -> void GitVersion.Configuration.GitVersionConfiguration.AssemblyVersioningScheme.get -> GitVersion.Extensions.AssemblyVersioningScheme? -GitVersion.Configuration.GitVersionConfiguration.AssemblyVersioningScheme.set -> void GitVersion.Configuration.GitVersionConfiguration.Branches.get -> System.Collections.Generic.Dictionary! -GitVersion.Configuration.GitVersionConfiguration.Branches.set -> void GitVersion.Configuration.GitVersionConfiguration.CommitDateFormat.get -> string? -GitVersion.Configuration.GitVersionConfiguration.CommitDateFormat.set -> void -GitVersion.Configuration.GitVersionConfiguration.GitVersionConfiguration() -> void GitVersion.Configuration.GitVersionConfiguration.Ignore.get -> GitVersion.Configuration.IgnoreConfiguration! -GitVersion.Configuration.GitVersionConfiguration.Ignore.set -> void GitVersion.Configuration.GitVersionConfiguration.LabelPreReleaseWeight.get -> int? -GitVersion.Configuration.GitVersionConfiguration.LabelPreReleaseWeight.set -> void GitVersion.Configuration.GitVersionConfiguration.LabelPrefix.get -> string? -GitVersion.Configuration.GitVersionConfiguration.LabelPrefix.set -> void GitVersion.Configuration.GitVersionConfiguration.MajorVersionBumpMessage.get -> string? -GitVersion.Configuration.GitVersionConfiguration.MajorVersionBumpMessage.set -> void GitVersion.Configuration.GitVersionConfiguration.MergeMessageFormats.get -> System.Collections.Generic.Dictionary! -GitVersion.Configuration.GitVersionConfiguration.MergeMessageFormats.set -> void GitVersion.Configuration.GitVersionConfiguration.MinorVersionBumpMessage.get -> string? -GitVersion.Configuration.GitVersionConfiguration.MinorVersionBumpMessage.set -> void GitVersion.Configuration.GitVersionConfiguration.NextVersion.get -> string? -GitVersion.Configuration.GitVersionConfiguration.NextVersion.set -> void GitVersion.Configuration.GitVersionConfiguration.NoBumpMessage.get -> string? -GitVersion.Configuration.GitVersionConfiguration.NoBumpMessage.set -> void GitVersion.Configuration.GitVersionConfiguration.PatchVersionBumpMessage.get -> string? -GitVersion.Configuration.GitVersionConfiguration.PatchVersionBumpMessage.set -> void GitVersion.Configuration.GitVersionConfiguration.SemanticVersionFormat.get -> GitVersion.SemanticVersionFormat -GitVersion.Configuration.GitVersionConfiguration.SemanticVersionFormat.set -> void GitVersion.Configuration.GitVersionConfiguration.UpdateBuildNumber.get -> bool -GitVersion.Configuration.GitVersionConfiguration.UpdateBuildNumber.set -> void GitVersion.Configuration.GitVersionConfiguration.Workflow.get -> string? -GitVersion.Configuration.GitVersionConfiguration.Workflow.set -> void +GitVersion.Configuration.IBranchConfiguration +GitVersion.Configuration.IBranchConfiguration.CommitMessageIncrementing.get -> GitVersion.VersionCalculation.CommitMessageIncrementMode? +GitVersion.Configuration.IBranchConfiguration.Increment.get -> GitVersion.IncrementStrategy +GitVersion.Configuration.IBranchConfiguration.Inherit(GitVersion.Configuration.BranchConfiguration! configuration) -> GitVersion.Configuration.BranchConfiguration! +GitVersion.Configuration.IBranchConfiguration.IsMainline.get -> bool? +GitVersion.Configuration.IBranchConfiguration.IsMatch(string! branchName) -> bool +GitVersion.Configuration.IBranchConfiguration.IsReleaseBranch.get -> bool? +GitVersion.Configuration.IBranchConfiguration.IsSourceBranchFor.get -> System.Collections.Generic.IReadOnlyCollection! +GitVersion.Configuration.IBranchConfiguration.Label.get -> string? +GitVersion.Configuration.IBranchConfiguration.LabelNumberPattern.get -> string? +GitVersion.Configuration.IBranchConfiguration.PreReleaseWeight.get -> int? +GitVersion.Configuration.IBranchConfiguration.PreventIncrementOfMergedBranchVersion.get -> bool? +GitVersion.Configuration.IBranchConfiguration.RegularExpression.get -> string? +GitVersion.Configuration.IBranchConfiguration.SourceBranches.get -> System.Collections.Generic.IReadOnlyCollection! +GitVersion.Configuration.IBranchConfiguration.TrackMergeMessage.get -> bool? +GitVersion.Configuration.IBranchConfiguration.TrackMergeTarget.get -> bool? +GitVersion.Configuration.IBranchConfiguration.TracksReleaseBranches.get -> bool? +GitVersion.Configuration.IBranchConfiguration.VersioningMode.get -> GitVersion.VersionCalculation.VersioningMode? GitVersion.Configuration.IConfigurationFileLocator GitVersion.Configuration.IConfigurationFileLocator.ReadConfiguration(string? configFilePath) -> GitVersion.Configuration.GitVersionConfiguration! GitVersion.Configuration.IConfigurationFileLocator.ReadOverrideConfiguration(string? configFilePath) -> System.Collections.Generic.IReadOnlyDictionary? @@ -237,12 +216,34 @@ GitVersion.Configuration.IConfigurationFileLocator.Verify(string? workingDirecto GitVersion.Configuration.IConfigurationProvider GitVersion.Configuration.IConfigurationProvider.Init(string! workingDirectory) -> void GitVersion.Configuration.IConfigurationProvider.Provide(System.Collections.Generic.IReadOnlyDictionary? overrideConfiguration = null) -> GitVersion.Configuration.GitVersionConfiguration! +GitVersion.Configuration.IGitVersionConfiguration +GitVersion.Configuration.IGitVersionConfiguration.AssemblyFileVersioningFormat.get -> string? +GitVersion.Configuration.IGitVersionConfiguration.AssemblyFileVersioningScheme.get -> GitVersion.Extensions.AssemblyFileVersioningScheme? +GitVersion.Configuration.IGitVersionConfiguration.AssemblyInformationalFormat.get -> string? +GitVersion.Configuration.IGitVersionConfiguration.AssemblyVersioningFormat.get -> string? +GitVersion.Configuration.IGitVersionConfiguration.AssemblyVersioningScheme.get -> GitVersion.Extensions.AssemblyVersioningScheme? +GitVersion.Configuration.IGitVersionConfiguration.Branches.get -> System.Collections.Generic.IReadOnlyDictionary! +GitVersion.Configuration.IGitVersionConfiguration.CommitDateFormat.get -> string? +GitVersion.Configuration.IGitVersionConfiguration.Ignore.get -> GitVersion.Configuration.IIgnoreConfiguration! +GitVersion.Configuration.IGitVersionConfiguration.LabelPrefix.get -> string? +GitVersion.Configuration.IGitVersionConfiguration.LabelPreReleaseWeight.get -> int? +GitVersion.Configuration.IGitVersionConfiguration.MajorVersionBumpMessage.get -> string? +GitVersion.Configuration.IGitVersionConfiguration.MergeMessageFormats.get -> System.Collections.Generic.IReadOnlyDictionary! +GitVersion.Configuration.IGitVersionConfiguration.MinorVersionBumpMessage.get -> string? +GitVersion.Configuration.IGitVersionConfiguration.NextVersion.get -> string? +GitVersion.Configuration.IGitVersionConfiguration.NoBumpMessage.get -> string? +GitVersion.Configuration.IGitVersionConfiguration.PatchVersionBumpMessage.get -> string? +GitVersion.Configuration.IGitVersionConfiguration.SemanticVersionFormat.get -> GitVersion.SemanticVersionFormat +GitVersion.Configuration.IGitVersionConfiguration.UpdateBuildNumber.get -> bool +GitVersion.Configuration.IGitVersionConfiguration.Workflow.get -> string? GitVersion.Configuration.IgnoreConfiguration GitVersion.Configuration.IgnoreConfiguration.Before.get -> System.DateTimeOffset? -GitVersion.Configuration.IgnoreConfiguration.Before.set -> void -GitVersion.Configuration.IgnoreConfiguration.IgnoreConfiguration() -> void -GitVersion.Configuration.IgnoreConfiguration.Shas.get -> string![]! -GitVersion.Configuration.IgnoreConfiguration.Shas.set -> void +GitVersion.Configuration.IgnoreConfiguration.Before.init -> void +GitVersion.Configuration.IgnoreConfiguration.Shas.get -> System.Collections.Generic.List! +GitVersion.Configuration.IgnoreConfiguration.Shas.init -> void +GitVersion.Configuration.IIgnoreConfiguration +GitVersion.Configuration.IIgnoreConfiguration.Before.get -> System.DateTimeOffset? +GitVersion.Configuration.IIgnoreConfiguration.Shas.get -> System.Collections.Generic.IReadOnlyList! GitVersion.Configuration.Init.EditConfigStep GitVersion.Configuration.Init.EditConfigStep.EditConfigStep(GitVersion.Logging.IConsole! console, GitVersion.IFileSystem! fileSystem, GitVersion.Logging.ILog! log, GitVersion.Configuration.Init.Wizard.IConfigInitStepFactory! stepFactory) -> void GitVersion.Configuration.Init.GitVersionInitModule @@ -954,7 +955,6 @@ abstract GitVersion.Agents.BuildAgentBase.GenerateSetParameterMessage(string! na abstract GitVersion.Agents.BuildAgentBase.GenerateSetVersionMessage(GitVersion.OutputVariables.VersionVariables! variables) -> string? abstract GitVersion.Configuration.Init.Wizard.ConfigInitWizardStep.DefaultResult.get -> string? abstract GitVersion.Configuration.Init.Wizard.ConfigInitWizardStep.GetPrompt(GitVersion.Configuration.GitVersionConfiguration! configuration, string! workingDirectory) -> string! -abstract GitVersion.Configuration.Init.Wizard.ConfigInitWizardStep.HandleResult(string? result, System.Collections.Generic.Queue! steps, GitVersion.Configuration.GitVersionConfiguration! configuration, string! workingDirectory) -> GitVersion.Configuration.Init.StepResult! abstract GitVersion.GitVersionModule.RegisterTypes(Microsoft.Extensions.DependencyInjection.IServiceCollection! services) -> void abstract GitVersion.VersionCalculation.VersionStrategyBase.GetBaseVersions(GitVersion.Configuration.EffectiveBranchConfiguration! configuration) -> System.Collections.Generic.IEnumerable! const GitVersion.Configuration.ConfigurationConstants.BranchNamePlaceholder = "{BranchName}" -> string! @@ -993,6 +993,7 @@ override GitVersion.Agents.LocalBuild.GenerateSetVersionMessage(GitVersion.Outpu override GitVersion.Agents.LocalBuild.IsDefault.get -> bool override GitVersion.BranchCommit.Equals(object? obj) -> bool override GitVersion.BranchCommit.GetHashCode() -> int +override GitVersion.Configuration.GitVersionConfiguration.Inherit(GitVersion.Configuration.BranchConfiguration! configuration) -> GitVersion.Configuration.BranchConfiguration! override GitVersion.Configuration.GitVersionConfiguration.ToString() -> string! override GitVersion.Configuration.Init.EditConfigStep.DefaultResult.get -> string? override GitVersion.Configuration.Init.EditConfigStep.GetPrompt(GitVersion.Configuration.GitVersionConfiguration! configuration, string! workingDirectory) -> string! @@ -1202,21 +1203,21 @@ virtual GitVersion.Agents.BuildAgentBase.IsDefault.get -> bool virtual GitVersion.Agents.BuildAgentBase.PreventFetch() -> bool virtual GitVersion.Agents.BuildAgentBase.ShouldCleanUpRemotes() -> bool virtual GitVersion.Agents.BuildAgentBase.WriteIntegration(System.Action! writer, GitVersion.OutputVariables.VersionVariables! variables, bool updateBuildNumber = true) -> void +virtual GitVersion.Configuration.BranchConfiguration.Inherit(GitVersion.Configuration.BranchConfiguration! configuration) -> GitVersion.Configuration.BranchConfiguration! virtual GitVersion.Configuration.BranchConfigurationBuilder.WithCommitMessageIncrementing(GitVersion.VersionCalculation.CommitMessageIncrementMode? value) -> GitVersion.Configuration.BranchConfigurationBuilder! virtual GitVersion.Configuration.BranchConfigurationBuilder.WithConfiguration(GitVersion.Configuration.BranchConfiguration! value) -> GitVersion.Configuration.BranchConfigurationBuilder! virtual GitVersion.Configuration.BranchConfigurationBuilder.WithIncrement(GitVersion.IncrementStrategy value) -> GitVersion.Configuration.BranchConfigurationBuilder! virtual GitVersion.Configuration.BranchConfigurationBuilder.WithIsMainline(bool? value) -> GitVersion.Configuration.BranchConfigurationBuilder! virtual GitVersion.Configuration.BranchConfigurationBuilder.WithIsReleaseBranch(bool? value) -> GitVersion.Configuration.BranchConfigurationBuilder! -virtual GitVersion.Configuration.BranchConfigurationBuilder.WithIsSourceBranchFor(System.Collections.Generic.IEnumerable? values) -> GitVersion.Configuration.BranchConfigurationBuilder! -virtual GitVersion.Configuration.BranchConfigurationBuilder.WithIsSourceBranchFor(params string![]? values) -> GitVersion.Configuration.BranchConfigurationBuilder! +virtual GitVersion.Configuration.BranchConfigurationBuilder.WithIsSourceBranchFor(params string![]! values) -> GitVersion.Configuration.BranchConfigurationBuilder! +virtual GitVersion.Configuration.BranchConfigurationBuilder.WithIsSourceBranchFor(System.Collections.Generic.IEnumerable! values) -> GitVersion.Configuration.BranchConfigurationBuilder! virtual GitVersion.Configuration.BranchConfigurationBuilder.WithLabel(string? value) -> GitVersion.Configuration.BranchConfigurationBuilder! virtual GitVersion.Configuration.BranchConfigurationBuilder.WithLabelNumberPattern(string? value) -> GitVersion.Configuration.BranchConfigurationBuilder! -virtual GitVersion.Configuration.BranchConfigurationBuilder.WithName(string! value) -> GitVersion.Configuration.BranchConfigurationBuilder! virtual GitVersion.Configuration.BranchConfigurationBuilder.WithPreReleaseWeight(int? value) -> GitVersion.Configuration.BranchConfigurationBuilder! virtual GitVersion.Configuration.BranchConfigurationBuilder.WithPreventIncrementOfMergedBranchVersion(bool? value) -> GitVersion.Configuration.BranchConfigurationBuilder! virtual GitVersion.Configuration.BranchConfigurationBuilder.WithRegex(string? value) -> GitVersion.Configuration.BranchConfigurationBuilder! -virtual GitVersion.Configuration.BranchConfigurationBuilder.WithSourceBranches(System.Collections.Generic.IEnumerable? values) -> GitVersion.Configuration.BranchConfigurationBuilder! -virtual GitVersion.Configuration.BranchConfigurationBuilder.WithSourceBranches(params string![]? values) -> GitVersion.Configuration.BranchConfigurationBuilder! +virtual GitVersion.Configuration.BranchConfigurationBuilder.WithSourceBranches(params string![]! values) -> GitVersion.Configuration.BranchConfigurationBuilder! +virtual GitVersion.Configuration.BranchConfigurationBuilder.WithSourceBranches(System.Collections.Generic.IEnumerable! values) -> GitVersion.Configuration.BranchConfigurationBuilder! virtual GitVersion.Configuration.BranchConfigurationBuilder.WithTrackMergeMessage(bool? value) -> GitVersion.Configuration.BranchConfigurationBuilder! virtual GitVersion.Configuration.BranchConfigurationBuilder.WithTrackMergeTarget(bool? value) -> GitVersion.Configuration.BranchConfigurationBuilder! virtual GitVersion.Configuration.BranchConfigurationBuilder.WithTracksReleaseBranches(bool? value) -> GitVersion.Configuration.BranchConfigurationBuilder! diff --git a/src/GitVersion.Core/VersionCalculation/MainlineVersionCalculator.cs b/src/GitVersion.Core/VersionCalculation/MainlineVersionCalculator.cs index ac94f12e50..42c1ad714d 100644 --- a/src/GitVersion.Core/VersionCalculation/MainlineVersionCalculator.cs +++ b/src/GitVersion.Core/VersionCalculation/MainlineVersionCalculator.cs @@ -150,7 +150,7 @@ private IBranch GetMainline(ICommit? baseVersionSource) if (!mainlineBranches.Any()) { - var mainlineBranchConfigsString = string.Join(", ", Context.Configuration.Branches.Where(b => b.Value.IsMainline == true).Select(b => b.Value.Name)); + var mainlineBranchConfigsString = string.Join(", ", Context.Configuration.Branches.Where(b => b.Value.IsMainline == true).Select(b => b.Key)); throw new WarningException($"No branches can be found matching the commit {Context.CurrentCommit?.Sha} in the configured Mainline branches: {mainlineBranchConfigsString}"); } diff --git a/src/GitVersion.Core/VersionCalculation/NextVersionCalculator.cs b/src/GitVersion.Core/VersionCalculation/NextVersionCalculator.cs index b191763569..56ff701ba7 100644 --- a/src/GitVersion.Core/VersionCalculation/NextVersionCalculator.cs +++ b/src/GitVersion.Core/VersionCalculation/NextVersionCalculator.cs @@ -45,7 +45,9 @@ public virtual NextVersion FindVersion() var nextVersion = Calculate(Context.CurrentBranch, Context.Configuration); var baseVersion = nextVersion.BaseVersion; - var preReleaseTagName = nextVersion.Configuration.GetBranchSpecificTag(this.log, Context.CurrentBranch.Name.Friendly, baseVersion.BranchNameOverride); + var preReleaseTagName = nextVersion.Configuration.GetBranchSpecificTag( + this.log, Context.CurrentBranch.Name.WithoutOrigin, baseVersion.BranchNameOverride + ); SemanticVersion semver; if (nextVersion.Configuration.VersioningMode == VersioningMode.Mainline) From 95075cbf0e098ec893b445885c9ce5314ab37d04 Mon Sep 17 00:00:00 2001 From: Hardy Hobeck Date: Fri, 10 Mar 2023 22:27:26 +0100 Subject: [PATCH 2/7] Change usage of BranchConfiguration to IBranchConfiguration where possible. Execute: dotnet run --project .\src\GitVersion.Schema --framework net7.0 -- --outputdirectory schemas --version 6.0 --- schemas/6.0/GitVersion.configuration.json | 16 ++++----- .../ConfigurationProviderTests.cs | 2 +- .../IntegrationTests/DevelopScenarios.cs | 2 +- .../FeatureBranchScenarios.cs | 2 +- .../IntegrationTests/OtherBranchScenarios.cs | 2 +- ...EffectiveBranchConfigurationFinderTests.cs | 4 +-- .../NextVersionCalculatorTests.cs | 4 +-- .../Configuration/BranchConfiguration.cs | 8 ++--- .../BranchConfigurationBuilder.cs | 12 +++---- .../Configuration/ConfigurationBuilderBase.cs | 14 ++++---- .../Configuration/ConfigurationExtensions.cs | 24 ++++++------- .../Configuration/EffectiveConfiguration.cs | 4 +-- .../GitFlowConfigurationBuilder.cs | 34 +++++++++---------- .../GitHubFlowConfigurationBuilder.cs | 22 ++++++------ .../Configuration/GitVersionConfiguration.cs | 5 +-- .../Configuration/IBranchConfiguration.cs | 2 +- .../Configuration/IGitVersionConfiguration.cs | 2 +- .../Core/Abstractions/IRepositoryStore.cs | 2 +- .../Core/MainlineBranchFinder.cs | 10 +++--- src/GitVersion.Core/Core/RepositoryStore.cs | 10 +++--- .../Core/SourceBranchFinder.cs | 2 +- src/GitVersion.Core/PublicAPI.Unshipped.txt | 26 +++++++------- .../EffectiveBranchConfigurationFinder.cs | 2 +- .../VersionCalculation/IncrementStrategy.cs | 2 +- 24 files changed, 106 insertions(+), 107 deletions(-) diff --git a/schemas/6.0/GitVersion.configuration.json b/schemas/6.0/GitVersion.configuration.json index e8ffac5780..61160e5161 100644 --- a/schemas/6.0/GitVersion.configuration.json +++ b/schemas/6.0/GitVersion.configuration.json @@ -84,7 +84,7 @@ "$ref": "#/$defs/string1" }, "label-prefix": { - "description": "A regex which is used to trim Git tags before processing. Defaults to [vV]?", + "description": "A regular expression which is used to trim Git tags before processing. Defaults to [vV]?", "type": "string" }, "label-pre-release-weight": { @@ -97,7 +97,7 @@ "major-version-bump-message": { "format": "regex", "pattern": "\u0027\\\u002Bsemver:\\s?(breaking|major)\u0027", - "description": "The regex to match commit messages with to perform a major version increment. Default set to \u0027\\\u002Bsemver:\\s?(breaking|major)\u0027", + "description": "The regular expression to match commit messages with to perform a major version increment. Default set to \u0027\\\u002Bsemver:\\s?(breaking|major)\u0027", "type": "string" }, "merge-message-formats": { @@ -110,7 +110,7 @@ "minor-version-bump-message": { "format": "regex", "pattern": "\u0027\\\u002Bsemver:\\s?(feature|minor)\u0027", - "description": "The regex to match commit messages with to perform a minor version increment. Default set to \u0027\\\u002Bsemver:\\s?(feature|minor)\u0027", + "description": "The regular expression to match commit messages with to perform a minor version increment. Default set to \u0027\\\u002Bsemver:\\s?(feature|minor)\u0027", "type": "string" }, "next-version": { @@ -126,7 +126,7 @@ "patch-version-bump-message": { "format": "regex", "pattern": "\u0027\\\u002Bsemver:\\s?(fix|patch)\u0027", - "description": "The regex to match commit messages with to perform a patch version increment. Default set to \u0027\\\u002Bsemver:\\s?(fix|patch)\u0027", + "description": "The regular expression to match commit messages with to perform a patch version increment. Default set to \u0027\\\u002Bsemver:\\s?(fix|patch)\u0027", "type": "string" }, "pre-release-weight": { @@ -246,7 +246,7 @@ ] }, "Nullable\u006012": { - "description": "Indicates this branch config represents a release branch in GitFlow.", + "description": "Indicates this branch configuration represents a release branch in GitFlow.", "type": [ "boolean", "null" @@ -267,7 +267,7 @@ "string1": { "format": "regex", "pattern": "[/-](?\u003Cnumber\u003E\\d\u002B)[-/]", - "description": "The regex pattern to use to extract the number from the branch name. Defaults to \u0027[/-](?\u003Cnumber\u003E\\d\u002B)[-/]\u0027.", + "description": "The regular expression pattern to use to extract the number from the branch name. Defaults to \u0027[/-](?\u003Cnumber\u003E\\d\u002B)[-/]\u0027.", "type": "string" }, "Nullable\u006013": { @@ -285,7 +285,7 @@ ] }, "string2": { - "description": "The regex pattern to use to match this branch.", + "description": "The regular expression pattern to use to match this branch.", "type": "string" }, "array1": { @@ -311,7 +311,7 @@ ] }, "Nullable\u006017": { - "description": "Indicates this branch config represents develop in GitFlow.", + "description": "Indicates this branch configuration represents develop in GitFlow.", "type": [ "boolean", "null" diff --git a/src/GitVersion.Core.Tests/Configuration/ConfigurationProviderTests.cs b/src/GitVersion.Core.Tests/Configuration/ConfigurationProviderTests.cs index 42d7fc8c6b..63ae7cb16a 100644 --- a/src/GitVersion.Core.Tests/Configuration/ConfigurationProviderTests.cs +++ b/src/GitVersion.Core.Tests/Configuration/ConfigurationProviderTests.cs @@ -124,7 +124,7 @@ public void CanProvideConfigForNewBranch() SetupConfigFileContent(text); var configuration = this.configurationProvider.ProvideForDirectory(this.repoPath); - configuration.Branches["bug"].Regex.ShouldBe("bug[/-]"); + configuration.Branches["bug"].RegularExpression.ShouldBe("bug[/-]"); configuration.Branches["bug"].Label.ShouldBe("bugfix"); } diff --git a/src/GitVersion.Core.Tests/IntegrationTests/DevelopScenarios.cs b/src/GitVersion.Core.Tests/IntegrationTests/DevelopScenarios.cs index a3cc73fe95..05be889d5f 100644 --- a/src/GitVersion.Core.Tests/IntegrationTests/DevelopScenarios.cs +++ b/src/GitVersion.Core.Tests/IntegrationTests/DevelopScenarios.cs @@ -396,7 +396,7 @@ public void WhenPreventIncrementOfMergedBranchVersionIsSetToFalseForDevelopCommi ) .WithBranch("hotfix", builder => builder .WithPreventIncrementOfMergedBranchVersion(true) - .WithRegex("^(origin/)?hotfix[/-]") + .WithRegularExpression("^(origin/)?hotfix[/-]") ) .Build(); diff --git a/src/GitVersion.Core.Tests/IntegrationTests/FeatureBranchScenarios.cs b/src/GitVersion.Core.Tests/IntegrationTests/FeatureBranchScenarios.cs index 5d0afe1bf9..b98bc6eec2 100644 --- a/src/GitVersion.Core.Tests/IntegrationTests/FeatureBranchScenarios.cs +++ b/src/GitVersion.Core.Tests/IntegrationTests/FeatureBranchScenarios.cs @@ -40,7 +40,7 @@ public void BranchCreatedAfterFastForwardMergeShouldInheritCorrectly() var configuration = GitFlowConfigurationBuilder.New .WithBranch("unstable", builder => builder .WithIncrement(IncrementStrategy.Minor) - .WithRegex("unstable") + .WithRegularExpression("unstable") .WithSourceBranches() .WithIsSourceBranchFor("feature")) .Build(); diff --git a/src/GitVersion.Core.Tests/IntegrationTests/OtherBranchScenarios.cs b/src/GitVersion.Core.Tests/IntegrationTests/OtherBranchScenarios.cs index c8d6109fa2..da92c67631 100644 --- a/src/GitVersion.Core.Tests/IntegrationTests/OtherBranchScenarios.cs +++ b/src/GitVersion.Core.Tests/IntegrationTests/OtherBranchScenarios.cs @@ -68,7 +68,7 @@ public void LabelIsBranchNameForBranchesWithoutPrefixedBranchName(string label, var configuration = GitFlowConfigurationBuilder.New .WithBranch("other", builder => builder .WithIncrement(IncrementStrategy.Patch) - .WithRegex(".*") + .WithRegularExpression(".*") .WithSourceBranches() .WithLabel(label)) .Build(); diff --git a/src/GitVersion.Core.Tests/VersionCalculation/EffectiveBranchConfigurationFinderTests.cs b/src/GitVersion.Core.Tests/VersionCalculation/EffectiveBranchConfigurationFinderTests.cs index 32dbd8b0d7..281634a8a1 100644 --- a/src/GitVersion.Core.Tests/VersionCalculation/EffectiveBranchConfigurationFinderTests.cs +++ b/src/GitVersion.Core.Tests/VersionCalculation/EffectiveBranchConfigurationFinderTests.cs @@ -172,14 +172,14 @@ public void UsesFirstBranchConfigWhenMultipleMatch(string branchName, IncrementS .WithVersioningMode(VersioningMode.ContinuousDeployment) .WithIncrement(IncrementStrategy.None) .WithLabel("latest") - .WithRegex("release/latest") + .WithRegularExpression("release/latest") ) .WithBranch("release", builder => builder .WithConfiguration(branchConfiguration) .WithVersioningMode(VersioningMode.ContinuousDeployment) .WithIncrement(IncrementStrategy.Patch) .WithLabel("not-latest") - .WithRegex("releases?[/-]") + .WithRegularExpression("releases?[/-]") ) .Build(); diff --git a/src/GitVersion.Core.Tests/VersionCalculation/NextVersionCalculatorTests.cs b/src/GitVersion.Core.Tests/VersionCalculation/NextVersionCalculatorTests.cs index f17257b913..12d10635fc 100644 --- a/src/GitVersion.Core.Tests/VersionCalculation/NextVersionCalculatorTests.cs +++ b/src/GitVersion.Core.Tests/VersionCalculation/NextVersionCalculatorTests.cs @@ -70,7 +70,7 @@ public void PreReleaseLabelCanUseBranchName() var configuration = GitFlowConfigurationBuilder.New .WithNextVersion("1.0.0") .WithBranch("custom", builder => builder - .WithRegex("custom/") + .WithRegularExpression("custom/") .WithLabel(ConfigurationConstants.BranchNamePlaceholder) .WithSourceBranches() ) @@ -212,7 +212,7 @@ public void PreReleaseLabelCanUseBranchNameVariable() var configuration = GitFlowConfigurationBuilder.New .WithNextVersion("1.0.0") .WithBranch("custom", builder => builder - .WithRegex("custom/") + .WithRegularExpression("custom/") .WithLabel($"alpha.{ConfigurationConstants.BranchNamePlaceholder}") .WithSourceBranches() ) diff --git a/src/GitVersion.Core/Configuration/BranchConfiguration.cs b/src/GitVersion.Core/Configuration/BranchConfiguration.cs index 6f85cca803..20aca70b7c 100644 --- a/src/GitVersion.Core/Configuration/BranchConfiguration.cs +++ b/src/GitVersion.Core/Configuration/BranchConfiguration.cs @@ -41,10 +41,10 @@ public record BranchConfiguration : IBranchConfiguration [JsonPropertyName("regex")] [JsonPropertyDescription("The regular expression pattern to use to match this branch.")] - public string? Regex { get; internal set; } + public string? RegularExpression { get; internal set; } [JsonIgnore] - string? IBranchConfiguration.RegularExpression => Regex; + string? IBranchConfiguration.RegularExpression => RegularExpression; [JsonPropertyName("source-branches")] [JsonPropertyDescription("The source branches for this branch.")] @@ -76,7 +76,7 @@ public record BranchConfiguration : IBranchConfiguration [JsonPropertyDescription("Provides a way to translate the PreReleaseLabel to a number.")] public int? PreReleaseWeight { get; internal set; } - public virtual BranchConfiguration Inherit(BranchConfiguration configuration) + public virtual IBranchConfiguration Inherit(IBranchConfiguration configuration) { configuration.NotNull(); @@ -91,7 +91,7 @@ public virtual BranchConfiguration Inherit(BranchConfiguration configuration) TrackMergeTarget = TrackMergeTarget ?? configuration.TrackMergeTarget, TrackMergeMessage = TrackMergeMessage ?? configuration.TrackMergeMessage, CommitMessageIncrementing = CommitMessageIncrementing ?? configuration.CommitMessageIncrementing, - Regex = Regex ?? configuration.Regex, + RegularExpression = RegularExpression ?? configuration.RegularExpression, TracksReleaseBranches = TracksReleaseBranches ?? configuration.TracksReleaseBranches, IsReleaseBranch = IsReleaseBranch ?? configuration.IsReleaseBranch, IsMainline = IsMainline ?? configuration.IsMainline, diff --git a/src/GitVersion.Core/Configuration/BranchConfigurationBuilder.cs b/src/GitVersion.Core/Configuration/BranchConfigurationBuilder.cs index 579dd326cb..28b9aeb90e 100644 --- a/src/GitVersion.Core/Configuration/BranchConfigurationBuilder.cs +++ b/src/GitVersion.Core/Configuration/BranchConfigurationBuilder.cs @@ -14,7 +14,7 @@ public class BranchConfigurationBuilder private bool? trackMergeTarget; private bool? trackMergeMessage; private CommitMessageIncrementMode? commitMessageIncrementing; - private string? regex; + private string? regularExpression; private HashSet sourceBranches = new(); private HashSet isSourceBranchFor = new(); private bool? tracksReleaseBranches; @@ -74,9 +74,9 @@ public virtual BranchConfigurationBuilder WithCommitMessageIncrementing(CommitMe return this; } - public virtual BranchConfigurationBuilder WithRegex(string? value) + public virtual BranchConfigurationBuilder WithRegularExpression(string? value) { - this.regex = value; + this.regularExpression = value; return this; } @@ -128,7 +128,7 @@ public virtual BranchConfigurationBuilder WithPreReleaseWeight(int? value) return this; } - public virtual BranchConfigurationBuilder WithConfiguration(BranchConfiguration value) + public virtual BranchConfigurationBuilder WithConfiguration(IBranchConfiguration value) { WithVersioningMode(value.VersioningMode); WithLabel(value.Label); @@ -138,7 +138,7 @@ public virtual BranchConfigurationBuilder WithConfiguration(BranchConfiguration WithTrackMergeTarget(value.TrackMergeTarget); WithTrackMergeMessage(value.TrackMergeMessage); WithCommitMessageIncrementing(value.CommitMessageIncrementing); - WithRegex(value.Regex); + WithRegularExpression(value.RegularExpression); WithTracksReleaseBranches(value.TracksReleaseBranches); WithIsReleaseBranch(value.IsReleaseBranch); WithIsMainline(value.IsMainline); @@ -153,7 +153,7 @@ public virtual BranchConfigurationBuilder WithConfiguration(BranchConfiguration VersioningMode = versioningMode, Label = label, Increment = increment, - Regex = regex, + RegularExpression = regularExpression, TracksReleaseBranches = tracksReleaseBranches, TrackMergeTarget = trackMergeTarget, TrackMergeMessage = trackMergeMessage, diff --git a/src/GitVersion.Core/Configuration/ConfigurationBuilderBase.cs b/src/GitVersion.Core/Configuration/ConfigurationBuilderBase.cs index 49980c4528..bce3348eb2 100644 --- a/src/GitVersion.Core/Configuration/ConfigurationBuilderBase.cs +++ b/src/GitVersion.Core/Configuration/ConfigurationBuilderBase.cs @@ -33,7 +33,7 @@ internal abstract class ConfigurationBuilderBase : IConfi private bool? trackMergeTarget; private bool? trackMergeMessage; private CommitMessageIncrementMode? commitMessageIncrementing; - private string? regex; + private string? regularExpression; private bool? tracksReleaseBranches; private bool? isReleaseBranch; private bool? isMainline; @@ -261,9 +261,9 @@ public virtual TConfigurationBuilder WithCommitMessageIncrementing(CommitMessage return (TConfigurationBuilder)this; } - public virtual TConfigurationBuilder WithRegex(string? value) + public virtual TConfigurationBuilder WithRegularExpression(string? value) { - this.regex = value; + this.regularExpression = value; return (TConfigurationBuilder)this; } @@ -322,7 +322,7 @@ public virtual TConfigurationBuilder WithConfiguration(GitVersionConfiguration v WithTrackMergeTarget(value.TrackMergeTarget); WithTrackMergeMessage(value.TrackMergeMessage); WithCommitMessageIncrementing(value.CommitMessageIncrementing); - WithRegex(value.Regex); + WithRegularExpression(value.RegularExpression); WithTracksReleaseBranches(value.TracksReleaseBranches); WithIsReleaseBranch(value.IsReleaseBranch); WithIsMainline(value.IsMainline); @@ -369,7 +369,7 @@ public virtual GitVersionConfiguration Build() VersioningMode = this.versioningMode, Label = this.label, Increment = this.increment, - Regex = this.regex, + RegularExpression = this.regularExpression, TracksReleaseBranches = this.tracksReleaseBranches, TrackMergeTarget = this.trackMergeTarget, TrackMergeMessage = this.trackMergeMessage, @@ -406,7 +406,7 @@ private static void FinalizeConfiguration(GitVersionConfiguration configuration) } private static void FinalizeBranchConfiguration(GitVersionConfiguration configuration, string branchName, - BranchConfiguration branchConfiguration) + IBranchConfiguration branchConfiguration) { var branches = new Dictionary(configuration.Branches); @@ -423,7 +423,7 @@ private static void ValidateConfiguration(GitVersionConfiguration configuration) { var helpUrl = $"{System.Environment.NewLine}See https://gitversion.net/docs/reference/configuration for more info"; - if (branchConfiguration.Regex == null) + if (branchConfiguration.RegularExpression == null) { throw new ConfigurationException($"Branch configuration '{name}' is missing required configuration 'regex'{helpUrl}"); } diff --git a/src/GitVersion.Core/Configuration/ConfigurationExtensions.cs b/src/GitVersion.Core/Configuration/ConfigurationExtensions.cs index 2be53561a1..24af076f61 100644 --- a/src/GitVersion.Core/Configuration/ConfigurationExtensions.cs +++ b/src/GitVersion.Core/Configuration/ConfigurationExtensions.cs @@ -11,31 +11,31 @@ public static EffectiveConfiguration GetEffectiveConfiguration(this GitVersionCo private static EffectiveConfiguration GetEffectiveConfiguration(this GitVersionConfiguration configuration, ReferenceName branchName) { - BranchConfiguration branchConfiguration = configuration.GetBranchConfiguration(branchName); + IBranchConfiguration branchConfiguration = configuration.GetBranchConfiguration(branchName); return new EffectiveConfiguration(configuration, branchConfiguration); } - public static BranchConfiguration GetBranchConfiguration(this GitVersionConfiguration configuration, IBranch branch) + public static IBranchConfiguration GetBranchConfiguration(this GitVersionConfiguration configuration, IBranch branch) => GetBranchConfiguration(configuration, branch.NotNull().Name); - public static BranchConfiguration GetBranchConfiguration(this GitVersionConfiguration configuration, ReferenceName branchName) + public static IBranchConfiguration GetBranchConfiguration(this GitVersionConfiguration configuration, ReferenceName branchName) { var branchConfiguration = GetBranchConfigurations(configuration, branchName.WithoutOrigin).FirstOrDefault(); - branchConfiguration ??= new() + branchConfiguration ??= new BranchConfiguration() { - Regex = string.Empty, + RegularExpression = string.Empty, Label = ConfigurationConstants.BranchNamePlaceholder, Increment = IncrementStrategy.Inherit }; return branchConfiguration; } - private static IEnumerable GetBranchConfigurations(GitVersionConfiguration configuration, string branchName) + private static IEnumerable GetBranchConfigurations(GitVersionConfiguration configuration, string branchName) { - BranchConfiguration? unknownBranchConfiguration = null; - foreach ((string key, BranchConfiguration branchConfiguration) in configuration.Branches) + IBranchConfiguration? unknownBranchConfiguration = null; + foreach ((string key, IBranchConfiguration branchConfiguration) in configuration.Branches) { - if (((IBranchConfiguration)branchConfiguration).IsMatch(branchName)) + if (branchConfiguration.IsMatch(branchName)) { if (key == "unknown") { @@ -129,8 +129,6 @@ public static (string GitDirectory, string WorkingTreeDirectory)? FindGitDir(thi return null; } - public static List> GetReleaseBranchConfiguration(this GitVersionConfiguration configuration) => - configuration.Branches - .Where(b => b.Value.IsReleaseBranch == true) - .ToList(); + public static List> GetReleaseBranchConfiguration(this GitVersionConfiguration configuration) => + ((IGitVersionConfiguration)configuration).Branches.Where(b => b.Value.IsReleaseBranch == true).ToList(); } diff --git a/src/GitVersion.Core/Configuration/EffectiveConfiguration.cs b/src/GitVersion.Core/Configuration/EffectiveConfiguration.cs index b1678dbb1c..ec3b450097 100644 --- a/src/GitVersion.Core/Configuration/EffectiveConfiguration.cs +++ b/src/GitVersion.Core/Configuration/EffectiveConfiguration.cs @@ -9,7 +9,7 @@ namespace GitVersion.Configuration; /// public class EffectiveConfiguration { - public EffectiveConfiguration(GitVersionConfiguration configuration, BranchConfiguration branchConfiguration) + public EffectiveConfiguration(GitVersionConfiguration configuration, IBranchConfiguration branchConfiguration) { configuration.NotNull(); branchConfiguration.NotNull(); @@ -42,7 +42,7 @@ public EffectiveConfiguration(GitVersionConfiguration configuration, BranchConfi Label = branchConfiguration.Label ?? string.Empty; NextVersion = configuration.NextVersion; Increment = branchConfiguration.Increment; - BranchPrefixToTrim = branchConfiguration.Regex; + BranchPrefixToTrim = branchConfiguration.RegularExpression; PreventIncrementOfMergedBranchVersion = branchConfiguration.PreventIncrementOfMergedBranchVersion ?? false; LabelNumberPattern = branchConfiguration.LabelNumberPattern; TrackMergeTarget = branchConfiguration.TrackMergeTarget ?? false; diff --git a/src/GitVersion.Core/Configuration/GitFlowConfigurationBuilder.cs b/src/GitVersion.Core/Configuration/GitFlowConfigurationBuilder.cs index 523bc0b819..e698a3f1f4 100644 --- a/src/GitVersion.Core/Configuration/GitFlowConfigurationBuilder.cs +++ b/src/GitVersion.Core/Configuration/GitFlowConfigurationBuilder.cs @@ -23,7 +23,7 @@ private GitFlowConfigurationBuilder() LabelPreReleaseWeight = 60000, UpdateBuildNumber = true, VersioningMode = VersioningMode.ContinuousDelivery, - Regex = string.Empty, + RegularExpression = string.Empty, Label = ConfigurationConstants.BranchNamePlaceholder, Increment = IncrementStrategy.Inherit, CommitMessageIncrementing = CommitMessageIncrementMode.Enabled, @@ -35,10 +35,10 @@ private GitFlowConfigurationBuilder() IsMainline = false }); - WithBranch(DevelopBranch.Name).WithConfiguration(new() + WithBranch(DevelopBranch.Name).WithConfiguration(new BranchConfiguration() { Increment = IncrementStrategy.Minor, - Regex = DevelopBranch.RegexPattern, + RegularExpression = DevelopBranch.RegexPattern, VersioningMode = VersioningMode.ContinuousDeployment, SourceBranches = new HashSet(), Label = "alpha", @@ -50,10 +50,10 @@ private GitFlowConfigurationBuilder() PreReleaseWeight = 0 }); - WithBranch(MainBranch.Name).WithConfiguration(new() + WithBranch(MainBranch.Name).WithConfiguration(new BranchConfiguration() { Increment = IncrementStrategy.Patch, - Regex = MainBranch.RegexPattern, + RegularExpression = MainBranch.RegexPattern, SourceBranches = new HashSet { DevelopBranch.Name, ReleaseBranch.Name @@ -67,10 +67,10 @@ private GitFlowConfigurationBuilder() PreReleaseWeight = 55000 }); - WithBranch(ReleaseBranch.Name).WithConfiguration(new() + WithBranch(ReleaseBranch.Name).WithConfiguration(new BranchConfiguration() { Increment = IncrementStrategy.None, - Regex = ReleaseBranch.RegexPattern, + RegularExpression = ReleaseBranch.RegexPattern, SourceBranches = new HashSet { DevelopBranch.Name, MainBranch.Name, @@ -86,10 +86,10 @@ private GitFlowConfigurationBuilder() PreReleaseWeight = 30000 }); - WithBranch(FeatureBranch.Name).WithConfiguration(new() + WithBranch(FeatureBranch.Name).WithConfiguration(new BranchConfiguration() { Increment = IncrementStrategy.Inherit, - Regex = FeatureBranch.RegexPattern, + RegularExpression = FeatureBranch.RegexPattern, VersioningMode = VersioningMode.ContinuousDelivery, SourceBranches = new HashSet { DevelopBranch.Name, @@ -103,10 +103,10 @@ private GitFlowConfigurationBuilder() PreReleaseWeight = 30000 }); - WithBranch(PullRequestBranch.Name).WithConfiguration(new() + WithBranch(PullRequestBranch.Name).WithConfiguration(new BranchConfiguration() { Increment = IncrementStrategy.Inherit, - Regex = PullRequestBranch.RegexPattern, + RegularExpression = PullRequestBranch.RegexPattern, VersioningMode = VersioningMode.ContinuousDelivery, SourceBranches = new HashSet { DevelopBranch.Name, @@ -121,10 +121,10 @@ private GitFlowConfigurationBuilder() PreReleaseWeight = 30000 }); - WithBranch(HotfixBranch.Name).WithConfiguration(new() + WithBranch(HotfixBranch.Name).WithConfiguration(new BranchConfiguration() { Increment = IncrementStrategy.Inherit, - Regex = HotfixBranch.RegexPattern, + RegularExpression = HotfixBranch.RegexPattern, VersioningMode = VersioningMode.ContinuousDelivery, SourceBranches = new HashSet { ReleaseBranch.Name, @@ -136,10 +136,10 @@ private GitFlowConfigurationBuilder() PreReleaseWeight = 30000 }); - WithBranch(SupportBranch.Name).WithConfiguration(new() + WithBranch(SupportBranch.Name).WithConfiguration(new BranchConfiguration() { Increment = IncrementStrategy.Patch, - Regex = SupportBranch.RegexPattern, + RegularExpression = SupportBranch.RegexPattern, SourceBranches = new HashSet { MainBranch.Name }, Label = string.Empty, PreventIncrementOfMergedBranchVersion = true, @@ -150,9 +150,9 @@ private GitFlowConfigurationBuilder() PreReleaseWeight = 55000 }); - WithBranch(UnknownBranch.Name).WithConfiguration(new() + WithBranch(UnknownBranch.Name).WithConfiguration(new BranchConfiguration() { - Regex = UnknownBranch.RegexPattern, + RegularExpression = UnknownBranch.RegexPattern, Label = ConfigurationConstants.BranchNamePlaceholder, VersioningMode = VersioningMode.ContinuousDelivery, Increment = IncrementStrategy.Inherit, diff --git a/src/GitVersion.Core/Configuration/GitHubFlowConfigurationBuilder.cs b/src/GitVersion.Core/Configuration/GitHubFlowConfigurationBuilder.cs index 96a6a8a3f0..338ddc299a 100644 --- a/src/GitVersion.Core/Configuration/GitHubFlowConfigurationBuilder.cs +++ b/src/GitVersion.Core/Configuration/GitHubFlowConfigurationBuilder.cs @@ -23,7 +23,7 @@ private GitHubFlowConfigurationBuilder() LabelPreReleaseWeight = 60000, UpdateBuildNumber = true, VersioningMode = VersioningMode.ContinuousDelivery, - Regex = string.Empty, + RegularExpression = string.Empty, Label = ConfigurationConstants.BranchNamePlaceholder, Increment = IncrementStrategy.Inherit, CommitMessageIncrementing = CommitMessageIncrementMode.Enabled, @@ -35,10 +35,10 @@ private GitHubFlowConfigurationBuilder() IsMainline = false }); - WithBranch(MainBranch.Name).WithConfiguration(new() + WithBranch(MainBranch.Name).WithConfiguration(new BranchConfiguration() { Increment = IncrementStrategy.Patch, - Regex = MainBranch.RegexPattern, + RegularExpression = MainBranch.RegexPattern, SourceBranches = new HashSet { ReleaseBranch.Name }, @@ -51,10 +51,10 @@ private GitHubFlowConfigurationBuilder() PreReleaseWeight = 55000 }); - WithBranch(ReleaseBranch.Name).WithConfiguration(new() + WithBranch(ReleaseBranch.Name).WithConfiguration(new BranchConfiguration() { Increment = IncrementStrategy.None, - Regex = ReleaseBranch.RegexPattern, + RegularExpression = ReleaseBranch.RegexPattern, SourceBranches = new HashSet { MainBranch.Name, ReleaseBranch.Name @@ -68,10 +68,10 @@ private GitHubFlowConfigurationBuilder() PreReleaseWeight = 30000 }); - WithBranch(FeatureBranch.Name).WithConfiguration(new() + WithBranch(FeatureBranch.Name).WithConfiguration(new BranchConfiguration() { Increment = IncrementStrategy.Inherit, - Regex = FeatureBranch.RegexPattern, + RegularExpression = FeatureBranch.RegexPattern, VersioningMode = VersioningMode.ContinuousDelivery, SourceBranches = new HashSet { MainBranch.Name, @@ -82,10 +82,10 @@ private GitHubFlowConfigurationBuilder() PreReleaseWeight = 30000 }); - WithBranch(PullRequestBranch.Name).WithConfiguration(new() + WithBranch(PullRequestBranch.Name).WithConfiguration(new BranchConfiguration() { Increment = IncrementStrategy.Inherit, - Regex = PullRequestBranch.RegexPattern, + RegularExpression = PullRequestBranch.RegexPattern, VersioningMode = VersioningMode.ContinuousDelivery, SourceBranches = new HashSet { MainBranch.Name, @@ -97,9 +97,9 @@ private GitHubFlowConfigurationBuilder() PreReleaseWeight = 30000 }); - WithBranch(UnknownBranch.Name).WithConfiguration(new() + WithBranch(UnknownBranch.Name).WithConfiguration(new BranchConfiguration() { - Regex = UnknownBranch.RegexPattern, + RegularExpression = UnknownBranch.RegexPattern, Label = ConfigurationConstants.BranchNamePlaceholder, VersioningMode = VersioningMode.ContinuousDelivery, Increment = IncrementStrategy.Inherit, diff --git a/src/GitVersion.Core/Configuration/GitVersionConfiguration.cs b/src/GitVersion.Core/Configuration/GitVersionConfiguration.cs index 8e81670143..8bc5133189 100644 --- a/src/GitVersion.Core/Configuration/GitVersionConfiguration.cs +++ b/src/GitVersion.Core/Configuration/GitVersionConfiguration.cs @@ -91,7 +91,8 @@ public string? NextVersion public SemanticVersionFormat SemanticVersionFormat { get; internal set; } [JsonIgnore] - IReadOnlyDictionary IGitVersionConfiguration.Branches => Branches; + IReadOnlyDictionary IGitVersionConfiguration.Branches + => Branches.ToDictionary(element => element.Key, element => (IBranchConfiguration)element.Value); [JsonPropertyName("branches")] [JsonPropertyDescription("The header for all the individual branch configuration.")] @@ -104,7 +105,7 @@ public string? NextVersion [JsonPropertyDescription("The header property for the ignore configuration.")] public IgnoreConfiguration Ignore { get; internal set; } = new(); - public override BranchConfiguration Inherit(BranchConfiguration configuration) => throw new NotSupportedException(); + public override IBranchConfiguration Inherit(IBranchConfiguration configuration) => throw new NotSupportedException(); public override string ToString() { diff --git a/src/GitVersion.Core/Configuration/IBranchConfiguration.cs b/src/GitVersion.Core/Configuration/IBranchConfiguration.cs index acab9e3770..be21e24a08 100644 --- a/src/GitVersion.Core/Configuration/IBranchConfiguration.cs +++ b/src/GitVersion.Core/Configuration/IBranchConfiguration.cs @@ -38,5 +38,5 @@ public bool IsMatch(string branchName) IReadOnlyCollection IsSourceBranchFor { get; } - BranchConfiguration Inherit(BranchConfiguration configuration); + IBranchConfiguration Inherit(IBranchConfiguration configuration); } diff --git a/src/GitVersion.Core/Configuration/IGitVersionConfiguration.cs b/src/GitVersion.Core/Configuration/IGitVersionConfiguration.cs index 589f2b1436..272430587c 100644 --- a/src/GitVersion.Core/Configuration/IGitVersionConfiguration.cs +++ b/src/GitVersion.Core/Configuration/IGitVersionConfiguration.cs @@ -38,7 +38,7 @@ public interface IGitVersionConfiguration : IBranchConfiguration SemanticVersionFormat SemanticVersionFormat { get; } - IReadOnlyDictionary Branches { get; } + IReadOnlyDictionary Branches { get; } IIgnoreConfiguration Ignore { get; } } diff --git a/src/GitVersion.Core/Core/Abstractions/IRepositoryStore.cs b/src/GitVersion.Core/Core/Abstractions/IRepositoryStore.cs index 75dcf38a6e..859ff6267f 100644 --- a/src/GitVersion.Core/Core/Abstractions/IRepositoryStore.cs +++ b/src/GitVersion.Core/Core/Abstractions/IRepositoryStore.cs @@ -19,7 +19,7 @@ public interface IRepositoryStore IBranch? FindBranch(string? branchName); IBranch? FindMainBranch(GitVersionConfiguration configuration); IEnumerable FindMainlineBranches(GitVersionConfiguration configuration); - IEnumerable GetReleaseBranches(IEnumerable> releaseBranchConfig); + IEnumerable GetReleaseBranches(IEnumerable> releaseBranchConfig); IEnumerable ExcludingBranches(IEnumerable branchesToExclude); IEnumerable GetBranchesContainingCommit(ICommit? commit, IEnumerable? branches = null, bool onlyTrackedBranches = false); diff --git a/src/GitVersion.Core/Core/MainlineBranchFinder.cs b/src/GitVersion.Core/Core/MainlineBranchFinder.cs index 778638d9f7..241b2b13c5 100644 --- a/src/GitVersion.Core/Core/MainlineBranchFinder.cs +++ b/src/GitVersion.Core/Core/MainlineBranchFinder.cs @@ -10,7 +10,7 @@ internal class MainlineBranchFinder { private readonly GitVersionConfiguration configuration; private readonly ILog log; - private readonly List mainlineBranchConfigurations; + private readonly List mainlineBranchConfigurations; private readonly IGitRepository repository; private readonly IRepositoryStore repositoryStore; @@ -22,7 +22,7 @@ public MainlineBranchFinder(IRepositoryStore repositoryStore, this.repositoryStore = repositoryStore.NotNull(); this.repository = repository.NotNull(); this.configuration = configuration.NotNull(); - mainlineBranchConfigurations = configuration.Branches.Select(e => e.Value).Where(b => b.IsMainline == true).ToList(); + mainlineBranchConfigurations = ((IGitVersionConfiguration)configuration).Branches.Select(e => e.Value).Where(b => b.IsMainline == true).ToList(); this.log = log.NotNull(); } @@ -54,12 +54,12 @@ public MainlineConfigBranchMatcher(INamedReference branch, ILog log) this.log = log; } - public bool IsMainline(BranchConfiguration value) + public bool IsMainline(IBranchConfiguration value) { - if (value.Regex == null) + if (value.RegularExpression == null) return false; - var mainlineRegex = value.Regex; + var mainlineRegex = value.RegularExpression; var branchName = this.branch.Name.WithoutOrigin; var match = Regex.IsMatch(branchName, mainlineRegex); this.log.Info($"'{mainlineRegex}' {(match ? "matches" : "does not match")} '{branchName}'."); diff --git a/src/GitVersion.Core/Core/RepositoryStore.cs b/src/GitVersion.Core/Core/RepositoryStore.cs index 951f23813b..aa192ffc1e 100644 --- a/src/GitVersion.Core/Core/RepositoryStore.cs +++ b/src/GitVersion.Core/Core/RepositoryStore.cs @@ -105,8 +105,8 @@ public IBranch GetTargetBranch(string? targetBranchName) public IBranch? FindMainBranch(GitVersionConfiguration configuration) { var branches = configuration.Branches; - var mainBranchRegex = configuration.Branches[ConfigurationConstants.MainBranchKey].Regex - ?? branches[ConfigurationConstants.MasterBranchKey].Regex; + var mainBranchRegex = branches[ConfigurationConstants.MainBranchKey].RegularExpression + ?? branches[ConfigurationConstants.MasterBranchKey].RegularExpression; if (mainBranchRegex == null) { @@ -131,11 +131,11 @@ public IEnumerable FindMainlineBranches(GitVersionConfiguration configu } } - public IEnumerable GetReleaseBranches(IEnumerable> releaseBranchConfig) + public IEnumerable GetReleaseBranches(IEnumerable> releaseBranchConfig) => this.repository.Branches.Where(b => IsReleaseBranch(b, releaseBranchConfig)); - private static bool IsReleaseBranch(INamedReference branch, IEnumerable> releaseBranchConfig) - => releaseBranchConfig.Any(c => c.Value.Regex != null && Regex.IsMatch(branch.Name.WithoutOrigin, c.Value.Regex)); + private static bool IsReleaseBranch(INamedReference branch, IEnumerable> releaseBranchConfig) + => releaseBranchConfig.Any(c => c.Value.RegularExpression != null && Regex.IsMatch(branch.Name.WithoutOrigin, c.Value.RegularExpression)); public IEnumerable ExcludingBranches(IEnumerable branchesToExclude) => this.repository.Branches.ExcludeBranches(branchesToExclude); diff --git a/src/GitVersion.Core/Core/SourceBranchFinder.cs b/src/GitVersion.Core/Core/SourceBranchFinder.cs index 3d58c86f39..df2e6984cd 100644 --- a/src/GitVersion.Core/Core/SourceBranchFinder.cs +++ b/src/GitVersion.Core/Core/SourceBranchFinder.cs @@ -54,7 +54,7 @@ private static IEnumerable GetSourceBranchRegexes(INamedReference branch var branches = configuration.Branches; foreach (var sourceBranch in currentBranchConfig.SourceBranches) { - var regex = branches[sourceBranch].Regex; + var regex = branches[sourceBranch].RegularExpression; if (regex != null) yield return regex; } diff --git a/src/GitVersion.Core/PublicAPI.Unshipped.txt b/src/GitVersion.Core/PublicAPI.Unshipped.txt index f8e7fcb43d..21cba8482f 100644 --- a/src/GitVersion.Core/PublicAPI.Unshipped.txt +++ b/src/GitVersion.Core/PublicAPI.Unshipped.txt @@ -86,7 +86,7 @@ GitVersion.Common.IRepositoryStore.GetMainlineBranches(GitVersion.ICommit! commi GitVersion.Common.IRepositoryStore.GetMainlineCommitLog(GitVersion.ICommit? baseVersionSource, GitVersion.ICommit? mainlineTip) -> System.Collections.Generic.IEnumerable! GitVersion.Common.IRepositoryStore.GetMergeBaseCommits(GitVersion.ICommit? mergeCommit, GitVersion.ICommit? mergedHead, GitVersion.ICommit? findMergeBase) -> System.Collections.Generic.IEnumerable! GitVersion.Common.IRepositoryStore.GetNumberOfUncommittedChanges() -> int -GitVersion.Common.IRepositoryStore.GetReleaseBranches(System.Collections.Generic.IEnumerable>! releaseBranchConfig) -> System.Collections.Generic.IEnumerable! +GitVersion.Common.IRepositoryStore.GetReleaseBranches(System.Collections.Generic.IEnumerable>! releaseBranchConfig) -> System.Collections.Generic.IEnumerable! GitVersion.Common.IRepositoryStore.GetSemanticVersionFromTags(string? tagPrefixRegex, GitVersion.SemanticVersionFormat semanticVersionFormat) -> System.Collections.Generic.IEnumerable! GitVersion.Common.IRepositoryStore.GetSourceBranches(GitVersion.IBranch! branch, GitVersion.Configuration.GitVersionConfiguration! configuration, System.Collections.Generic.IEnumerable! excludedBranches) -> System.Collections.Generic.IEnumerable! GitVersion.Common.IRepositoryStore.GetSourceBranches(GitVersion.IBranch! branch, GitVersion.Configuration.GitVersionConfiguration! configuration, params GitVersion.IBranch![]! excludedBranches) -> System.Collections.Generic.IEnumerable! @@ -103,7 +103,7 @@ GitVersion.Configuration.BranchConfiguration.Label.get -> string? GitVersion.Configuration.BranchConfiguration.LabelNumberPattern.get -> string? GitVersion.Configuration.BranchConfiguration.PreReleaseWeight.get -> int? GitVersion.Configuration.BranchConfiguration.PreventIncrementOfMergedBranchVersion.get -> bool? -GitVersion.Configuration.BranchConfiguration.Regex.get -> string? +GitVersion.Configuration.BranchConfiguration.RegularExpression.get -> string? GitVersion.Configuration.BranchConfiguration.SourceBranches.get -> System.Collections.Generic.HashSet! GitVersion.Configuration.BranchConfiguration.TrackMergeMessage.get -> bool? GitVersion.Configuration.BranchConfiguration.TrackMergeTarget.get -> bool? @@ -146,7 +146,7 @@ GitVersion.Configuration.EffectiveConfiguration.AssemblyVersioningScheme.get -> GitVersion.Configuration.EffectiveConfiguration.BranchPrefixToTrim.get -> string? GitVersion.Configuration.EffectiveConfiguration.CommitDateFormat.get -> string? GitVersion.Configuration.EffectiveConfiguration.CommitMessageIncrementing.get -> GitVersion.VersionCalculation.CommitMessageIncrementMode -GitVersion.Configuration.EffectiveConfiguration.EffectiveConfiguration(GitVersion.Configuration.GitVersionConfiguration! configuration, GitVersion.Configuration.BranchConfiguration! branchConfiguration) -> void +GitVersion.Configuration.EffectiveConfiguration.EffectiveConfiguration(GitVersion.Configuration.GitVersionConfiguration! configuration, GitVersion.Configuration.IBranchConfiguration! branchConfiguration) -> void 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! versionFilters, bool tracksReleaseBranches, bool isReleaseBranch, bool isMainline, string? commitDateFormat, bool updateBuildNumber, GitVersion.SemanticVersionFormat semanticVersionFormat, int preReleaseWeight, int labelPreReleaseWeight) -> void GitVersion.Configuration.EffectiveConfiguration.Increment.get -> GitVersion.IncrementStrategy GitVersion.Configuration.EffectiveConfiguration.IsMainline.get -> bool @@ -193,7 +193,7 @@ GitVersion.Configuration.GitVersionConfiguration.Workflow.get -> string? GitVersion.Configuration.IBranchConfiguration GitVersion.Configuration.IBranchConfiguration.CommitMessageIncrementing.get -> GitVersion.VersionCalculation.CommitMessageIncrementMode? GitVersion.Configuration.IBranchConfiguration.Increment.get -> GitVersion.IncrementStrategy -GitVersion.Configuration.IBranchConfiguration.Inherit(GitVersion.Configuration.BranchConfiguration! configuration) -> GitVersion.Configuration.BranchConfiguration! +GitVersion.Configuration.IBranchConfiguration.Inherit(GitVersion.Configuration.IBranchConfiguration! configuration) -> GitVersion.Configuration.IBranchConfiguration! GitVersion.Configuration.IBranchConfiguration.IsMainline.get -> bool? GitVersion.Configuration.IBranchConfiguration.IsMatch(string! branchName) -> bool GitVersion.Configuration.IBranchConfiguration.IsReleaseBranch.get -> bool? @@ -222,7 +222,7 @@ GitVersion.Configuration.IGitVersionConfiguration.AssemblyFileVersioningScheme.g GitVersion.Configuration.IGitVersionConfiguration.AssemblyInformationalFormat.get -> string? GitVersion.Configuration.IGitVersionConfiguration.AssemblyVersioningFormat.get -> string? GitVersion.Configuration.IGitVersionConfiguration.AssemblyVersioningScheme.get -> GitVersion.Extensions.AssemblyVersioningScheme? -GitVersion.Configuration.IGitVersionConfiguration.Branches.get -> System.Collections.Generic.IReadOnlyDictionary! +GitVersion.Configuration.IGitVersionConfiguration.Branches.get -> System.Collections.Generic.IReadOnlyDictionary! GitVersion.Configuration.IGitVersionConfiguration.CommitDateFormat.get -> string? GitVersion.Configuration.IGitVersionConfiguration.Ignore.get -> GitVersion.Configuration.IIgnoreConfiguration! GitVersion.Configuration.IGitVersionConfiguration.LabelPrefix.get -> string? @@ -747,7 +747,7 @@ GitVersion.RepositoryStore.GetMainlineBranches(GitVersion.ICommit! commit, GitVe GitVersion.RepositoryStore.GetMainlineCommitLog(GitVersion.ICommit? baseVersionSource, GitVersion.ICommit? mainlineTip) -> System.Collections.Generic.IEnumerable! GitVersion.RepositoryStore.GetMergeBaseCommits(GitVersion.ICommit? mergeCommit, GitVersion.ICommit? mergedHead, GitVersion.ICommit? findMergeBase) -> System.Collections.Generic.IEnumerable! GitVersion.RepositoryStore.GetNumberOfUncommittedChanges() -> int -GitVersion.RepositoryStore.GetReleaseBranches(System.Collections.Generic.IEnumerable>! releaseBranchConfig) -> System.Collections.Generic.IEnumerable! +GitVersion.RepositoryStore.GetReleaseBranches(System.Collections.Generic.IEnumerable>! releaseBranchConfig) -> System.Collections.Generic.IEnumerable! GitVersion.RepositoryStore.GetSemanticVersionFromTags(string? tagPrefixRegex, GitVersion.SemanticVersionFormat semanticVersionFormat) -> System.Collections.Generic.IEnumerable! GitVersion.RepositoryStore.GetSourceBranches(GitVersion.IBranch! branch, GitVersion.Configuration.GitVersionConfiguration! configuration, System.Collections.Generic.IEnumerable! excludedBranches) -> System.Collections.Generic.IEnumerable! GitVersion.RepositoryStore.GetSourceBranches(GitVersion.IBranch! branch, GitVersion.Configuration.GitVersionConfiguration! configuration, params GitVersion.IBranch![]! excludedBranches) -> System.Collections.Generic.IEnumerable! @@ -993,7 +993,7 @@ override GitVersion.Agents.LocalBuild.GenerateSetVersionMessage(GitVersion.Outpu override GitVersion.Agents.LocalBuild.IsDefault.get -> bool override GitVersion.BranchCommit.Equals(object? obj) -> bool override GitVersion.BranchCommit.GetHashCode() -> int -override GitVersion.Configuration.GitVersionConfiguration.Inherit(GitVersion.Configuration.BranchConfiguration! configuration) -> GitVersion.Configuration.BranchConfiguration! +override GitVersion.Configuration.GitVersionConfiguration.Inherit(GitVersion.Configuration.IBranchConfiguration! configuration) -> GitVersion.Configuration.IBranchConfiguration! override GitVersion.Configuration.GitVersionConfiguration.ToString() -> string! override GitVersion.Configuration.Init.EditConfigStep.DefaultResult.get -> string? override GitVersion.Configuration.Init.EditConfigStep.GetPrompt(GitVersion.Configuration.GitVersionConfiguration! configuration, string! workingDirectory) -> string! @@ -1074,12 +1074,12 @@ static GitVersion.BranchCommit.operator !=(GitVersion.BranchCommit left, GitVers static GitVersion.BranchCommit.operator ==(GitVersion.BranchCommit left, GitVersion.BranchCommit right) -> bool static GitVersion.Configuration.BranchConfigurationBuilder.New.get -> GitVersion.Configuration.BranchConfigurationBuilder! static GitVersion.Configuration.ConfigurationExtensions.FindGitDir(this string! path) -> (string! GitDirectory, string! WorkingTreeDirectory)? -static GitVersion.Configuration.ConfigurationExtensions.GetBranchConfiguration(this GitVersion.Configuration.GitVersionConfiguration! configuration, GitVersion.IBranch! branch) -> GitVersion.Configuration.BranchConfiguration! -static GitVersion.Configuration.ConfigurationExtensions.GetBranchConfiguration(this GitVersion.Configuration.GitVersionConfiguration! configuration, GitVersion.ReferenceName! branchName) -> GitVersion.Configuration.BranchConfiguration! +static GitVersion.Configuration.ConfigurationExtensions.GetBranchConfiguration(this GitVersion.Configuration.GitVersionConfiguration! configuration, GitVersion.IBranch! branch) -> GitVersion.Configuration.IBranchConfiguration! +static GitVersion.Configuration.ConfigurationExtensions.GetBranchConfiguration(this GitVersion.Configuration.GitVersionConfiguration! configuration, GitVersion.ReferenceName! branchName) -> GitVersion.Configuration.IBranchConfiguration! static GitVersion.Configuration.ConfigurationExtensions.GetBranchSpecificTag(this GitVersion.Configuration.EffectiveConfiguration! configuration, GitVersion.Logging.ILog! log, string? branchFriendlyName, string? branchNameOverride) -> string! static GitVersion.Configuration.ConfigurationExtensions.GetEffectiveConfiguration(this GitVersion.Configuration.GitVersionConfiguration! configuration, GitVersion.IBranch! branch) -> GitVersion.Configuration.EffectiveConfiguration! static GitVersion.Configuration.ConfigurationExtensions.GetFallbackBranchConfiguration(this GitVersion.Configuration.GitVersionConfiguration! configuration) -> GitVersion.Configuration.BranchConfiguration! -static GitVersion.Configuration.ConfigurationExtensions.GetReleaseBranchConfiguration(this GitVersion.Configuration.GitVersionConfiguration! configuration) -> System.Collections.Generic.List>! +static GitVersion.Configuration.ConfigurationExtensions.GetReleaseBranchConfiguration(this GitVersion.Configuration.GitVersionConfiguration! configuration) -> System.Collections.Generic.List>! static GitVersion.Configuration.ConfigurationExtensions.IsReleaseBranch(this GitVersion.Configuration.GitVersionConfiguration! configuration, GitVersion.IBranch! branch) -> bool static GitVersion.Configuration.ConfigurationExtensions.IsReleaseBranch(this GitVersion.Configuration.GitVersionConfiguration! configuration, GitVersion.ReferenceName! branchName) -> bool static GitVersion.Configuration.ConfigurationSerializer.Deserialize(string! input) -> T @@ -1203,9 +1203,9 @@ virtual GitVersion.Agents.BuildAgentBase.IsDefault.get -> bool virtual GitVersion.Agents.BuildAgentBase.PreventFetch() -> bool virtual GitVersion.Agents.BuildAgentBase.ShouldCleanUpRemotes() -> bool virtual GitVersion.Agents.BuildAgentBase.WriteIntegration(System.Action! writer, GitVersion.OutputVariables.VersionVariables! variables, bool updateBuildNumber = true) -> void -virtual GitVersion.Configuration.BranchConfiguration.Inherit(GitVersion.Configuration.BranchConfiguration! configuration) -> GitVersion.Configuration.BranchConfiguration! +virtual GitVersion.Configuration.BranchConfiguration.Inherit(GitVersion.Configuration.IBranchConfiguration! configuration) -> GitVersion.Configuration.IBranchConfiguration! virtual GitVersion.Configuration.BranchConfigurationBuilder.WithCommitMessageIncrementing(GitVersion.VersionCalculation.CommitMessageIncrementMode? value) -> GitVersion.Configuration.BranchConfigurationBuilder! -virtual GitVersion.Configuration.BranchConfigurationBuilder.WithConfiguration(GitVersion.Configuration.BranchConfiguration! value) -> GitVersion.Configuration.BranchConfigurationBuilder! +virtual GitVersion.Configuration.BranchConfigurationBuilder.WithConfiguration(GitVersion.Configuration.IBranchConfiguration! value) -> GitVersion.Configuration.BranchConfigurationBuilder! virtual GitVersion.Configuration.BranchConfigurationBuilder.WithIncrement(GitVersion.IncrementStrategy value) -> GitVersion.Configuration.BranchConfigurationBuilder! virtual GitVersion.Configuration.BranchConfigurationBuilder.WithIsMainline(bool? value) -> GitVersion.Configuration.BranchConfigurationBuilder! virtual GitVersion.Configuration.BranchConfigurationBuilder.WithIsReleaseBranch(bool? value) -> GitVersion.Configuration.BranchConfigurationBuilder! @@ -1215,7 +1215,7 @@ virtual GitVersion.Configuration.BranchConfigurationBuilder.WithLabel(string? va virtual GitVersion.Configuration.BranchConfigurationBuilder.WithLabelNumberPattern(string? value) -> GitVersion.Configuration.BranchConfigurationBuilder! virtual GitVersion.Configuration.BranchConfigurationBuilder.WithPreReleaseWeight(int? value) -> GitVersion.Configuration.BranchConfigurationBuilder! virtual GitVersion.Configuration.BranchConfigurationBuilder.WithPreventIncrementOfMergedBranchVersion(bool? value) -> GitVersion.Configuration.BranchConfigurationBuilder! -virtual GitVersion.Configuration.BranchConfigurationBuilder.WithRegex(string? value) -> GitVersion.Configuration.BranchConfigurationBuilder! +virtual GitVersion.Configuration.BranchConfigurationBuilder.WithRegularExpression(string? value) -> GitVersion.Configuration.BranchConfigurationBuilder! virtual GitVersion.Configuration.BranchConfigurationBuilder.WithSourceBranches(params string![]! values) -> GitVersion.Configuration.BranchConfigurationBuilder! virtual GitVersion.Configuration.BranchConfigurationBuilder.WithSourceBranches(System.Collections.Generic.IEnumerable! values) -> GitVersion.Configuration.BranchConfigurationBuilder! virtual GitVersion.Configuration.BranchConfigurationBuilder.WithTrackMergeMessage(bool? value) -> GitVersion.Configuration.BranchConfigurationBuilder! diff --git a/src/GitVersion.Core/VersionCalculation/EffectiveBranchConfigurationFinder.cs b/src/GitVersion.Core/VersionCalculation/EffectiveBranchConfigurationFinder.cs index 0ad2e3ebe6..a17685d171 100644 --- a/src/GitVersion.Core/VersionCalculation/EffectiveBranchConfigurationFinder.cs +++ b/src/GitVersion.Core/VersionCalculation/EffectiveBranchConfigurationFinder.cs @@ -25,7 +25,7 @@ public virtual IEnumerable GetConfigurations(IBran } private IEnumerable GetEffectiveConfigurationsRecursive( - IBranch branch, GitVersionConfiguration configuration, BranchConfiguration? childBranchConfiguration, HashSet traversedBranches) + IBranch branch, GitVersionConfiguration configuration, IBranchConfiguration? childBranchConfiguration, HashSet traversedBranches) { if (!traversedBranches.Add(branch)) yield break; // This should never happen!! But it is good to have a circuit breaker. diff --git a/src/GitVersion.Core/VersionCalculation/IncrementStrategy.cs b/src/GitVersion.Core/VersionCalculation/IncrementStrategy.cs index 5cfe27da4c..553830c3f6 100644 --- a/src/GitVersion.Core/VersionCalculation/IncrementStrategy.cs +++ b/src/GitVersion.Core/VersionCalculation/IncrementStrategy.cs @@ -9,7 +9,7 @@ public enum IncrementStrategy Minor, Patch, /// - /// Uses the , and + /// Uses the , and /// of the "parent" branch (i.e. the branch where the current branch was branched from). /// Inherit From af4eeea495c462a9cc0b5d4c1893fcd693af914c Mon Sep 17 00:00:00 2001 From: Hardy Hobeck Date: Fri, 10 Mar 2023 23:14:56 +0100 Subject: [PATCH 3/7] Change the usage of GitVersionConfiguration to IGitVersionConfiguration where possible. --- .../ConfigurationProviderTests.cs | 2 +- .../Configuration/IgnoreConfigurationTests.cs | 2 +- .../Extensions/GitToolsTestingExtensions.cs | 12 ++-- .../NextVersionCalculatorTests.cs | 4 +- .../Abstractions/IConfigurationProvider.cs | 2 +- .../Configuration/ConfigurationBuilderBase.cs | 2 +- .../Configuration/ConfigurationExtensions.cs | 20 +++--- .../Configuration/ConfigurationFileLocator.cs | 2 +- .../Configuration/ConfigurationHelper.cs | 12 ++-- .../Configuration/ConfigurationProvider.cs | 6 +- .../Configuration/ConfigurationSerializer.cs | 2 +- .../Configuration/EffectiveConfiguration.cs | 2 +- .../Configuration/IIgnoreConfiguration.cs | 10 +++ .../Configuration/IgnoreConfiguration.cs | 10 --- .../Core/Abstractions/IRepositoryStore.cs | 16 ++--- .../Core/MainlineBranchFinder.cs | 10 +-- src/GitVersion.Core/Core/MergeCommitFinder.cs | 4 +- src/GitVersion.Core/Core/RepositoryStore.cs | 18 ++--- .../Core/SourceBranchFinder.cs | 8 +-- src/GitVersion.Core/GitVersionContext.cs | 4 +- src/GitVersion.Core/MergeMessage.cs | 2 +- src/GitVersion.Core/PublicAPI.Unshipped.txt | 72 +++++++++---------- .../Abstractions/IIncrementStrategyFinder.cs | 2 +- .../EffectiveBranchConfigurationFinder.cs | 4 +- .../IEffectiveBranchConfigurationFinder.cs | 2 +- .../IncrementStrategyFinder.cs | 2 +- .../NextVersionCalculator.cs | 6 +- 27 files changed, 122 insertions(+), 116 deletions(-) diff --git a/src/GitVersion.Core.Tests/Configuration/ConfigurationProviderTests.cs b/src/GitVersion.Core.Tests/Configuration/ConfigurationProviderTests.cs index 63ae7cb16a..1fe0cfc46c 100644 --- a/src/GitVersion.Core.Tests/Configuration/ConfigurationProviderTests.cs +++ b/src/GitVersion.Core.Tests/Configuration/ConfigurationProviderTests.cs @@ -164,7 +164,7 @@ public void CanWriteOutEffectiveConfiguration() { var configuration = this.configurationProvider.ProvideForDirectory(this.repoPath); - configuration.ToString().ShouldMatchApproved(); + configuration.ToString()!.ShouldMatchApproved(); } [Test] diff --git a/src/GitVersion.Core.Tests/Configuration/IgnoreConfigurationTests.cs b/src/GitVersion.Core.Tests/Configuration/IgnoreConfigurationTests.cs index 16f9ceb35a..68a3160ae7 100644 --- a/src/GitVersion.Core.Tests/Configuration/IgnoreConfigurationTests.cs +++ b/src/GitVersion.Core.Tests/Configuration/IgnoreConfigurationTests.cs @@ -73,7 +73,7 @@ public void WhenBadDateFormatShouldFail() [Test] public void NewInstanceShouldBeEmpty() { - var ignoreConfig = new IgnoreConfiguration(); + IIgnoreConfiguration ignoreConfig = new IgnoreConfiguration(); ignoreConfig.IsEmpty.ShouldBeTrue(); } diff --git a/src/GitVersion.Core.Tests/Extensions/GitToolsTestingExtensions.cs b/src/GitVersion.Core.Tests/Extensions/GitToolsTestingExtensions.cs index 633e95ac74..e0878ced0b 100644 --- a/src/GitVersion.Core.Tests/Extensions/GitToolsTestingExtensions.cs +++ b/src/GitVersion.Core.Tests/Extensions/GitToolsTestingExtensions.cs @@ -49,11 +49,14 @@ public static IBranch FindBranch(this IGitRepository repository, string branchNa => repository.Branches.FirstOrDefault(branch => branch.Name.WithoutOrigin == branchName) ?? throw new GitVersionException($"Branch {branchName} not found"); - public static void DumpGraph(this IGitRepository repository, Action? writer = null, int? maxCommits = null) => GitExtensions.DumpGraph(repository.Path, writer, maxCommits); + public static void DumpGraph(this IGitRepository repository, Action? writer = null, int? maxCommits = null) + => GitExtensions.DumpGraph(repository.Path, writer, maxCommits); - public static void DumpGraph(this IRepository repository, Action? writer = null, int? maxCommits = null) => GitExtensions.DumpGraph(repository.ToGitRepository().Path, writer, maxCommits); + public static void DumpGraph(this IRepository repository, Action? writer = null, int? maxCommits = null) + => GitExtensions.DumpGraph(repository.ToGitRepository().Path, writer, maxCommits); - public static VersionVariables GetVersion(this RepositoryFixtureBase fixture, GitVersionConfiguration? configuration = null, IRepository? repository = null, string? commitId = null, bool onlyTrackedBranches = true, string? targetBranch = null) + public static VersionVariables GetVersion(this RepositoryFixtureBase fixture, IGitVersionConfiguration? configuration = null, + IRepository? repository = null, string? commitId = null, bool onlyTrackedBranches = true, string? targetBranch = null) { repository ??= fixture.Repository; configuration ??= GitFlowConfigurationBuilder.New.Build(); @@ -106,7 +109,8 @@ public static void WriteVersionVariables(this RepositoryFixtureBase fixture, str writer.Write(versionInfo.ToString()); } - public static void AssertFullSemver(this RepositoryFixtureBase fixture, string fullSemver, GitVersionConfiguration? configuration = null, IRepository? repository = null, string? commitId = null, bool onlyTrackedBranches = true, string? targetBranch = null) + public static void AssertFullSemver(this RepositoryFixtureBase fixture, string fullSemver, + IGitVersionConfiguration? configuration = null, IRepository? repository = null, string? commitId = null, bool onlyTrackedBranches = true, string? targetBranch = null) { repository ??= fixture.Repository; diff --git a/src/GitVersion.Core.Tests/VersionCalculation/NextVersionCalculatorTests.cs b/src/GitVersion.Core.Tests/VersionCalculation/NextVersionCalculatorTests.cs index 12d10635fc..97d4bf1bf3 100644 --- a/src/GitVersion.Core.Tests/VersionCalculation/NextVersionCalculatorTests.cs +++ b/src/GitVersion.Core.Tests/VersionCalculation/NextVersionCalculatorTests.cs @@ -477,11 +477,11 @@ private record TestIgnoreConfig : IgnoreConfiguration { private readonly IVersionFilter filter; - public override bool IsEmpty => false; + public virtual bool IsEmpty => false; public TestIgnoreConfig(IVersionFilter filter) => this.filter = filter; - public override IEnumerable ToFilters() + public virtual IEnumerable ToFilters() { yield return this.filter; } diff --git a/src/GitVersion.Core/Configuration/Abstractions/IConfigurationProvider.cs b/src/GitVersion.Core/Configuration/Abstractions/IConfigurationProvider.cs index 923200c42d..7d4030db4d 100644 --- a/src/GitVersion.Core/Configuration/Abstractions/IConfigurationProvider.cs +++ b/src/GitVersion.Core/Configuration/Abstractions/IConfigurationProvider.cs @@ -2,6 +2,6 @@ namespace GitVersion.Configuration; public interface IConfigurationProvider { - GitVersionConfiguration Provide(IReadOnlyDictionary? overrideConfiguration = null); + IGitVersionConfiguration Provide(IReadOnlyDictionary? overrideConfiguration = null); void Init(string workingDirectory); } diff --git a/src/GitVersion.Core/Configuration/ConfigurationBuilderBase.cs b/src/GitVersion.Core/Configuration/ConfigurationBuilderBase.cs index bce3348eb2..2bae13fd08 100644 --- a/src/GitVersion.Core/Configuration/ConfigurationBuilderBase.cs +++ b/src/GitVersion.Core/Configuration/ConfigurationBuilderBase.cs @@ -191,7 +191,7 @@ public virtual TConfigurationBuilder WithSemanticVersionFormat(SemanticVersionFo return (TConfigurationBuilder)this; } - public virtual TConfigurationBuilder WithMergeMessageFormats(Dictionary value) + public virtual TConfigurationBuilder WithMergeMessageFormats(IReadOnlyDictionary value) { this.mergeMessageFormats = new(value); return (TConfigurationBuilder)this; diff --git a/src/GitVersion.Core/Configuration/ConfigurationExtensions.cs b/src/GitVersion.Core/Configuration/ConfigurationExtensions.cs index 24af076f61..4213f88f7e 100644 --- a/src/GitVersion.Core/Configuration/ConfigurationExtensions.cs +++ b/src/GitVersion.Core/Configuration/ConfigurationExtensions.cs @@ -6,19 +6,19 @@ namespace GitVersion.Configuration; public static class ConfigurationExtensions { - public static EffectiveConfiguration GetEffectiveConfiguration(this GitVersionConfiguration configuration, IBranch branch) + public static EffectiveConfiguration GetEffectiveConfiguration(this IGitVersionConfiguration configuration, IBranch branch) => GetEffectiveConfiguration(configuration, branch.NotNull().Name); - private static EffectiveConfiguration GetEffectiveConfiguration(this GitVersionConfiguration configuration, ReferenceName branchName) + private static EffectiveConfiguration GetEffectiveConfiguration(this IGitVersionConfiguration configuration, ReferenceName branchName) { IBranchConfiguration branchConfiguration = configuration.GetBranchConfiguration(branchName); return new EffectiveConfiguration(configuration, branchConfiguration); } - public static IBranchConfiguration GetBranchConfiguration(this GitVersionConfiguration configuration, IBranch branch) + public static IBranchConfiguration GetBranchConfiguration(this IGitVersionConfiguration configuration, IBranch branch) => GetBranchConfiguration(configuration, branch.NotNull().Name); - public static IBranchConfiguration GetBranchConfiguration(this GitVersionConfiguration configuration, ReferenceName branchName) + public static IBranchConfiguration GetBranchConfiguration(this IGitVersionConfiguration configuration, ReferenceName branchName) { var branchConfiguration = GetBranchConfigurations(configuration, branchName.WithoutOrigin).FirstOrDefault(); branchConfiguration ??= new BranchConfiguration() @@ -30,7 +30,7 @@ public static IBranchConfiguration GetBranchConfiguration(this GitVersionConfigu return branchConfiguration; } - private static IEnumerable GetBranchConfigurations(GitVersionConfiguration configuration, string branchName) + private static IEnumerable GetBranchConfigurations(IGitVersionConfiguration configuration, string branchName) { IBranchConfiguration? unknownBranchConfiguration = null; foreach ((string key, IBranchConfiguration branchConfiguration) in configuration.Branches) @@ -51,12 +51,12 @@ private static IEnumerable GetBranchConfigurations(GitVers if (unknownBranchConfiguration != null) yield return unknownBranchConfiguration; } - public static BranchConfiguration GetFallbackBranchConfiguration(this GitVersionConfiguration configuration) => configuration; + public static IBranchConfiguration GetFallbackBranchConfiguration(this IGitVersionConfiguration configuration) => configuration; - public static bool IsReleaseBranch(this GitVersionConfiguration configuration, IBranch branch) + public static bool IsReleaseBranch(this IGitVersionConfiguration configuration, IBranch branch) => IsReleaseBranch(configuration, branch.NotNull().Name); - public static bool IsReleaseBranch(this GitVersionConfiguration configuration, ReferenceName branchName) + public static bool IsReleaseBranch(this IGitVersionConfiguration configuration, ReferenceName branchName) => configuration.GetBranchConfiguration(branchName).IsReleaseBranch ?? false; public static string GetBranchSpecificTag(this EffectiveConfiguration configuration, ILog log, string? branchFriendlyName, @@ -129,6 +129,6 @@ public static (string GitDirectory, string WorkingTreeDirectory)? FindGitDir(thi return null; } - public static List> GetReleaseBranchConfiguration(this GitVersionConfiguration configuration) => - ((IGitVersionConfiguration)configuration).Branches.Where(b => b.Value.IsReleaseBranch == true).ToList(); + public static List> GetReleaseBranchConfiguration(this IGitVersionConfiguration configuration) => + configuration.Branches.Where(b => b.Value.IsReleaseBranch == true).ToList(); } diff --git a/src/GitVersion.Core/Configuration/ConfigurationFileLocator.cs b/src/GitVersion.Core/Configuration/ConfigurationFileLocator.cs index f5c5cbf5ec..3d4da2794d 100644 --- a/src/GitVersion.Core/Configuration/ConfigurationFileLocator.cs +++ b/src/GitVersion.Core/Configuration/ConfigurationFileLocator.cs @@ -70,7 +70,7 @@ bool HasConfigurationFileAt(string fileName, out string? configFile) || HasConfigurationFileAt(DefaultAlternativeFileName, out path); } - private static void VerifyReadConfig(GitVersionConfiguration configuration) + private static void VerifyReadConfig(IGitVersionConfiguration configuration) { // Verify no branches are set to mainline mode if (configuration.Branches.Any(b => b.Value.VersioningMode == VersioningMode.Mainline)) diff --git a/src/GitVersion.Core/Configuration/ConfigurationHelper.cs b/src/GitVersion.Core/Configuration/ConfigurationHelper.cs index 9c1c8190ff..65f74b8a0d 100644 --- a/src/GitVersion.Core/Configuration/ConfigurationHelper.cs +++ b/src/GitVersion.Core/Configuration/ConfigurationHelper.cs @@ -5,7 +5,7 @@ namespace GitVersion.Configuration; internal class ConfigurationHelper { private string Yaml => this._yaml ??= this._dictionary == null - ? ConfigurationSerializer.Serialize(this._configuration!) + ? ConfigurationSerializer.Serialize(this.configuration!) : ConfigurationSerializer.Serialize(this._dictionary); private string? _yaml; @@ -15,7 +15,7 @@ internal class ConfigurationHelper { if (this._dictionary == null) { - this._yaml ??= ConfigurationSerializer.Serialize(this._configuration!); + this._yaml ??= ConfigurationSerializer.Serialize(this.configuration!); this._dictionary = ConfigurationSerializer.Deserialize>(this._yaml!); } return this._dictionary; @@ -23,14 +23,14 @@ internal class ConfigurationHelper } private IReadOnlyDictionary? _dictionary; - public GitVersionConfiguration Configuration => this._configuration ??= ConfigurationSerializer.Deserialize(Yaml); - private GitVersionConfiguration? _configuration; + public GitVersionConfiguration Configuration => this.configuration ??= ConfigurationSerializer.Deserialize(Yaml); + private GitVersionConfiguration? configuration; internal ConfigurationHelper(string yaml) => this._yaml = yaml.NotNull(); internal ConfigurationHelper(IReadOnlyDictionary dictionary) => this._dictionary = dictionary.NotNull(); - public ConfigurationHelper(GitVersionConfiguration configuration) => this._configuration = configuration.NotNull(); + public ConfigurationHelper(GitVersionConfiguration configuration) => this.configuration = configuration.NotNull(); public void Override(IReadOnlyDictionary value) { @@ -42,7 +42,7 @@ public void Override(IReadOnlyDictionary value) Merge(dictionary, value); this._dictionary = dictionary; this._yaml = null; - this._configuration = null; + this.configuration = null; } } diff --git a/src/GitVersion.Core/Configuration/ConfigurationProvider.cs b/src/GitVersion.Core/Configuration/ConfigurationProvider.cs index 20dbe044ad..6e09d050ca 100644 --- a/src/GitVersion.Core/Configuration/ConfigurationProvider.cs +++ b/src/GitVersion.Core/Configuration/ConfigurationProvider.cs @@ -26,7 +26,7 @@ public ConfigurationProvider(IFileSystem fileSystem, ILog log, IConfigurationFil this.configInitWizard = configInitWizard.NotNull(); } - public GitVersionConfiguration Provide(IReadOnlyDictionary? overrideConfiguration) + public IGitVersionConfiguration Provide(IReadOnlyDictionary? overrideConfiguration) { var gitVersionOptions = this.options.Value; var workingDirectory = gitVersionOptions.WorkingDirectory; @@ -54,14 +54,14 @@ public void Init(string workingDirectory) stream.Flush(); } - internal GitVersionConfiguration ProvideForDirectory(string? workingDirectory, + internal IGitVersionConfiguration ProvideForDirectory(string? workingDirectory, IReadOnlyDictionary? overrideConfiguration = null) { this.configFileLocator.TryGetConfigurationFile(workingDirectory, null, out var configFilePath); return ProvideConfiguration(configFilePath, overrideConfiguration); } - private GitVersionConfiguration ProvideConfiguration(string? configFile, + private IGitVersionConfiguration ProvideConfiguration(string? configFile, IReadOnlyDictionary? overrideConfiguration = null) { var overrideConfigurationFromFile = this.configFileLocator.ReadOverrideConfiguration(configFile); diff --git a/src/GitVersion.Core/Configuration/ConfigurationSerializer.cs b/src/GitVersion.Core/Configuration/ConfigurationSerializer.cs index f79ace5046..049d38d6c9 100644 --- a/src/GitVersion.Core/Configuration/ConfigurationSerializer.cs +++ b/src/GitVersion.Core/Configuration/ConfigurationSerializer.cs @@ -26,7 +26,7 @@ public static GitVersionConfiguration Read(TextReader reader) return configuration ?? new GitVersionConfiguration(); } - public static void Write(GitVersionConfiguration configuration, TextWriter writer) + public static void Write(IGitVersionConfiguration configuration, TextWriter writer) => Serializer.Serialize(writer, configuration); } diff --git a/src/GitVersion.Core/Configuration/EffectiveConfiguration.cs b/src/GitVersion.Core/Configuration/EffectiveConfiguration.cs index ec3b450097..341785d2ab 100644 --- a/src/GitVersion.Core/Configuration/EffectiveConfiguration.cs +++ b/src/GitVersion.Core/Configuration/EffectiveConfiguration.cs @@ -9,7 +9,7 @@ namespace GitVersion.Configuration; /// public class EffectiveConfiguration { - public EffectiveConfiguration(GitVersionConfiguration configuration, IBranchConfiguration branchConfiguration) + public EffectiveConfiguration(IGitVersionConfiguration configuration, IBranchConfiguration branchConfiguration) { configuration.NotNull(); branchConfiguration.NotNull(); diff --git a/src/GitVersion.Core/Configuration/IIgnoreConfiguration.cs b/src/GitVersion.Core/Configuration/IIgnoreConfiguration.cs index bbb7d17bc2..e6fb3215e1 100644 --- a/src/GitVersion.Core/Configuration/IIgnoreConfiguration.cs +++ b/src/GitVersion.Core/Configuration/IIgnoreConfiguration.cs @@ -1,3 +1,5 @@ +using GitVersion.VersionCalculation; + namespace GitVersion.Configuration { public interface IIgnoreConfiguration @@ -5,5 +7,13 @@ public interface IIgnoreConfiguration DateTimeOffset? Before { get; } IReadOnlyList Shas { get; } + + public IEnumerable ToFilters() + { + if (Shas.Any()) yield return new ShaVersionFilter(Shas); + if (Before.HasValue) yield return new MinDateVersionFilter(Before.Value); + } + + public bool IsEmpty => Before == null && !Shas.Any(); } } diff --git a/src/GitVersion.Core/Configuration/IgnoreConfiguration.cs b/src/GitVersion.Core/Configuration/IgnoreConfiguration.cs index a20f9da218..74edeb6b56 100644 --- a/src/GitVersion.Core/Configuration/IgnoreConfiguration.cs +++ b/src/GitVersion.Core/Configuration/IgnoreConfiguration.cs @@ -1,5 +1,4 @@ using GitVersion.Attributes; -using GitVersion.VersionCalculation; namespace GitVersion.Configuration; @@ -16,13 +15,4 @@ public record IgnoreConfiguration : IIgnoreConfiguration [JsonPropertyName("sha")] [JsonPropertyDescription("A sequence of SHAs to be excluded from the version calculations.")] public List Shas { get; init; } = new(); - - [JsonIgnore] - public virtual bool IsEmpty => Before == null && !Shas.Any(); - - public virtual IEnumerable ToFilters() - { - if (Shas.Any()) yield return new ShaVersionFilter(Shas); - if (Before.HasValue) yield return new MinDateVersionFilter(Before.Value); - } } diff --git a/src/GitVersion.Core/Core/Abstractions/IRepositoryStore.cs b/src/GitVersion.Core/Core/Abstractions/IRepositoryStore.cs index 859ff6267f..e01256f5fb 100644 --- a/src/GitVersion.Core/Core/Abstractions/IRepositoryStore.cs +++ b/src/GitVersion.Core/Core/Abstractions/IRepositoryStore.cs @@ -17,27 +17,27 @@ public interface IRepositoryStore IBranch GetTargetBranch(string? targetBranchName); IBranch? FindBranch(string? branchName); - IBranch? FindMainBranch(GitVersionConfiguration configuration); - IEnumerable FindMainlineBranches(GitVersionConfiguration configuration); + IBranch? FindMainBranch(IGitVersionConfiguration configuration); + IEnumerable FindMainlineBranches(IGitVersionConfiguration configuration); IEnumerable GetReleaseBranches(IEnumerable> releaseBranchConfig); IEnumerable ExcludingBranches(IEnumerable branchesToExclude); IEnumerable GetBranchesContainingCommit(ICommit? commit, IEnumerable? branches = null, bool onlyTrackedBranches = false); - IDictionary> GetMainlineBranches(ICommit commit, GitVersionConfiguration configuration); + IDictionary> GetMainlineBranches(ICommit commit, IGitVersionConfiguration configuration); /// /// Find the commit where the given branch was branched from another branch. /// If there are multiple such commits and branches, tries to guess based on commit histories. /// - BranchCommit FindCommitBranchWasBranchedFrom(IBranch? branch, GitVersionConfiguration configuration, params IBranch[] excludedBranches); + BranchCommit FindCommitBranchWasBranchedFrom(IBranch? branch, IGitVersionConfiguration configuration, params IBranch[] excludedBranches); - IEnumerable FindCommitBranchesWasBranchedFrom(IBranch branch, GitVersionConfiguration configuration, params IBranch[] excludedBranches); + IEnumerable FindCommitBranchesWasBranchedFrom(IBranch branch, IGitVersionConfiguration configuration, params IBranch[] excludedBranches); - IEnumerable FindCommitBranchesWasBranchedFrom(IBranch branch, GitVersionConfiguration configuration, IEnumerable excludedBranches); + IEnumerable FindCommitBranchesWasBranchedFrom(IBranch branch, IGitVersionConfiguration configuration, IEnumerable excludedBranches); - IEnumerable GetSourceBranches(IBranch branch, GitVersionConfiguration configuration, params IBranch[] excludedBranches); + IEnumerable GetSourceBranches(IBranch branch, IGitVersionConfiguration configuration, params IBranch[] excludedBranches); - IEnumerable GetSourceBranches(IBranch branch, GitVersionConfiguration configuration, IEnumerable excludedBranches); + IEnumerable GetSourceBranches(IBranch branch, IGitVersionConfiguration configuration, IEnumerable excludedBranches); SemanticVersion? GetCurrentCommitTaggedVersion(ICommit? commit, string? tagPrefix, SemanticVersionFormat versionFormat, bool handleDetachedBranch); diff --git a/src/GitVersion.Core/Core/MainlineBranchFinder.cs b/src/GitVersion.Core/Core/MainlineBranchFinder.cs index 241b2b13c5..ed4f8888bf 100644 --- a/src/GitVersion.Core/Core/MainlineBranchFinder.cs +++ b/src/GitVersion.Core/Core/MainlineBranchFinder.cs @@ -8,7 +8,7 @@ namespace GitVersion; internal class MainlineBranchFinder { - private readonly GitVersionConfiguration configuration; + private readonly IGitVersionConfiguration configuration; private readonly ILog log; private readonly List mainlineBranchConfigurations; private readonly IGitRepository repository; @@ -16,13 +16,13 @@ internal class MainlineBranchFinder public MainlineBranchFinder(IRepositoryStore repositoryStore, IGitRepository repository, - GitVersionConfiguration configuration, + IGitVersionConfiguration configuration, ILog log) { this.repositoryStore = repositoryStore.NotNull(); this.repository = repository.NotNull(); this.configuration = configuration.NotNull(); - mainlineBranchConfigurations = ((IGitVersionConfiguration)configuration).Branches.Select(e => e.Value).Where(b => b.IsMainline == true).ToList(); + mainlineBranchConfigurations = configuration.Branches.Select(e => e.Value).Where(b => b.IsMainline == true).ToList(); this.log = log.NotNull(); } @@ -70,11 +70,11 @@ public bool IsMainline(IBranchConfiguration value) private class BranchOriginFinder { private readonly ICommit commit; - private readonly GitVersionConfiguration configuration; + private readonly IGitVersionConfiguration configuration; private readonly ILog log; private readonly IRepositoryStore repositoryStore; - public BranchOriginFinder(ICommit commit, IRepositoryStore repositoryStore, GitVersionConfiguration configuration, ILog log) + public BranchOriginFinder(ICommit commit, IRepositoryStore repositoryStore, IGitVersionConfiguration configuration, ILog log) { this.repositoryStore = repositoryStore; this.commit = commit; diff --git a/src/GitVersion.Core/Core/MergeCommitFinder.cs b/src/GitVersion.Core/Core/MergeCommitFinder.cs index d67043bd89..56b8bce375 100644 --- a/src/GitVersion.Core/Core/MergeCommitFinder.cs +++ b/src/GitVersion.Core/Core/MergeCommitFinder.cs @@ -10,9 +10,9 @@ internal class MergeCommitFinder private readonly ILog log; private readonly Dictionary> mergeBaseCommitsCache = new(); private readonly RepositoryStore repositoryStore; - private readonly GitVersionConfiguration configuration; + private readonly IGitVersionConfiguration configuration; - public MergeCommitFinder(RepositoryStore repositoryStore, GitVersionConfiguration configuration, IEnumerable excludedBranches, ILog log) + public MergeCommitFinder(RepositoryStore repositoryStore, IGitVersionConfiguration configuration, IEnumerable excludedBranches, ILog log) { this.repositoryStore = repositoryStore.NotNull(); this.configuration = configuration.NotNull(); diff --git a/src/GitVersion.Core/Core/RepositoryStore.cs b/src/GitVersion.Core/Core/RepositoryStore.cs index aa192ffc1e..b6e6d8db5f 100644 --- a/src/GitVersion.Core/Core/RepositoryStore.cs +++ b/src/GitVersion.Core/Core/RepositoryStore.cs @@ -102,7 +102,7 @@ public IBranch GetTargetBranch(string? targetBranchName) public IBranch? FindBranch(string? branchName) => this.repository.Branches.FirstOrDefault(x => x.Name.EquivalentTo(branchName)); - public IBranch? FindMainBranch(GitVersionConfiguration configuration) + public IBranch? FindMainBranch(IGitVersionConfiguration configuration) { var branches = configuration.Branches; var mainBranchRegex = branches[ConfigurationConstants.MainBranchKey].RegularExpression @@ -117,7 +117,7 @@ public IBranch GetTargetBranch(string? targetBranchName) Regex.IsMatch(b.Name.WithoutOrigin, mainBranchRegex, RegexOptions.IgnoreCase)); } - public IEnumerable FindMainlineBranches(GitVersionConfiguration configuration) + public IEnumerable FindMainlineBranches(IGitVersionConfiguration configuration) { configuration.NotNull(); @@ -145,16 +145,17 @@ public IEnumerable GetBranchesContainingCommit(ICommit? commit, IEnumer return branchesContainingCommitFinder.GetBranchesContainingCommit(commit, branches, onlyTrackedBranches); } - public IDictionary> GetMainlineBranches(ICommit commit, GitVersionConfiguration configuration) + public IDictionary> GetMainlineBranches(ICommit commit, IGitVersionConfiguration configuration) { var mainlineBranchFinder = new MainlineBranchFinder(this, this.repository, configuration, this.log); return mainlineBranchFinder.FindMainlineBranches(commit); } - public IEnumerable GetSourceBranches(IBranch branch, GitVersionConfiguration configuration, params IBranch[] excludedBranches) + public IEnumerable GetSourceBranches(IBranch branch, IGitVersionConfiguration configuration, + params IBranch[] excludedBranches) => GetSourceBranches(branch, configuration, (IEnumerable)excludedBranches); - public IEnumerable GetSourceBranches(IBranch branch, GitVersionConfiguration configuration, IEnumerable excludedBranches) + public IEnumerable GetSourceBranches(IBranch branch, IGitVersionConfiguration configuration, IEnumerable excludedBranches) { var returnedBranches = new HashSet(); @@ -189,7 +190,8 @@ public IEnumerable GetSourceBranches(IBranch branch, GitVersionConfigur /// Find the commit where the given branch was branched from another branch. /// If there are multiple such commits and branches, tries to guess based on commit histories. /// - public BranchCommit FindCommitBranchWasBranchedFrom(IBranch? branch, GitVersionConfiguration configuration, params IBranch[] excludedBranches) + public BranchCommit FindCommitBranchWasBranchedFrom(IBranch? branch, IGitVersionConfiguration configuration, + params IBranch[] excludedBranches) { branch = branch.NotNull(); @@ -217,10 +219,10 @@ public BranchCommit FindCommitBranchWasBranchedFrom(IBranch? branch, GitVersionC } } - public IEnumerable FindCommitBranchesWasBranchedFrom(IBranch branch, GitVersionConfiguration configuration, params IBranch[] excludedBranches) + public IEnumerable FindCommitBranchesWasBranchedFrom(IBranch branch, IGitVersionConfiguration configuration, params IBranch[] excludedBranches) => FindCommitBranchesWasBranchedFrom(branch, configuration, (IEnumerable)excludedBranches); - public IEnumerable FindCommitBranchesWasBranchedFrom(IBranch branch, GitVersionConfiguration configuration, IEnumerable excludedBranches) + public IEnumerable FindCommitBranchesWasBranchedFrom(IBranch branch, IGitVersionConfiguration configuration, IEnumerable excludedBranches) { using (this.log.IndentLog($"Finding branches source of '{branch}'")) { diff --git a/src/GitVersion.Core/Core/SourceBranchFinder.cs b/src/GitVersion.Core/Core/SourceBranchFinder.cs index df2e6984cd..903412b5e3 100644 --- a/src/GitVersion.Core/Core/SourceBranchFinder.cs +++ b/src/GitVersion.Core/Core/SourceBranchFinder.cs @@ -6,10 +6,10 @@ namespace GitVersion; internal class SourceBranchFinder { - private readonly GitVersionConfiguration configuration; + private readonly IGitVersionConfiguration configuration; private readonly IEnumerable excludedBranches; - public SourceBranchFinder(IEnumerable excludedBranches, GitVersionConfiguration configuration) + public SourceBranchFinder(IEnumerable excludedBranches, IGitVersionConfiguration configuration) { this.excludedBranches = excludedBranches.NotNull(); this.configuration = configuration.NotNull(); @@ -26,7 +26,7 @@ private class SourceBranchPredicate private readonly IBranch branch; private readonly IEnumerable sourceBranchRegexes; - public SourceBranchPredicate(IBranch branch, GitVersionConfiguration configuration) + public SourceBranchPredicate(IBranch branch, IGitVersionConfiguration configuration) { this.branch = branch; this.sourceBranchRegexes = GetSourceBranchRegexes(branch, configuration); @@ -42,7 +42,7 @@ public bool IsSourceBranch(INamedReference sourceBranchCandidate) return this.sourceBranchRegexes.Any(regex => Regex.IsMatch(branchName, regex)); } - private static IEnumerable GetSourceBranchRegexes(INamedReference branch, GitVersionConfiguration configuration) + private static IEnumerable GetSourceBranchRegexes(INamedReference branch, IGitVersionConfiguration configuration) { var currentBranchConfig = configuration.GetBranchConfiguration(branch.Name); if (currentBranchConfig.SourceBranches == null) diff --git a/src/GitVersion.Core/GitVersionContext.cs b/src/GitVersion.Core/GitVersionContext.cs index 3700008425..c7869987b6 100644 --- a/src/GitVersion.Core/GitVersionContext.cs +++ b/src/GitVersion.Core/GitVersionContext.cs @@ -11,7 +11,7 @@ public class GitVersionContext /// /// Contains the raw configuration, use Configuration for specific configuration based on the current GitVersion context. /// - public GitVersionConfiguration Configuration { get; } + public IGitVersionConfiguration Configuration { get; } public SemanticVersion? CurrentCommitTaggedVersion { get; } @@ -24,7 +24,7 @@ public class GitVersionContext public int NumberOfUncommittedChanges { get; } public GitVersionContext(IBranch currentBranch, ICommit? currentCommit, - GitVersionConfiguration configuration, SemanticVersion? currentCommitTaggedVersion, int numberOfUncommittedChanges) + IGitVersionConfiguration configuration, SemanticVersion? currentCommitTaggedVersion, int numberOfUncommittedChanges) { CurrentBranch = currentBranch.NotNull(); CurrentCommit = currentCommit; diff --git a/src/GitVersion.Core/MergeMessage.cs b/src/GitVersion.Core/MergeMessage.cs index b84b0fd84b..5f13789565 100644 --- a/src/GitVersion.Core/MergeMessage.cs +++ b/src/GitVersion.Core/MergeMessage.cs @@ -16,7 +16,7 @@ public class MergeMessage new("RemoteTracking", @"^Merge remote-tracking branch '(?[^\s]*)'(?: into (?[^\s]*))*") }; - public MergeMessage(string mergeMessage, GitVersionConfiguration configuration) + public MergeMessage(string mergeMessage, IGitVersionConfiguration configuration) { mergeMessage.NotNull(); diff --git a/src/GitVersion.Core/PublicAPI.Unshipped.txt b/src/GitVersion.Core/PublicAPI.Unshipped.txt index 21cba8482f..3f35464a47 100644 --- a/src/GitVersion.Core/PublicAPI.Unshipped.txt +++ b/src/GitVersion.Core/PublicAPI.Unshipped.txt @@ -71,25 +71,25 @@ GitVersion.CommitSortStrategies.Topological = 1 -> GitVersion.CommitSortStrategi GitVersion.Common.IRepositoryStore GitVersion.Common.IRepositoryStore.ExcludingBranches(System.Collections.Generic.IEnumerable! branchesToExclude) -> System.Collections.Generic.IEnumerable! GitVersion.Common.IRepositoryStore.FindBranch(string? branchName) -> GitVersion.IBranch? -GitVersion.Common.IRepositoryStore.FindCommitBranchWasBranchedFrom(GitVersion.IBranch? branch, GitVersion.Configuration.GitVersionConfiguration! configuration, params GitVersion.IBranch![]! excludedBranches) -> GitVersion.BranchCommit -GitVersion.Common.IRepositoryStore.FindCommitBranchesWasBranchedFrom(GitVersion.IBranch! branch, GitVersion.Configuration.GitVersionConfiguration! configuration, System.Collections.Generic.IEnumerable! excludedBranches) -> System.Collections.Generic.IEnumerable! -GitVersion.Common.IRepositoryStore.FindCommitBranchesWasBranchedFrom(GitVersion.IBranch! branch, GitVersion.Configuration.GitVersionConfiguration! configuration, params GitVersion.IBranch![]! excludedBranches) -> System.Collections.Generic.IEnumerable! -GitVersion.Common.IRepositoryStore.FindMainBranch(GitVersion.Configuration.GitVersionConfiguration! configuration) -> GitVersion.IBranch? -GitVersion.Common.IRepositoryStore.FindMainlineBranches(GitVersion.Configuration.GitVersionConfiguration! configuration) -> System.Collections.Generic.IEnumerable! +GitVersion.Common.IRepositoryStore.FindCommitBranchesWasBranchedFrom(GitVersion.IBranch! branch, GitVersion.Configuration.IGitVersionConfiguration! configuration, params GitVersion.IBranch![]! excludedBranches) -> System.Collections.Generic.IEnumerable! +GitVersion.Common.IRepositoryStore.FindCommitBranchesWasBranchedFrom(GitVersion.IBranch! branch, GitVersion.Configuration.IGitVersionConfiguration! configuration, System.Collections.Generic.IEnumerable! excludedBranches) -> System.Collections.Generic.IEnumerable! +GitVersion.Common.IRepositoryStore.FindCommitBranchWasBranchedFrom(GitVersion.IBranch? branch, GitVersion.Configuration.IGitVersionConfiguration! configuration, params GitVersion.IBranch![]! excludedBranches) -> GitVersion.BranchCommit +GitVersion.Common.IRepositoryStore.FindMainBranch(GitVersion.Configuration.IGitVersionConfiguration! configuration) -> GitVersion.IBranch? +GitVersion.Common.IRepositoryStore.FindMainlineBranches(GitVersion.Configuration.IGitVersionConfiguration! configuration) -> System.Collections.Generic.IEnumerable! GitVersion.Common.IRepositoryStore.FindMergeBase(GitVersion.IBranch? branch, GitVersion.IBranch? otherBranch) -> GitVersion.ICommit? GitVersion.Common.IRepositoryStore.FindMergeBase(GitVersion.ICommit! commit, GitVersion.ICommit! mainlineTip) -> GitVersion.ICommit? GitVersion.Common.IRepositoryStore.GetBranchesContainingCommit(GitVersion.ICommit? commit, System.Collections.Generic.IEnumerable? branches = null, bool onlyTrackedBranches = false) -> System.Collections.Generic.IEnumerable! GitVersion.Common.IRepositoryStore.GetCommitLog(GitVersion.ICommit? baseVersionSource, GitVersion.ICommit? currentCommit) -> System.Collections.Generic.IEnumerable! GitVersion.Common.IRepositoryStore.GetCurrentCommit(GitVersion.IBranch! currentBranch, string? commitId) -> GitVersion.ICommit? GitVersion.Common.IRepositoryStore.GetCurrentCommitTaggedVersion(GitVersion.ICommit? commit, string? tagPrefix, GitVersion.SemanticVersionFormat versionFormat, bool handleDetachedBranch) -> GitVersion.SemanticVersion? -GitVersion.Common.IRepositoryStore.GetMainlineBranches(GitVersion.ICommit! commit, GitVersion.Configuration.GitVersionConfiguration! configuration) -> System.Collections.Generic.IDictionary!>! +GitVersion.Common.IRepositoryStore.GetMainlineBranches(GitVersion.ICommit! commit, GitVersion.Configuration.IGitVersionConfiguration! configuration) -> System.Collections.Generic.IDictionary!>! GitVersion.Common.IRepositoryStore.GetMainlineCommitLog(GitVersion.ICommit? baseVersionSource, GitVersion.ICommit? mainlineTip) -> System.Collections.Generic.IEnumerable! GitVersion.Common.IRepositoryStore.GetMergeBaseCommits(GitVersion.ICommit? mergeCommit, GitVersion.ICommit? mergedHead, GitVersion.ICommit? findMergeBase) -> System.Collections.Generic.IEnumerable! GitVersion.Common.IRepositoryStore.GetNumberOfUncommittedChanges() -> int GitVersion.Common.IRepositoryStore.GetReleaseBranches(System.Collections.Generic.IEnumerable>! releaseBranchConfig) -> System.Collections.Generic.IEnumerable! GitVersion.Common.IRepositoryStore.GetSemanticVersionFromTags(string? tagPrefixRegex, GitVersion.SemanticVersionFormat semanticVersionFormat) -> System.Collections.Generic.IEnumerable! -GitVersion.Common.IRepositoryStore.GetSourceBranches(GitVersion.IBranch! branch, GitVersion.Configuration.GitVersionConfiguration! configuration, System.Collections.Generic.IEnumerable! excludedBranches) -> System.Collections.Generic.IEnumerable! -GitVersion.Common.IRepositoryStore.GetSourceBranches(GitVersion.IBranch! branch, GitVersion.Configuration.GitVersionConfiguration! configuration, params GitVersion.IBranch![]! excludedBranches) -> System.Collections.Generic.IEnumerable! +GitVersion.Common.IRepositoryStore.GetSourceBranches(GitVersion.IBranch! branch, GitVersion.Configuration.IGitVersionConfiguration! configuration, params GitVersion.IBranch![]! excludedBranches) -> System.Collections.Generic.IEnumerable! +GitVersion.Common.IRepositoryStore.GetSourceBranches(GitVersion.IBranch! branch, GitVersion.Configuration.IGitVersionConfiguration! configuration, System.Collections.Generic.IEnumerable! excludedBranches) -> System.Collections.Generic.IEnumerable! GitVersion.Common.IRepositoryStore.GetTargetBranch(string? targetBranchName) -> GitVersion.IBranch! GitVersion.Common.IRepositoryStore.GetVersionTagsOnBranch(GitVersion.IBranch! branch, string? tagPrefixRegex, GitVersion.SemanticVersionFormat versionFormat) -> System.Collections.Generic.IEnumerable! GitVersion.Common.IRepositoryStore.IsCommitOnBranch(GitVersion.ICommit? baseVersionSource, GitVersion.IBranch! branch, GitVersion.ICommit! firstMatchingCommit) -> bool @@ -130,7 +130,7 @@ GitVersion.Configuration.ConfigurationModule.RegisterTypes(Microsoft.Extensions. GitVersion.Configuration.ConfigurationProvider GitVersion.Configuration.ConfigurationProvider.ConfigurationProvider(GitVersion.IFileSystem! fileSystem, GitVersion.Logging.ILog! log, GitVersion.Configuration.IConfigurationFileLocator! configFileLocator, Microsoft.Extensions.Options.IOptions! options, GitVersion.Configuration.Init.Wizard.IConfigInitWizard! configInitWizard) -> void GitVersion.Configuration.ConfigurationProvider.Init(string! workingDirectory) -> void -GitVersion.Configuration.ConfigurationProvider.Provide(System.Collections.Generic.IReadOnlyDictionary? overrideConfiguration) -> GitVersion.Configuration.GitVersionConfiguration! +GitVersion.Configuration.ConfigurationProvider.Provide(System.Collections.Generic.IReadOnlyDictionary? overrideConfiguration) -> GitVersion.Configuration.IGitVersionConfiguration! GitVersion.Configuration.ConfigurationSerializer GitVersion.Configuration.EffectiveBranchConfiguration GitVersion.Configuration.EffectiveBranchConfiguration.Branch.get -> GitVersion.IBranch! @@ -146,7 +146,7 @@ GitVersion.Configuration.EffectiveConfiguration.AssemblyVersioningScheme.get -> GitVersion.Configuration.EffectiveConfiguration.BranchPrefixToTrim.get -> string? GitVersion.Configuration.EffectiveConfiguration.CommitDateFormat.get -> string? GitVersion.Configuration.EffectiveConfiguration.CommitMessageIncrementing.get -> GitVersion.VersionCalculation.CommitMessageIncrementMode -GitVersion.Configuration.EffectiveConfiguration.EffectiveConfiguration(GitVersion.Configuration.GitVersionConfiguration! configuration, GitVersion.Configuration.IBranchConfiguration! branchConfiguration) -> void +GitVersion.Configuration.EffectiveConfiguration.EffectiveConfiguration(GitVersion.Configuration.IGitVersionConfiguration! configuration, GitVersion.Configuration.IBranchConfiguration! branchConfiguration) -> void 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! versionFilters, bool tracksReleaseBranches, bool isReleaseBranch, bool isMainline, string? commitDateFormat, bool updateBuildNumber, GitVersion.SemanticVersionFormat semanticVersionFormat, int preReleaseWeight, int labelPreReleaseWeight) -> void GitVersion.Configuration.EffectiveConfiguration.Increment.get -> GitVersion.IncrementStrategy GitVersion.Configuration.EffectiveConfiguration.IsMainline.get -> bool @@ -215,7 +215,7 @@ GitVersion.Configuration.IConfigurationFileLocator.TryGetConfigurationFile(strin GitVersion.Configuration.IConfigurationFileLocator.Verify(string? workingDirectory, string? projectRootDirectory) -> void GitVersion.Configuration.IConfigurationProvider GitVersion.Configuration.IConfigurationProvider.Init(string! workingDirectory) -> void -GitVersion.Configuration.IConfigurationProvider.Provide(System.Collections.Generic.IReadOnlyDictionary? overrideConfiguration = null) -> GitVersion.Configuration.GitVersionConfiguration! +GitVersion.Configuration.IConfigurationProvider.Provide(System.Collections.Generic.IReadOnlyDictionary? overrideConfiguration = null) -> GitVersion.Configuration.IGitVersionConfiguration! GitVersion.Configuration.IGitVersionConfiguration GitVersion.Configuration.IGitVersionConfiguration.AssemblyFileVersioningFormat.get -> string? GitVersion.Configuration.IGitVersionConfiguration.AssemblyFileVersioningScheme.get -> GitVersion.Extensions.AssemblyFileVersioningScheme? @@ -243,7 +243,9 @@ GitVersion.Configuration.IgnoreConfiguration.Shas.get -> System.Collections.Gene GitVersion.Configuration.IgnoreConfiguration.Shas.init -> void GitVersion.Configuration.IIgnoreConfiguration GitVersion.Configuration.IIgnoreConfiguration.Before.get -> System.DateTimeOffset? +GitVersion.Configuration.IIgnoreConfiguration.IsEmpty.get -> bool GitVersion.Configuration.IIgnoreConfiguration.Shas.get -> System.Collections.Generic.IReadOnlyList! +GitVersion.Configuration.IIgnoreConfiguration.ToFilters() -> System.Collections.Generic.IEnumerable! GitVersion.Configuration.Init.EditConfigStep GitVersion.Configuration.Init.EditConfigStep.EditConfigStep(GitVersion.Logging.IConsole! console, GitVersion.IFileSystem! fileSystem, GitVersion.Logging.ILog! log, GitVersion.Configuration.Init.Wizard.IConfigInitStepFactory! stepFactory) -> void GitVersion.Configuration.Init.GitVersionInitModule @@ -365,11 +367,11 @@ GitVersion.GitVersionCommonModule GitVersion.GitVersionCommonModule.GitVersionCommonModule() -> void GitVersion.GitVersionCommonModule.RegisterTypes(Microsoft.Extensions.DependencyInjection.IServiceCollection! services) -> void GitVersion.GitVersionContext -GitVersion.GitVersionContext.Configuration.get -> GitVersion.Configuration.GitVersionConfiguration! +GitVersion.GitVersionContext.Configuration.get -> GitVersion.Configuration.IGitVersionConfiguration! GitVersion.GitVersionContext.CurrentBranch.get -> GitVersion.IBranch! GitVersion.GitVersionContext.CurrentCommit.get -> GitVersion.ICommit? GitVersion.GitVersionContext.CurrentCommitTaggedVersion.get -> GitVersion.SemanticVersion? -GitVersion.GitVersionContext.GitVersionContext(GitVersion.IBranch! currentBranch, GitVersion.ICommit? currentCommit, GitVersion.Configuration.GitVersionConfiguration! configuration, GitVersion.SemanticVersion? currentCommitTaggedVersion, int numberOfUncommittedChanges) -> void +GitVersion.GitVersionContext.GitVersionContext(GitVersion.IBranch! currentBranch, GitVersion.ICommit? currentCommit, GitVersion.Configuration.IGitVersionConfiguration! configuration, GitVersion.SemanticVersion? currentCommitTaggedVersion, int numberOfUncommittedChanges) -> void GitVersion.GitVersionContext.IsCurrentCommitTagged.get -> bool GitVersion.GitVersionContext.NumberOfUncommittedChanges.get -> int GitVersion.GitVersionContextFactory @@ -612,8 +614,8 @@ GitVersion.Logging.Verbosity.Verbose = 3 -> GitVersion.Logging.Verbosity GitVersion.MergeMessage GitVersion.MergeMessage.FormatName.get -> string? GitVersion.MergeMessage.IsMergedPullRequest.get -> bool -GitVersion.MergeMessage.MergeMessage(string! mergeMessage, GitVersion.Configuration.GitVersionConfiguration! configuration) -> void GitVersion.MergeMessage.MergedBranch.get -> GitVersion.ReferenceName? +GitVersion.MergeMessage.MergeMessage(string! mergeMessage, GitVersion.Configuration.IGitVersionConfiguration! configuration) -> void GitVersion.MergeMessage.PullRequestNumber.get -> int? GitVersion.MergeMessage.TargetBranch.get -> string? GitVersion.MergeMessage.Version.get -> GitVersion.SemanticVersion? @@ -732,25 +734,25 @@ GitVersion.RepositoryInfo.TargetUrl -> string? GitVersion.RepositoryStore GitVersion.RepositoryStore.ExcludingBranches(System.Collections.Generic.IEnumerable! branchesToExclude) -> System.Collections.Generic.IEnumerable! GitVersion.RepositoryStore.FindBranch(string? branchName) -> GitVersion.IBranch? -GitVersion.RepositoryStore.FindCommitBranchWasBranchedFrom(GitVersion.IBranch? branch, GitVersion.Configuration.GitVersionConfiguration! configuration, params GitVersion.IBranch![]! excludedBranches) -> GitVersion.BranchCommit -GitVersion.RepositoryStore.FindCommitBranchesWasBranchedFrom(GitVersion.IBranch! branch, GitVersion.Configuration.GitVersionConfiguration! configuration, System.Collections.Generic.IEnumerable! excludedBranches) -> System.Collections.Generic.IEnumerable! -GitVersion.RepositoryStore.FindCommitBranchesWasBranchedFrom(GitVersion.IBranch! branch, GitVersion.Configuration.GitVersionConfiguration! configuration, params GitVersion.IBranch![]! excludedBranches) -> System.Collections.Generic.IEnumerable! -GitVersion.RepositoryStore.FindMainBranch(GitVersion.Configuration.GitVersionConfiguration! configuration) -> GitVersion.IBranch? -GitVersion.RepositoryStore.FindMainlineBranches(GitVersion.Configuration.GitVersionConfiguration! configuration) -> System.Collections.Generic.IEnumerable! +GitVersion.RepositoryStore.FindCommitBranchesWasBranchedFrom(GitVersion.IBranch! branch, GitVersion.Configuration.IGitVersionConfiguration! configuration, params GitVersion.IBranch![]! excludedBranches) -> System.Collections.Generic.IEnumerable! +GitVersion.RepositoryStore.FindCommitBranchesWasBranchedFrom(GitVersion.IBranch! branch, GitVersion.Configuration.IGitVersionConfiguration! configuration, System.Collections.Generic.IEnumerable! excludedBranches) -> System.Collections.Generic.IEnumerable! +GitVersion.RepositoryStore.FindCommitBranchWasBranchedFrom(GitVersion.IBranch? branch, GitVersion.Configuration.IGitVersionConfiguration! configuration, params GitVersion.IBranch![]! excludedBranches) -> GitVersion.BranchCommit +GitVersion.RepositoryStore.FindMainBranch(GitVersion.Configuration.IGitVersionConfiguration! configuration) -> GitVersion.IBranch? +GitVersion.RepositoryStore.FindMainlineBranches(GitVersion.Configuration.IGitVersionConfiguration! configuration) -> System.Collections.Generic.IEnumerable! GitVersion.RepositoryStore.FindMergeBase(GitVersion.IBranch? branch, GitVersion.IBranch? otherBranch) -> GitVersion.ICommit? GitVersion.RepositoryStore.FindMergeBase(GitVersion.ICommit! commit, GitVersion.ICommit! mainlineTip) -> GitVersion.ICommit? GitVersion.RepositoryStore.GetBranchesContainingCommit(GitVersion.ICommit? commit, System.Collections.Generic.IEnumerable? branches = null, bool onlyTrackedBranches = false) -> System.Collections.Generic.IEnumerable! GitVersion.RepositoryStore.GetCommitLog(GitVersion.ICommit? baseVersionSource, GitVersion.ICommit? currentCommit) -> System.Collections.Generic.IEnumerable! GitVersion.RepositoryStore.GetCurrentCommit(GitVersion.IBranch! currentBranch, string? commitId) -> GitVersion.ICommit? GitVersion.RepositoryStore.GetCurrentCommitTaggedVersion(GitVersion.ICommit? commit, string? tagPrefix, GitVersion.SemanticVersionFormat versionFormat, bool handleDetachedBranch) -> GitVersion.SemanticVersion? -GitVersion.RepositoryStore.GetMainlineBranches(GitVersion.ICommit! commit, GitVersion.Configuration.GitVersionConfiguration! configuration) -> System.Collections.Generic.IDictionary!>! +GitVersion.RepositoryStore.GetMainlineBranches(GitVersion.ICommit! commit, GitVersion.Configuration.IGitVersionConfiguration! configuration) -> System.Collections.Generic.IDictionary!>! GitVersion.RepositoryStore.GetMainlineCommitLog(GitVersion.ICommit? baseVersionSource, GitVersion.ICommit? mainlineTip) -> System.Collections.Generic.IEnumerable! GitVersion.RepositoryStore.GetMergeBaseCommits(GitVersion.ICommit? mergeCommit, GitVersion.ICommit? mergedHead, GitVersion.ICommit? findMergeBase) -> System.Collections.Generic.IEnumerable! GitVersion.RepositoryStore.GetNumberOfUncommittedChanges() -> int GitVersion.RepositoryStore.GetReleaseBranches(System.Collections.Generic.IEnumerable>! releaseBranchConfig) -> System.Collections.Generic.IEnumerable! GitVersion.RepositoryStore.GetSemanticVersionFromTags(string? tagPrefixRegex, GitVersion.SemanticVersionFormat semanticVersionFormat) -> System.Collections.Generic.IEnumerable! -GitVersion.RepositoryStore.GetSourceBranches(GitVersion.IBranch! branch, GitVersion.Configuration.GitVersionConfiguration! configuration, System.Collections.Generic.IEnumerable! excludedBranches) -> System.Collections.Generic.IEnumerable! -GitVersion.RepositoryStore.GetSourceBranches(GitVersion.IBranch! branch, GitVersion.Configuration.GitVersionConfiguration! configuration, params GitVersion.IBranch![]! excludedBranches) -> System.Collections.Generic.IEnumerable! +GitVersion.RepositoryStore.GetSourceBranches(GitVersion.IBranch! branch, GitVersion.Configuration.IGitVersionConfiguration! configuration, params GitVersion.IBranch![]! excludedBranches) -> System.Collections.Generic.IEnumerable! +GitVersion.RepositoryStore.GetSourceBranches(GitVersion.IBranch! branch, GitVersion.Configuration.IGitVersionConfiguration! configuration, System.Collections.Generic.IEnumerable! excludedBranches) -> System.Collections.Generic.IEnumerable! GitVersion.RepositoryStore.GetTargetBranch(string? targetBranchName) -> GitVersion.IBranch! GitVersion.RepositoryStore.GetVersionTagsOnBranch(GitVersion.IBranch! branch, string? tagPrefixRegex, GitVersion.SemanticVersionFormat versionFormat) -> System.Collections.Generic.IEnumerable! GitVersion.RepositoryStore.IsCommitOnBranch(GitVersion.ICommit? baseVersionSource, GitVersion.IBranch! branch, GitVersion.ICommit! firstMatchingCommit) -> bool @@ -879,13 +881,14 @@ GitVersion.VersionCalculation.EffectiveBranchConfigurationFinder.EffectiveBranch GitVersion.VersionCalculation.FallbackVersionStrategy GitVersion.VersionCalculation.FallbackVersionStrategy.FallbackVersionStrategy() -> void GitVersion.VersionCalculation.IEffectiveBranchConfigurationFinder -GitVersion.VersionCalculation.IEffectiveBranchConfigurationFinder.GetConfigurations(GitVersion.IBranch! branch, GitVersion.Configuration.GitVersionConfiguration! configuration) -> System.Collections.Generic.IEnumerable! +GitVersion.VersionCalculation.IEffectiveBranchConfigurationFinder.GetConfigurations(GitVersion.IBranch! branch, GitVersion.Configuration.IGitVersionConfiguration! configuration) -> System.Collections.Generic.IEnumerable! GitVersion.VersionCalculation.IIncrementStrategyFinder GitVersion.VersionCalculation.IIncrementStrategyFinder.DetermineIncrementedField(GitVersion.GitVersionContext! context, GitVersion.VersionCalculation.BaseVersion! baseVersion, GitVersion.Configuration.EffectiveConfiguration! configuration) -> GitVersion.VersionField -GitVersion.VersionCalculation.IIncrementStrategyFinder.GetIncrementForCommits(GitVersion.Configuration.GitVersionConfiguration! configuration, System.Collections.Generic.IEnumerable! commits) -> GitVersion.VersionField? +GitVersion.VersionCalculation.IIncrementStrategyFinder.GetIncrementForCommits(GitVersion.Configuration.IGitVersionConfiguration! configuration, System.Collections.Generic.IEnumerable! commits) -> GitVersion.VersionField? GitVersion.VersionCalculation.IMainlineVersionCalculator GitVersion.VersionCalculation.IMainlineVersionCalculator.CreateVersionBuildMetaData(GitVersion.ICommit? baseVersionSource) -> GitVersion.SemanticVersionBuildMetaData! GitVersion.VersionCalculation.IMainlineVersionCalculator.FindMainlineModeVersion(GitVersion.VersionCalculation.BaseVersion! baseVersion) -> GitVersion.SemanticVersion! +GitVersion.VersionCalculation.IncrementStrategyFinder.GetIncrementForCommits(GitVersion.Configuration.IGitVersionConfiguration! configuration, System.Collections.Generic.IEnumerable! commits) -> GitVersion.VersionField? GitVersion.VersionCalculation.INextVersionCalculator GitVersion.VersionCalculation.INextVersionCalculator.FindVersion() -> GitVersion.VersionCalculation.NextVersion! GitVersion.VersionCalculation.IVariableProvider @@ -896,7 +899,6 @@ GitVersion.VersionCalculation.IVersionStrategy GitVersion.VersionCalculation.IVersionStrategy.GetBaseVersions(GitVersion.Configuration.EffectiveBranchConfiguration! configuration) -> System.Collections.Generic.IEnumerable! GitVersion.VersionCalculation.IncrementStrategyFinder GitVersion.VersionCalculation.IncrementStrategyFinder.DetermineIncrementedField(GitVersion.GitVersionContext! context, GitVersion.VersionCalculation.BaseVersion! baseVersion, GitVersion.Configuration.EffectiveConfiguration! configuration) -> GitVersion.VersionField -GitVersion.VersionCalculation.IncrementStrategyFinder.GetIncrementForCommits(GitVersion.Configuration.GitVersionConfiguration! configuration, System.Collections.Generic.IEnumerable! commits) -> GitVersion.VersionField? GitVersion.VersionCalculation.IncrementStrategyFinder.IncrementStrategyFinder(GitVersion.IGitRepository! repository) -> void GitVersion.VersionCalculation.MergeMessageVersionStrategy GitVersion.VersionCalculation.MergeMessageVersionStrategy.MergeMessageVersionStrategy(GitVersion.Logging.ILog! log, System.Lazy! versionContext, GitVersion.Common.IRepositoryStore! repositoryStore) -> void @@ -1074,18 +1076,18 @@ static GitVersion.BranchCommit.operator !=(GitVersion.BranchCommit left, GitVers static GitVersion.BranchCommit.operator ==(GitVersion.BranchCommit left, GitVersion.BranchCommit right) -> bool static GitVersion.Configuration.BranchConfigurationBuilder.New.get -> GitVersion.Configuration.BranchConfigurationBuilder! static GitVersion.Configuration.ConfigurationExtensions.FindGitDir(this string! path) -> (string! GitDirectory, string! WorkingTreeDirectory)? -static GitVersion.Configuration.ConfigurationExtensions.GetBranchConfiguration(this GitVersion.Configuration.GitVersionConfiguration! configuration, GitVersion.IBranch! branch) -> GitVersion.Configuration.IBranchConfiguration! -static GitVersion.Configuration.ConfigurationExtensions.GetBranchConfiguration(this GitVersion.Configuration.GitVersionConfiguration! configuration, GitVersion.ReferenceName! branchName) -> GitVersion.Configuration.IBranchConfiguration! +static GitVersion.Configuration.ConfigurationExtensions.GetBranchConfiguration(this GitVersion.Configuration.IGitVersionConfiguration! configuration, GitVersion.IBranch! branch) -> GitVersion.Configuration.IBranchConfiguration! +static GitVersion.Configuration.ConfigurationExtensions.GetBranchConfiguration(this GitVersion.Configuration.IGitVersionConfiguration! configuration, GitVersion.ReferenceName! branchName) -> GitVersion.Configuration.IBranchConfiguration! static GitVersion.Configuration.ConfigurationExtensions.GetBranchSpecificTag(this GitVersion.Configuration.EffectiveConfiguration! configuration, GitVersion.Logging.ILog! log, string? branchFriendlyName, string? branchNameOverride) -> string! -static GitVersion.Configuration.ConfigurationExtensions.GetEffectiveConfiguration(this GitVersion.Configuration.GitVersionConfiguration! configuration, GitVersion.IBranch! branch) -> GitVersion.Configuration.EffectiveConfiguration! -static GitVersion.Configuration.ConfigurationExtensions.GetFallbackBranchConfiguration(this GitVersion.Configuration.GitVersionConfiguration! configuration) -> GitVersion.Configuration.BranchConfiguration! -static GitVersion.Configuration.ConfigurationExtensions.GetReleaseBranchConfiguration(this GitVersion.Configuration.GitVersionConfiguration! configuration) -> System.Collections.Generic.List>! -static GitVersion.Configuration.ConfigurationExtensions.IsReleaseBranch(this GitVersion.Configuration.GitVersionConfiguration! configuration, GitVersion.IBranch! branch) -> bool -static GitVersion.Configuration.ConfigurationExtensions.IsReleaseBranch(this GitVersion.Configuration.GitVersionConfiguration! configuration, GitVersion.ReferenceName! branchName) -> bool +static GitVersion.Configuration.ConfigurationExtensions.GetEffectiveConfiguration(this GitVersion.Configuration.IGitVersionConfiguration! configuration, GitVersion.IBranch! branch) -> GitVersion.Configuration.EffectiveConfiguration! +static GitVersion.Configuration.ConfigurationExtensions.GetFallbackBranchConfiguration(this GitVersion.Configuration.IGitVersionConfiguration! configuration) -> GitVersion.Configuration.IBranchConfiguration! +static GitVersion.Configuration.ConfigurationExtensions.GetReleaseBranchConfiguration(this GitVersion.Configuration.IGitVersionConfiguration! configuration) -> System.Collections.Generic.List>! +static GitVersion.Configuration.ConfigurationExtensions.IsReleaseBranch(this GitVersion.Configuration.IGitVersionConfiguration! configuration, GitVersion.IBranch! branch) -> bool +static GitVersion.Configuration.ConfigurationExtensions.IsReleaseBranch(this GitVersion.Configuration.IGitVersionConfiguration! configuration, GitVersion.ReferenceName! branchName) -> bool static GitVersion.Configuration.ConfigurationSerializer.Deserialize(string! input) -> T static GitVersion.Configuration.ConfigurationSerializer.Read(System.IO.TextReader! reader) -> GitVersion.Configuration.GitVersionConfiguration! static GitVersion.Configuration.ConfigurationSerializer.Serialize(object! graph) -> string! -static GitVersion.Configuration.ConfigurationSerializer.Write(GitVersion.Configuration.GitVersionConfiguration! configuration, System.IO.TextWriter! writer) -> void +static GitVersion.Configuration.ConfigurationSerializer.Write(GitVersion.Configuration.IGitVersionConfiguration! configuration, System.IO.TextWriter! writer) -> void static GitVersion.Configuration.Init.StepResult.ExitWithoutSaving() -> GitVersion.Configuration.Init.StepResult! static GitVersion.Configuration.Init.StepResult.InvalidResponseSelected() -> GitVersion.Configuration.Init.StepResult! static GitVersion.Configuration.Init.StepResult.Ok() -> GitVersion.Configuration.Init.StepResult! @@ -1222,9 +1224,7 @@ virtual GitVersion.Configuration.BranchConfigurationBuilder.WithTrackMergeMessag virtual GitVersion.Configuration.BranchConfigurationBuilder.WithTrackMergeTarget(bool? value) -> GitVersion.Configuration.BranchConfigurationBuilder! virtual GitVersion.Configuration.BranchConfigurationBuilder.WithTracksReleaseBranches(bool? value) -> GitVersion.Configuration.BranchConfigurationBuilder! virtual GitVersion.Configuration.BranchConfigurationBuilder.WithVersioningMode(GitVersion.VersionCalculation.VersioningMode? value) -> GitVersion.Configuration.BranchConfigurationBuilder! -virtual GitVersion.Configuration.IgnoreConfiguration.IsEmpty.get -> bool -virtual GitVersion.Configuration.IgnoreConfiguration.ToFilters() -> System.Collections.Generic.IEnumerable! -virtual GitVersion.VersionCalculation.EffectiveBranchConfigurationFinder.GetConfigurations(GitVersion.IBranch! branch, GitVersion.Configuration.GitVersionConfiguration! configuration) -> System.Collections.Generic.IEnumerable! +virtual GitVersion.VersionCalculation.EffectiveBranchConfigurationFinder.GetConfigurations(GitVersion.IBranch! branch, GitVersion.Configuration.IGitVersionConfiguration! configuration) -> System.Collections.Generic.IEnumerable! virtual GitVersion.VersionCalculation.FallbackVersionStrategy.GetBaseVersions(GitVersion.Configuration.EffectiveBranchConfiguration! configuration) -> System.Collections.Generic.IEnumerable! virtual GitVersion.VersionCalculation.NextVersionCalculator.FindVersion() -> GitVersion.VersionCalculation.NextVersion! virtual GitVersion.VersionCalculation.TaggedCommitVersionStrategy.FormatSource(GitVersion.SemanticVersionWithTag! semanticVersion) -> string! diff --git a/src/GitVersion.Core/VersionCalculation/Abstractions/IIncrementStrategyFinder.cs b/src/GitVersion.Core/VersionCalculation/Abstractions/IIncrementStrategyFinder.cs index b51456df02..a696e430b8 100644 --- a/src/GitVersion.Core/VersionCalculation/Abstractions/IIncrementStrategyFinder.cs +++ b/src/GitVersion.Core/VersionCalculation/Abstractions/IIncrementStrategyFinder.cs @@ -6,5 +6,5 @@ public interface IIncrementStrategyFinder { VersionField DetermineIncrementedField(GitVersionContext context, BaseVersion baseVersion, EffectiveConfiguration configuration); - VersionField? GetIncrementForCommits(GitVersionConfiguration configuration, IEnumerable commits); + VersionField? GetIncrementForCommits(IGitVersionConfiguration configuration, IEnumerable commits); } diff --git a/src/GitVersion.Core/VersionCalculation/EffectiveBranchConfigurationFinder.cs b/src/GitVersion.Core/VersionCalculation/EffectiveBranchConfigurationFinder.cs index a17685d171..136387932b 100644 --- a/src/GitVersion.Core/VersionCalculation/EffectiveBranchConfigurationFinder.cs +++ b/src/GitVersion.Core/VersionCalculation/EffectiveBranchConfigurationFinder.cs @@ -16,7 +16,7 @@ public EffectiveBranchConfigurationFinder(ILog log, IRepositoryStore repositoryS this.repositoryStore = repositoryStore.NotNull(); } - public virtual IEnumerable GetConfigurations(IBranch branch, GitVersionConfiguration configuration) + public virtual IEnumerable GetConfigurations(IBranch branch, IGitVersionConfiguration configuration) { branch.NotNull(); configuration.NotNull(); @@ -25,7 +25,7 @@ public virtual IEnumerable GetConfigurations(IBran } private IEnumerable GetEffectiveConfigurationsRecursive( - IBranch branch, GitVersionConfiguration configuration, IBranchConfiguration? childBranchConfiguration, HashSet traversedBranches) + IBranch branch, IGitVersionConfiguration configuration, IBranchConfiguration? childBranchConfiguration, HashSet traversedBranches) { if (!traversedBranches.Add(branch)) yield break; // This should never happen!! But it is good to have a circuit breaker. diff --git a/src/GitVersion.Core/VersionCalculation/IEffectiveBranchConfigurationFinder.cs b/src/GitVersion.Core/VersionCalculation/IEffectiveBranchConfigurationFinder.cs index 4de433b65e..3c010fb67c 100644 --- a/src/GitVersion.Core/VersionCalculation/IEffectiveBranchConfigurationFinder.cs +++ b/src/GitVersion.Core/VersionCalculation/IEffectiveBranchConfigurationFinder.cs @@ -4,6 +4,6 @@ namespace GitVersion.VersionCalculation { public interface IEffectiveBranchConfigurationFinder { - IEnumerable GetConfigurations(IBranch branch, GitVersionConfiguration configuration); + IEnumerable GetConfigurations(IBranch branch, IGitVersionConfiguration configuration); } } diff --git a/src/GitVersion.Core/VersionCalculation/IncrementStrategyFinder.cs b/src/GitVersion.Core/VersionCalculation/IncrementStrategyFinder.cs index 018b87b23e..fc1913f8b2 100644 --- a/src/GitVersion.Core/VersionCalculation/IncrementStrategyFinder.cs +++ b/src/GitVersion.Core/VersionCalculation/IncrementStrategyFinder.cs @@ -56,7 +56,7 @@ public VersionField DetermineIncrementedField(GitVersionContext context, BaseVer return commitMessageIncrement.Value; } - public VersionField? GetIncrementForCommits(GitVersionConfiguration configuration, IEnumerable commits) + public VersionField? GetIncrementForCommits(IGitVersionConfiguration configuration, IEnumerable commits) { var majorRegex = TryGetRegexOrDefault(configuration.MajorVersionBumpMessage, DefaultMajorPatternRegex); var minorRegex = TryGetRegexOrDefault(configuration.MinorVersionBumpMessage, DefaultMinorPatternRegex); diff --git a/src/GitVersion.Core/VersionCalculation/NextVersionCalculator.cs b/src/GitVersion.Core/VersionCalculation/NextVersionCalculator.cs index 56ff701ba7..5a30cc64bf 100644 --- a/src/GitVersion.Core/VersionCalculation/NextVersionCalculator.cs +++ b/src/GitVersion.Core/VersionCalculation/NextVersionCalculator.cs @@ -111,7 +111,7 @@ public virtual NextVersion FindVersion() private static bool MajorMinorPatchEqual(SemanticVersion version, SemanticVersion other) => version.CompareTo(other, false) == 0; - private NextVersion Calculate(IBranch branch, GitVersionConfiguration configuration) + private NextVersion Calculate(IBranch branch, IGitVersionConfiguration configuration) { using (log.IndentLog("Calculating the base versions")) { @@ -189,7 +189,7 @@ static NextVersion CompareVersions( } } - private IEnumerable GetNextVersions(IBranch branch, GitVersionConfiguration configuration) + private IEnumerable GetNextVersions(IBranch branch, IGitVersionConfiguration configuration) { if (branch.Tip == null) throw new GitVersionException("No commits found on the current branch."); @@ -240,7 +240,7 @@ IEnumerable GetNextVersions() } } - private bool IncludeVersion(BaseVersion baseVersion, IgnoreConfiguration ignoreConfiguration) + private bool IncludeVersion(BaseVersion baseVersion, IIgnoreConfiguration ignoreConfiguration) { foreach (var versionFilter in ignoreConfiguration.ToFilters()) { From b82e2cde585675c00f3f77a506dde7a64eae8947 Mon Sep 17 00:00:00 2001 From: Hardy Hobeck Date: Fri, 10 Mar 2023 23:41:19 +0100 Subject: [PATCH 4/7] Fix ShouldFilterVersion unit test --- .../VersionCalculation/NextVersionCalculatorTests.cs | 4 ++-- .../Configuration/IIgnoreConfiguration.cs | 8 ++------ .../Configuration/IgnoreConfiguration.cs | 12 ++++++++++++ src/GitVersion.Core/PublicAPI.Unshipped.txt | 2 ++ 4 files changed, 18 insertions(+), 8 deletions(-) diff --git a/src/GitVersion.Core.Tests/VersionCalculation/NextVersionCalculatorTests.cs b/src/GitVersion.Core.Tests/VersionCalculation/NextVersionCalculatorTests.cs index 97d4bf1bf3..12d10635fc 100644 --- a/src/GitVersion.Core.Tests/VersionCalculation/NextVersionCalculatorTests.cs +++ b/src/GitVersion.Core.Tests/VersionCalculation/NextVersionCalculatorTests.cs @@ -477,11 +477,11 @@ private record TestIgnoreConfig : IgnoreConfiguration { private readonly IVersionFilter filter; - public virtual bool IsEmpty => false; + public override bool IsEmpty => false; public TestIgnoreConfig(IVersionFilter filter) => this.filter = filter; - public virtual IEnumerable ToFilters() + public override IEnumerable ToFilters() { yield return this.filter; } diff --git a/src/GitVersion.Core/Configuration/IIgnoreConfiguration.cs b/src/GitVersion.Core/Configuration/IIgnoreConfiguration.cs index e6fb3215e1..8532980027 100644 --- a/src/GitVersion.Core/Configuration/IIgnoreConfiguration.cs +++ b/src/GitVersion.Core/Configuration/IIgnoreConfiguration.cs @@ -8,12 +8,8 @@ public interface IIgnoreConfiguration IReadOnlyList Shas { get; } - public IEnumerable ToFilters() - { - if (Shas.Any()) yield return new ShaVersionFilter(Shas); - if (Before.HasValue) yield return new MinDateVersionFilter(Before.Value); - } + IEnumerable ToFilters(); - public bool IsEmpty => Before == null && !Shas.Any(); + bool IsEmpty { get; } } } diff --git a/src/GitVersion.Core/Configuration/IgnoreConfiguration.cs b/src/GitVersion.Core/Configuration/IgnoreConfiguration.cs index 74edeb6b56..d0cc4c941f 100644 --- a/src/GitVersion.Core/Configuration/IgnoreConfiguration.cs +++ b/src/GitVersion.Core/Configuration/IgnoreConfiguration.cs @@ -1,7 +1,9 @@ using GitVersion.Attributes; +using GitVersion.VersionCalculation; namespace GitVersion.Configuration; + public record IgnoreConfiguration : IIgnoreConfiguration { [JsonPropertyName("commits-before")] @@ -15,4 +17,14 @@ public record IgnoreConfiguration : IIgnoreConfiguration [JsonPropertyName("sha")] [JsonPropertyDescription("A sequence of SHAs to be excluded from the version calculations.")] public List Shas { get; init; } = new(); + + [JsonIgnore] + public virtual bool IsEmpty => Before == null && !Shas.Any(); + + public virtual IEnumerable ToFilters() + { + if (Shas.Any()) yield return new ShaVersionFilter(Shas); + if (Before.HasValue) yield return new MinDateVersionFilter(Before.Value); + } + } diff --git a/src/GitVersion.Core/PublicAPI.Unshipped.txt b/src/GitVersion.Core/PublicAPI.Unshipped.txt index 3f35464a47..f270563a30 100644 --- a/src/GitVersion.Core/PublicAPI.Unshipped.txt +++ b/src/GitVersion.Core/PublicAPI.Unshipped.txt @@ -1224,6 +1224,8 @@ virtual GitVersion.Configuration.BranchConfigurationBuilder.WithTrackMergeMessag virtual GitVersion.Configuration.BranchConfigurationBuilder.WithTrackMergeTarget(bool? value) -> GitVersion.Configuration.BranchConfigurationBuilder! virtual GitVersion.Configuration.BranchConfigurationBuilder.WithTracksReleaseBranches(bool? value) -> GitVersion.Configuration.BranchConfigurationBuilder! virtual GitVersion.Configuration.BranchConfigurationBuilder.WithVersioningMode(GitVersion.VersionCalculation.VersioningMode? value) -> GitVersion.Configuration.BranchConfigurationBuilder! +virtual GitVersion.Configuration.IgnoreConfiguration.IsEmpty.get -> bool +virtual GitVersion.Configuration.IgnoreConfiguration.ToFilters() -> System.Collections.Generic.IEnumerable! virtual GitVersion.VersionCalculation.EffectiveBranchConfigurationFinder.GetConfigurations(GitVersion.IBranch! branch, GitVersion.Configuration.IGitVersionConfiguration! configuration) -> System.Collections.Generic.IEnumerable! virtual GitVersion.VersionCalculation.FallbackVersionStrategy.GetBaseVersions(GitVersion.Configuration.EffectiveBranchConfiguration! configuration) -> System.Collections.Generic.IEnumerable! virtual GitVersion.VersionCalculation.NextVersionCalculator.FindVersion() -> GitVersion.VersionCalculation.NextVersion! From ad1cc788f911de922749cc9cc5740c47ee1486d3 Mon Sep 17 00:00:00 2001 From: Artur Date: Sat, 11 Mar 2023 03:49:17 +0100 Subject: [PATCH 5/7] Removed unnecessary blank line --- src/GitVersion.Core/Configuration/ConfigurationBuilderBase.cs | 1 - src/GitVersion.Core/Configuration/IgnoreConfiguration.cs | 2 -- 2 files changed, 3 deletions(-) diff --git a/src/GitVersion.Core/Configuration/ConfigurationBuilderBase.cs b/src/GitVersion.Core/Configuration/ConfigurationBuilderBase.cs index 2bae13fd08..528960d7e1 100644 --- a/src/GitVersion.Core/Configuration/ConfigurationBuilderBase.cs +++ b/src/GitVersion.Core/Configuration/ConfigurationBuilderBase.cs @@ -408,7 +408,6 @@ private static void FinalizeConfiguration(GitVersionConfiguration configuration) private static void FinalizeBranchConfiguration(GitVersionConfiguration configuration, string branchName, IBranchConfiguration branchConfiguration) { - var branches = new Dictionary(configuration.Branches); foreach (var targetBranchName in branchConfiguration.IsSourceBranchFor) { diff --git a/src/GitVersion.Core/Configuration/IgnoreConfiguration.cs b/src/GitVersion.Core/Configuration/IgnoreConfiguration.cs index d0cc4c941f..a20f9da218 100644 --- a/src/GitVersion.Core/Configuration/IgnoreConfiguration.cs +++ b/src/GitVersion.Core/Configuration/IgnoreConfiguration.cs @@ -3,7 +3,6 @@ namespace GitVersion.Configuration; - public record IgnoreConfiguration : IIgnoreConfiguration { [JsonPropertyName("commits-before")] @@ -26,5 +25,4 @@ public virtual IEnumerable ToFilters() if (Shas.Any()) yield return new ShaVersionFilter(Shas); if (Before.HasValue) yield return new MinDateVersionFilter(Before.Value); } - } From b6b9d94ae9b2455077f34333cb4a8d8af7090ed7 Mon Sep 17 00:00:00 2001 From: Hardy Hobeck Date: Sat, 11 Mar 2023 08:10:03 +0100 Subject: [PATCH 6/7] Move IIgnoreConfiguration::ToFilters method out of the interface/record, to an extension at the place of usage --- .../Extensions/GitToolsTestingExtensions.cs | 6 +-- .../NextVersionCalculatorTests.cs | 41 +++---------------- .../Configuration/IIgnoreConfiguration.cs | 8 +--- .../Configuration/IgnoreConfiguration.cs | 14 +------ .../IgnoreConfigurationBuilder.cs | 40 ++++++++++++++++++ .../IgnoreConfigurationExtensions.cs | 15 +++++++ src/GitVersion.Core/PublicAPI.Unshipped.txt | 9 ++-- 7 files changed, 72 insertions(+), 61 deletions(-) create mode 100644 src/GitVersion.Core/Configuration/IgnoreConfigurationBuilder.cs create mode 100644 src/GitVersion.Core/Configuration/IgnoreConfigurationExtensions.cs diff --git a/src/GitVersion.Core.Tests/Extensions/GitToolsTestingExtensions.cs b/src/GitVersion.Core.Tests/Extensions/GitToolsTestingExtensions.cs index e0878ced0b..93d6309302 100644 --- a/src/GitVersion.Core.Tests/Extensions/GitToolsTestingExtensions.cs +++ b/src/GitVersion.Core.Tests/Extensions/GitToolsTestingExtensions.cs @@ -19,11 +19,11 @@ public static class GitToolsTestingExtensions public static ICommit CreateMockCommit() { var objectId = Substitute.For(); - objectId.Sha.Returns(Guid.NewGuid().ToString("n") + "00000000"); - + var sha = Guid.NewGuid().ToString("n") + "00000000"; + objectId.Sha.Returns(sha); var commit = Substitute.For(); commit.Id.Returns(objectId); - commit.Sha.Returns(objectId.Sha); + commit.Sha.Returns(sha); commit.Message.Returns("Commit " + commitCount++); commit.Parents.Returns(Enumerable.Empty()); commit.When.Returns(when.AddSeconds(1)); diff --git a/src/GitVersion.Core.Tests/VersionCalculation/NextVersionCalculatorTests.cs b/src/GitVersion.Core.Tests/VersionCalculation/NextVersionCalculatorTests.cs index 12d10635fc..1a3b66200b 100644 --- a/src/GitVersion.Core.Tests/VersionCalculation/NextVersionCalculatorTests.cs +++ b/src/GitVersion.Core.Tests/VersionCalculation/NextVersionCalculatorTests.cs @@ -366,8 +366,7 @@ public void ShouldNotFilterVersion() { // Arrange var branchMock = GitToolsTestingExtensions.CreateMockBranch("main", GitToolsTestingExtensions.CreateMockCommit()); - var fakeIgnoreConfig = new TestIgnoreConfig(new ExcludeSourcesContainingExclude()); - var configuration = GitFlowConfigurationBuilder.New.WithIgnoreConfiguration(fakeIgnoreConfig).Build(); + var configuration = GitFlowConfigurationBuilder.New.Build(); var context = new GitVersionContext(branchMock, null, configuration, null, 0); var repositoryStoreMock = Substitute.For(); var effectiveConfiguration = context.Configuration.GetEffectiveConfiguration(branchMock); @@ -396,9 +395,10 @@ public void ShouldNotFilterVersion() public void ShouldFilterVersion() { // Arrange + var commitToExclude = GitToolsTestingExtensions.CreateMockCommit(); var branchMock = GitToolsTestingExtensions.CreateMockBranch("main", GitToolsTestingExtensions.CreateMockCommit()); - var fakeIgnoreConfig = new TestIgnoreConfig(new ExcludeSourcesContainingExclude()); - var configuration = GitFlowConfigurationBuilder.New.WithIgnoreConfiguration(fakeIgnoreConfig).Build(); + var ignoreConfiguration = IgnoreConfigurationBuilder.New.WithShas(commitToExclude.Sha).Build(); + var configuration = GitFlowConfigurationBuilder.New.WithIgnoreConfiguration(ignoreConfiguration).Build(); var context = new GitVersionContext(branchMock, null, configuration, null, 0); var repositoryStoreMock = Substitute.For(); var effectiveConfiguration = context.Configuration.GetEffectiveConfiguration(branchMock); @@ -407,7 +407,7 @@ public void ShouldFilterVersion() effectiveBranchConfigurationFinderMock.GetConfigurations(branchMock, configuration).Returns(new[] { effectiveBranchConfiguration }); var incrementStrategyFinderMock = Substitute.For(); repositoryStoreMock.GetSourceBranches(branchMock, configuration, Arg.Any>()).Returns(Enumerable.Empty()); - var higherVersion = new BaseVersion("exclude", false, new SemanticVersion(2), GitToolsTestingExtensions.CreateMockCommit(), null); + var higherVersion = new BaseVersion("exclude", false, new SemanticVersion(2), commitToExclude, null); var lowerVersion = new BaseVersion("dummy", false, new SemanticVersion(1), GitToolsTestingExtensions.CreateMockCommit(), null); var versionStrategies = new IVersionStrategy[] { new TestVersionStrategy(higherVersion, lowerVersion) }; var mainlineVersionCalculatorMock = Substitute.For(); @@ -430,8 +430,7 @@ public void ShouldIgnorePreReleaseVersionInMainlineMode() { // Arrange var branchMock = GitToolsTestingExtensions.CreateMockBranch("main", GitToolsTestingExtensions.CreateMockCommit()); - var fakeIgnoreConfig = new TestIgnoreConfig(new ExcludeSourcesContainingExclude()); - var configuration = GitFlowConfigurationBuilder.New.WithIgnoreConfiguration(fakeIgnoreConfig) + var configuration = GitFlowConfigurationBuilder.New .WithBranch("main", builder => builder.WithVersioningMode(VersioningMode.Mainline)) .Build(); var context = new GitVersionContext(branchMock, null, configuration, null, 0); @@ -473,34 +472,6 @@ public void ShouldIgnorePreReleaseVersionInMainlineMode() nextVersion.BaseVersion.SemanticVersion.ShouldBe(lowerVersion.SemanticVersion); } - private record TestIgnoreConfig : IgnoreConfiguration - { - private readonly IVersionFilter filter; - - public override bool IsEmpty => false; - - public TestIgnoreConfig(IVersionFilter filter) => this.filter = filter; - - public override IEnumerable ToFilters() - { - yield return this.filter; - } - } - - private class ExcludeSourcesContainingExclude : IVersionFilter - { - public bool Exclude(BaseVersion version, out string? reason) - { - reason = null; - - if (!version.Source.Contains("exclude")) - return false; - - reason = "was excluded"; - return true; - } - } - private sealed class V1Strategy : IVersionStrategy { private readonly ICommit? when; diff --git a/src/GitVersion.Core/Configuration/IIgnoreConfiguration.cs b/src/GitVersion.Core/Configuration/IIgnoreConfiguration.cs index 8532980027..9eb7230ad4 100644 --- a/src/GitVersion.Core/Configuration/IIgnoreConfiguration.cs +++ b/src/GitVersion.Core/Configuration/IIgnoreConfiguration.cs @@ -1,15 +1,11 @@ -using GitVersion.VersionCalculation; - namespace GitVersion.Configuration { public interface IIgnoreConfiguration { DateTimeOffset? Before { get; } - IReadOnlyList Shas { get; } - - IEnumerable ToFilters(); + IReadOnlyCollection Shas { get; } - bool IsEmpty { get; } + public bool IsEmpty => Before == null && !Shas.Any(); } } diff --git a/src/GitVersion.Core/Configuration/IgnoreConfiguration.cs b/src/GitVersion.Core/Configuration/IgnoreConfiguration.cs index a20f9da218..79c23d154e 100644 --- a/src/GitVersion.Core/Configuration/IgnoreConfiguration.cs +++ b/src/GitVersion.Core/Configuration/IgnoreConfiguration.cs @@ -1,5 +1,4 @@ using GitVersion.Attributes; -using GitVersion.VersionCalculation; namespace GitVersion.Configuration; @@ -11,18 +10,9 @@ public record IgnoreConfiguration : IIgnoreConfiguration public DateTimeOffset? Before { get; init; } [JsonIgnore] - IReadOnlyList IIgnoreConfiguration.Shas => Shas; + IReadOnlyCollection IIgnoreConfiguration.Shas => Shas; [JsonPropertyName("sha")] [JsonPropertyDescription("A sequence of SHAs to be excluded from the version calculations.")] - public List Shas { get; init; } = new(); - - [JsonIgnore] - public virtual bool IsEmpty => Before == null && !Shas.Any(); - - public virtual IEnumerable ToFilters() - { - if (Shas.Any()) yield return new ShaVersionFilter(Shas); - if (Before.HasValue) yield return new MinDateVersionFilter(Before.Value); - } + public HashSet Shas { get; init; } = new(); } diff --git a/src/GitVersion.Core/Configuration/IgnoreConfigurationBuilder.cs b/src/GitVersion.Core/Configuration/IgnoreConfigurationBuilder.cs new file mode 100644 index 0000000000..2578e5bcd7 --- /dev/null +++ b/src/GitVersion.Core/Configuration/IgnoreConfigurationBuilder.cs @@ -0,0 +1,40 @@ +namespace GitVersion.Configuration; + +internal sealed class IgnoreConfigurationBuilder +{ + public static IgnoreConfigurationBuilder New => new(); + + private DateTimeOffset? before; + + private HashSet shas = new(); + + public IgnoreConfigurationBuilder WithBefore(DateTimeOffset? value) + { + this.before = value; + return this; + } + + public IgnoreConfigurationBuilder WithShas(IEnumerable values) + { + WithShas(new HashSet(values)); + return this; + } + + public IgnoreConfigurationBuilder WithShas(params string[] values) + { + WithShas(new HashSet(values)); + return this; + } + + public IgnoreConfigurationBuilder WithShas(HashSet value) + { + this.shas = value; + return this; + } + + public IgnoreConfiguration Build() => new() + { + Before = before, + Shas = shas + }; +} diff --git a/src/GitVersion.Core/Configuration/IgnoreConfigurationExtensions.cs b/src/GitVersion.Core/Configuration/IgnoreConfigurationExtensions.cs new file mode 100644 index 0000000000..a87020cd09 --- /dev/null +++ b/src/GitVersion.Core/Configuration/IgnoreConfigurationExtensions.cs @@ -0,0 +1,15 @@ +using GitVersion.Extensions; +using GitVersion.VersionCalculation; + +namespace GitVersion.Configuration; + +public static class IgnoreConfigurationExtensions +{ + public static IEnumerable ToFilters(this IIgnoreConfiguration source) + { + source.NotNull(); + + if (source.Shas.Any()) yield return new ShaVersionFilter(source.Shas); + if (source.Before.HasValue) yield return new MinDateVersionFilter(source.Before.Value); + } +} diff --git a/src/GitVersion.Core/PublicAPI.Unshipped.txt b/src/GitVersion.Core/PublicAPI.Unshipped.txt index f270563a30..f03b30a432 100644 --- a/src/GitVersion.Core/PublicAPI.Unshipped.txt +++ b/src/GitVersion.Core/PublicAPI.Unshipped.txt @@ -239,13 +239,13 @@ GitVersion.Configuration.IGitVersionConfiguration.Workflow.get -> string? GitVersion.Configuration.IgnoreConfiguration GitVersion.Configuration.IgnoreConfiguration.Before.get -> System.DateTimeOffset? GitVersion.Configuration.IgnoreConfiguration.Before.init -> void -GitVersion.Configuration.IgnoreConfiguration.Shas.get -> System.Collections.Generic.List! +GitVersion.Configuration.IgnoreConfiguration.Shas.get -> System.Collections.Generic.HashSet! GitVersion.Configuration.IgnoreConfiguration.Shas.init -> void +GitVersion.Configuration.IgnoreConfigurationExtensions GitVersion.Configuration.IIgnoreConfiguration GitVersion.Configuration.IIgnoreConfiguration.Before.get -> System.DateTimeOffset? GitVersion.Configuration.IIgnoreConfiguration.IsEmpty.get -> bool -GitVersion.Configuration.IIgnoreConfiguration.Shas.get -> System.Collections.Generic.IReadOnlyList! -GitVersion.Configuration.IIgnoreConfiguration.ToFilters() -> System.Collections.Generic.IEnumerable! +GitVersion.Configuration.IIgnoreConfiguration.Shas.get -> System.Collections.Generic.IReadOnlyCollection! GitVersion.Configuration.Init.EditConfigStep GitVersion.Configuration.Init.EditConfigStep.EditConfigStep(GitVersion.Logging.IConsole! console, GitVersion.IFileSystem! fileSystem, GitVersion.Logging.ILog! log, GitVersion.Configuration.Init.Wizard.IConfigInitStepFactory! stepFactory) -> void GitVersion.Configuration.Init.GitVersionInitModule @@ -1088,6 +1088,7 @@ static GitVersion.Configuration.ConfigurationSerializer.Deserialize(string! i static GitVersion.Configuration.ConfigurationSerializer.Read(System.IO.TextReader! reader) -> GitVersion.Configuration.GitVersionConfiguration! static GitVersion.Configuration.ConfigurationSerializer.Serialize(object! graph) -> string! static GitVersion.Configuration.ConfigurationSerializer.Write(GitVersion.Configuration.IGitVersionConfiguration! configuration, System.IO.TextWriter! writer) -> void +static GitVersion.Configuration.IgnoreConfigurationExtensions.ToFilters(this GitVersion.Configuration.IIgnoreConfiguration! source) -> System.Collections.Generic.IEnumerable! static GitVersion.Configuration.Init.StepResult.ExitWithoutSaving() -> GitVersion.Configuration.Init.StepResult! static GitVersion.Configuration.Init.StepResult.InvalidResponseSelected() -> GitVersion.Configuration.Init.StepResult! static GitVersion.Configuration.Init.StepResult.Ok() -> GitVersion.Configuration.Init.StepResult! @@ -1224,8 +1225,6 @@ virtual GitVersion.Configuration.BranchConfigurationBuilder.WithTrackMergeMessag virtual GitVersion.Configuration.BranchConfigurationBuilder.WithTrackMergeTarget(bool? value) -> GitVersion.Configuration.BranchConfigurationBuilder! virtual GitVersion.Configuration.BranchConfigurationBuilder.WithTracksReleaseBranches(bool? value) -> GitVersion.Configuration.BranchConfigurationBuilder! virtual GitVersion.Configuration.BranchConfigurationBuilder.WithVersioningMode(GitVersion.VersionCalculation.VersioningMode? value) -> GitVersion.Configuration.BranchConfigurationBuilder! -virtual GitVersion.Configuration.IgnoreConfiguration.IsEmpty.get -> bool -virtual GitVersion.Configuration.IgnoreConfiguration.ToFilters() -> System.Collections.Generic.IEnumerable! virtual GitVersion.VersionCalculation.EffectiveBranchConfigurationFinder.GetConfigurations(GitVersion.IBranch! branch, GitVersion.Configuration.IGitVersionConfiguration! configuration) -> System.Collections.Generic.IEnumerable! virtual GitVersion.VersionCalculation.FallbackVersionStrategy.GetBaseVersions(GitVersion.Configuration.EffectiveBranchConfiguration! configuration) -> System.Collections.Generic.IEnumerable! virtual GitVersion.VersionCalculation.NextVersionCalculator.FindVersion() -> GitVersion.VersionCalculation.NextVersion! From 642a7dab99dbbde494e20271dfff3cacfee2e8b1 Mon Sep 17 00:00:00 2001 From: Hardy Hobeck Date: Sat, 11 Mar 2023 08:45:39 +0100 Subject: [PATCH 7/7] dotnet-format ./src/ --exclude **/AddFormats/ --- src/GitVersion.Core/Configuration/IgnoreConfigurationBuilder.cs | 2 +- .../Configuration/IgnoreConfigurationExtensions.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/GitVersion.Core/Configuration/IgnoreConfigurationBuilder.cs b/src/GitVersion.Core/Configuration/IgnoreConfigurationBuilder.cs index 2578e5bcd7..0b367d320f 100644 --- a/src/GitVersion.Core/Configuration/IgnoreConfigurationBuilder.cs +++ b/src/GitVersion.Core/Configuration/IgnoreConfigurationBuilder.cs @@ -1,4 +1,4 @@ -namespace GitVersion.Configuration; +namespace GitVersion.Configuration; internal sealed class IgnoreConfigurationBuilder { diff --git a/src/GitVersion.Core/Configuration/IgnoreConfigurationExtensions.cs b/src/GitVersion.Core/Configuration/IgnoreConfigurationExtensions.cs index a87020cd09..2840852878 100644 --- a/src/GitVersion.Core/Configuration/IgnoreConfigurationExtensions.cs +++ b/src/GitVersion.Core/Configuration/IgnoreConfigurationExtensions.cs @@ -1,4 +1,4 @@ -using GitVersion.Extensions; +using GitVersion.Extensions; using GitVersion.VersionCalculation; namespace GitVersion.Configuration;