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/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..1fe0cfc46c 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() { @@ -139,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"); } @@ -179,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/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/Extensions/GitToolsTestingExtensions.cs b/src/GitVersion.Core.Tests/Extensions/GitToolsTestingExtensions.cs index 633e95ac74..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)); @@ -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/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/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/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 20f5ec3b5b..1a3b66200b 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() ) @@ -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) @@ -216,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() ) @@ -370,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); @@ -400,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); @@ -411,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(); @@ -434,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); @@ -477,34 +472,6 @@ public void ShouldIgnorePreReleaseVersionInMainlineMode() nextVersion.BaseVersion.SemanticVersion.ShouldBe(lowerVersion.SemanticVersion); } - private class 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/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/BranchConfiguration.cs b/src/GitVersion.Core/Configuration/BranchConfiguration.cs index cf3edfceef..20aca70b7c 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? RegularExpression { get; internal set; } + + [JsonIgnore] + string? IBranchConfiguration.RegularExpression => RegularExpression; [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 IBranchConfiguration Inherit(IBranchConfiguration 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, + RegularExpression = RegularExpression ?? configuration.RegularExpression, + 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..28b9aeb90e 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; @@ -15,9 +14,9 @@ public class BranchConfigurationBuilder private bool? trackMergeTarget; private bool? trackMergeMessage; private CommitMessageIncrementMode? commitMessageIncrementing; - private string? regex; - private HashSet? sourceBranches; - private HashSet? isSourceBranchFor; + private string? regularExpression; + 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; @@ -81,33 +74,33 @@ 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; } - 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; } @@ -135,9 +128,8 @@ public virtual BranchConfigurationBuilder WithPreReleaseWeight(int? value) return this; } - public virtual BranchConfigurationBuilder WithConfiguration(BranchConfiguration value) + public virtual BranchConfigurationBuilder WithConfiguration(IBranchConfiguration value) { - WithName(value.Name); WithVersioningMode(value.VersioningMode); WithLabel(value.Label); WithIncrement(value.Increment); @@ -146,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); @@ -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, + RegularExpression = regularExpression, + 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..528960d7e1 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; @@ -33,9 +33,7 @@ internal abstract class ConfigurationBuilderBase : IConfi private bool? trackMergeTarget; private bool? trackMergeMessage; private CommitMessageIncrementMode? commitMessageIncrementing; - private string? regex; - private HashSet? sourceBranches; - private HashSet? isSourceBranchFor; + private string? regularExpression; private bool? tracksReleaseBranches; private bool? isReleaseBranch; private bool? isMainline; @@ -193,9 +191,9 @@ public virtual TConfigurationBuilder WithSemanticVersionFormat(SemanticVersionFo return (TConfigurationBuilder)this; } - public virtual TConfigurationBuilder WithMergeMessageFormats(Dictionary value) + public virtual TConfigurationBuilder WithMergeMessageFormats(IReadOnlyDictionary 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; } @@ -268,33 +261,9 @@ public virtual TConfigurationBuilder WithCommitMessageIncrementing(CommitMessage return (TConfigurationBuilder)this; } - public virtual TConfigurationBuilder WithRegex(string? value) - { - this.regex = 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) + public virtual TConfigurationBuilder WithRegularExpression(string? value) { - this.isSourceBranchFor = values == null ? null : new HashSet(values); + this.regularExpression = value; return (TConfigurationBuilder)this; } @@ -353,13 +322,11 @@ 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); 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,11 +364,12 @@ 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, - Regex = this.regex, + RegularExpression = this.regularExpression, TracksReleaseBranches = this.tracksReleaseBranches, TrackMergeTarget = this.trackMergeTarget, TrackMergeMessage = this.trackMergeMessage, @@ -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,14 @@ private static void FinalizeConfiguration(GitVersionConfiguration configuration) } } - private static void FinalizeBranchConfiguration(GitVersionConfiguration configuration, string name, BranchConfiguration branchConfiguration) + private static void FinalizeBranchConfiguration(GitVersionConfiguration configuration, string branchName, + IBranchConfiguration 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); } } @@ -460,7 +422,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 dbabd6ecf2..4213f88f7e 100644 --- a/src/GitVersion.Core/Configuration/ConfigurationExtensions.cs +++ b/src/GitVersion.Core/Configuration/ConfigurationExtensions.cs @@ -6,45 +6,44 @@ 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) { - 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 IGitVersionConfiguration configuration, IBranch branch) => GetBranchConfiguration(configuration, branch.NotNull().Name); - public static BranchConfiguration 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 ??= new BranchConfiguration() { - Name = branchName.WithoutOrigin, - 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(IGitVersionConfiguration configuration, string branchName) { - BranchConfiguration? unknownBranchConfiguration = null; - foreach (var item in configuration.Branches.Values.Where(branch => branch.Regex != null)) + IBranchConfiguration? unknownBranchConfiguration = null; + foreach ((string key, IBranchConfiguration branchConfiguration) in configuration.Branches) { - if (item.Regex != null && Regex.IsMatch(branchName, item.Regex, RegexOptions.IgnoreCase)) + if (branchConfiguration.IsMatch(branchName)) { - if (item.Name == "unknown") + if (key == "unknown") { - unknownBranchConfiguration = item; + unknownBranchConfiguration = branchConfiguration; } else { - yield return item; + yield return branchConfiguration; } } } @@ -52,19 +51,16 @@ 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 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, string? branchNameOverride) + public static string GetBranchSpecificTag(this EffectiveConfiguration configuration, ILog log, string? branchFriendlyName, + string? branchNameOverride) { var tagToUse = configuration.Label; if (tagToUse == "useBranchName") @@ -133,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 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 030d5c1a8b..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); @@ -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/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 48ac103a68..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, BranchConfiguration branchConfiguration) + public EffectiveConfiguration(IGitVersionConfiguration configuration, IBranchConfiguration branchConfiguration) { configuration.NotNull(); branchConfiguration.NotNull(); @@ -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)"); @@ -44,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 cec6af1b89..8bc5133189 100644 --- a/src/GitVersion.Core/Configuration/GitVersionConfiguration.cs +++ b/src/GitVersion.Core/Configuration/GitVersionConfiguration.cs @@ -4,103 +4,108 @@ 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.ToDictionary(element => element.Key, element => (IBranchConfiguration)element.Value); [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 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 new file mode 100644 index 0000000000..be21e24a08 --- /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; } + + IBranchConfiguration Inherit(IBranchConfiguration configuration); +} diff --git a/src/GitVersion.Core/Configuration/IGitVersionConfiguration.cs b/src/GitVersion.Core/Configuration/IGitVersionConfiguration.cs new file mode 100644 index 0000000000..272430587c --- /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..9eb7230ad4 --- /dev/null +++ b/src/GitVersion.Core/Configuration/IIgnoreConfiguration.cs @@ -0,0 +1,11 @@ +namespace GitVersion.Configuration +{ + public interface IIgnoreConfiguration + { + DateTimeOffset? Before { get; } + + IReadOnlyCollection Shas { 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 228039ad4a..79c23d154e 100644 --- a/src/GitVersion.Core/Configuration/IgnoreConfiguration.cs +++ b/src/GitVersion.Core/Configuration/IgnoreConfiguration.cs @@ -1,27 +1,18 @@ using GitVersion.Attributes; -using GitVersion.VersionCalculation; 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; } - - [JsonPropertyName("sha")] - [JsonPropertyDescription("A sequence of SHAs to be excluded from the version calculations.")] - public string[] Shas { get; set; } + public DateTimeOffset? Before { get; init; } [JsonIgnore] - public virtual bool IsEmpty => Before == null && !Shas.Any(); + IReadOnlyCollection IIgnoreConfiguration.Shas => Shas; - public virtual IEnumerable ToFilters() - { - if (Shas.Any()) yield return new ShaVersionFilter(Shas); - if (Before.HasValue) yield return new MinDateVersionFilter(Before.Value); - } + [JsonPropertyName("sha")] + [JsonPropertyDescription("A sequence of SHAs to be excluded from the version calculations.")] + 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..0b367d320f --- /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..2840852878 --- /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/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/Abstractions/IRepositoryStore.cs b/src/GitVersion.Core/Core/Abstractions/IRepositoryStore.cs index 75dcf38a6e..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); - IEnumerable GetReleaseBranches(IEnumerable> releaseBranchConfig); + 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 778638d9f7..ed4f8888bf 100644 --- a/src/GitVersion.Core/Core/MainlineBranchFinder.cs +++ b/src/GitVersion.Core/Core/MainlineBranchFinder.cs @@ -8,15 +8,15 @@ namespace GitVersion; internal class MainlineBranchFinder { - private readonly GitVersionConfiguration configuration; + private readonly IGitVersionConfiguration configuration; private readonly ILog log; - private readonly List mainlineBranchConfigurations; + private readonly List mainlineBranchConfigurations; private readonly IGitRepository repository; private readonly IRepositoryStore repositoryStore; public MainlineBranchFinder(IRepositoryStore repositoryStore, IGitRepository repository, - GitVersionConfiguration configuration, + IGitVersionConfiguration configuration, ILog log) { this.repositoryStore = repositoryStore.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}'."); @@ -70,11 +70,11 @@ public bool IsMainline(BranchConfiguration 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 867d9d8071..b6e6d8db5f 100644 --- a/src/GitVersion.Core/Core/RepositoryStore.cs +++ b/src/GitVersion.Core/Core/RepositoryStore.cs @@ -102,10 +102,11 @@ 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 mainBranchRegex = configuration.Branches[ConfigurationConstants.MainBranchKey].Regex - ?? configuration.Branches[ConfigurationConstants.MasterBranchKey].Regex; + var branches = configuration.Branches; + var mainBranchRegex = branches[ConfigurationConstants.MainBranchKey].RegularExpression + ?? branches[ConfigurationConstants.MasterBranchKey].RegularExpression; if (mainBranchRegex == null) { @@ -116,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(); @@ -130,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); @@ -144,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(); @@ -188,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(); @@ -216,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 7073299851..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) @@ -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].RegularExpression; if (regex != null) yield return regex; } 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 38ea0ad608..f03b30a432 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! @@ -70,64 +71,44 @@ 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.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 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.RegularExpression.get -> string? +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 @@ -149,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! @@ -165,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.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 @@ -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.IBranchConfiguration! configuration) -> GitVersion.Configuration.IBranchConfiguration! +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? @@ -236,13 +215,37 @@ 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? +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.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.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 @@ -364,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 @@ -611,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? @@ -731,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.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 @@ -878,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 @@ -895,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 @@ -954,7 +957,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 +995,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.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! @@ -1073,18 +1076,19 @@ 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.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.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! @@ -1202,28 +1206,26 @@ 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.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! -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.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! 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 0ad2e3ebe6..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, BranchConfiguration? 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/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 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/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..5a30cc64bf 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) @@ -109,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")) { @@ -187,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."); @@ -238,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()) {