diff --git a/src/GitVersionCore.Tests/Configuration/ConfigProviderTests.cs b/src/GitVersionCore.Tests/Configuration/ConfigProviderTests.cs index c1dba66791..b463f6568f 100644 --- a/src/GitVersionCore.Tests/Configuration/ConfigProviderTests.cs +++ b/src/GitVersionCore.Tests/Configuration/ConfigProviderTests.cs @@ -352,5 +352,99 @@ public void ShouldUseDefaultSourceBranchesWhenNotSpecifiedForFeature() config.Branches["feature"].SourceBranches.ShouldBe( new List { "develop", "master", "release", "feature", "support", "hotfix" }); } + + [Test] + public void ShouldNotOverrideAnythingWhenOverrideConfigIsEmpty() + { + const string text = @" +next-version: 1.2.3 +tag-prefix: custom-tag-prefix-from-yml"; + SetupConfigFileContent(text); + + var expectedConfig = configProvider.Provide(repoPath, overrideConfig: null); + var overridenConfig = configProvider.Provide(repoPath, overrideConfig: new Config()); + + overridenConfig.AssemblyVersioningScheme.ShouldBe(expectedConfig.AssemblyVersioningScheme); + overridenConfig.AssemblyFileVersioningScheme.ShouldBe(expectedConfig.AssemblyFileVersioningScheme); + overridenConfig.AssemblyInformationalFormat.ShouldBe(expectedConfig.AssemblyInformationalFormat); + overridenConfig.AssemblyVersioningFormat.ShouldBe(expectedConfig.AssemblyVersioningFormat); + overridenConfig.AssemblyFileVersioningFormat.ShouldBe(expectedConfig.AssemblyFileVersioningFormat); + overridenConfig.VersioningMode.ShouldBe(expectedConfig.VersioningMode); + overridenConfig.TagPrefix.ShouldBe(expectedConfig.TagPrefix); + overridenConfig.ContinuousDeploymentFallbackTag.ShouldBe(expectedConfig.ContinuousDeploymentFallbackTag); + overridenConfig.NextVersion.ShouldBe(expectedConfig.NextVersion); + overridenConfig.MajorVersionBumpMessage.ShouldBe(expectedConfig.MajorVersionBumpMessage); + overridenConfig.MinorVersionBumpMessage.ShouldBe(expectedConfig.MinorVersionBumpMessage); + overridenConfig.PatchVersionBumpMessage.ShouldBe(expectedConfig.PatchVersionBumpMessage); + overridenConfig.NoBumpMessage.ShouldBe(expectedConfig.NoBumpMessage); + overridenConfig.LegacySemVerPadding.ShouldBe(expectedConfig.LegacySemVerPadding); + overridenConfig.BuildMetaDataPadding.ShouldBe(expectedConfig.BuildMetaDataPadding); + overridenConfig.CommitsSinceVersionSourcePadding.ShouldBe(expectedConfig.CommitsSinceVersionSourcePadding); + overridenConfig.TagPreReleaseWeight.ShouldBe(expectedConfig.TagPreReleaseWeight); + overridenConfig.CommitMessageIncrementing.ShouldBe(expectedConfig.CommitMessageIncrementing); + overridenConfig.Increment.ShouldBe(expectedConfig.Increment); + overridenConfig.CommitDateFormat.ShouldBe(expectedConfig.CommitDateFormat); + overridenConfig.MergeMessageFormats.ShouldBe(expectedConfig.MergeMessageFormats); + overridenConfig.UpdateBuildNumber.ShouldBe(expectedConfig.UpdateBuildNumber); + + overridenConfig.Ignore.ShouldBeEquivalentTo(expectedConfig.Ignore); + + overridenConfig.Branches.Keys.ShouldBe(expectedConfig.Branches.Keys); + + foreach (var branch in overridenConfig.Branches.Keys) + { + overridenConfig.Branches[branch].ShouldBeEquivalentTo(expectedConfig.Branches[branch]); + } + } + + [Test] + public void ShouldUseDefaultTagPrefixWhenNotSetInConfigFile() + { + const string text = ""; + SetupConfigFileContent(text); + var config = configProvider.Provide(repoPath); + + config.TagPrefix.ShouldBe("[vV]"); + } + + [Test] + public void ShouldUseTagPrefixFromConfigFileWhenProvided() + { + const string text = "tag-prefix: custom-tag-prefix-from-yml"; + SetupConfigFileContent(text); + var config = configProvider.Provide(repoPath); + + config.TagPrefix.ShouldBe("custom-tag-prefix-from-yml"); + } + + [Test] + public void ShouldOverrideTagPrefixWithOverrideConfigValue([Values] bool tagPrefixSetAtYmlFile) + { + var text = tagPrefixSetAtYmlFile ? "tag-prefix: custom-tag-prefix-from-yml" : ""; + SetupConfigFileContent(text); + var config = configProvider.Provide(repoPath, overrideConfig: new Config { TagPrefix = "tag-prefix-from-override-config" }); + + config.TagPrefix.ShouldBe("tag-prefix-from-override-config"); + } + + [Test] + public void ShouldNotOverrideDefaultTagPrefixWhenNotSetInOverrideConfig() + { + const string text = ""; + SetupConfigFileContent(text); + var config = configProvider.Provide(repoPath, overrideConfig: new Config { TagPrefix = null }); + + config.TagPrefix.ShouldBe("[vV]"); + } + + [Test] + public void ShouldNotOverrideTagPrefixFromConfigFileWhenNotSetInOverrideConfig() + { + const string text = "tag-prefix: custom-tag-prefix-from-yml"; + SetupConfigFileContent(text); + var config = configProvider.Provide(repoPath, overrideConfig: new Config { TagPrefix = null }); + + config.TagPrefix.ShouldBe("custom-tag-prefix-from-yml"); + } } } diff --git a/src/GitVersionCore.Tests/Core/GitVersionExecutorTests.cs b/src/GitVersionCore.Tests/Core/GitVersionExecutorTests.cs index 7a8a21077e..afa7b33991 100644 --- a/src/GitVersionCore.Tests/Core/GitVersionExecutorTests.cs +++ b/src/GitVersionCore.Tests/Core/GitVersionExecutorTests.cs @@ -7,7 +7,6 @@ using GitVersion.BuildAgents; using GitVersion.Configuration; using GitVersion.Logging; -using GitVersion.Model.Configuration; using GitVersion.VersionCalculation.Cache; using GitVersionCore.Tests.Helpers; using LibGit2Sharp; @@ -225,7 +224,7 @@ public void CacheFileExistsOnDiskWhenOverrideConfigIsSpecifiedVersionShouldBeDyn var cacheDirectoryTimestamp = fileSystem.GetLastDirectoryWrite(cacheDirectory); - var config = new Config { TagPrefix = "prefix" }; + var config = new TestableConfig { TagPrefix = "prefix" }; config.Reset(); gitVersionOptions = new GitVersionOptions { WorkingDirectory = fixture.RepositoryPath, ConfigInfo = { OverrideConfig = config } }; diff --git a/src/GitVersionCore.Tests/Extensions/GitToolsTestingExtensions.cs b/src/GitVersionCore.Tests/Extensions/GitToolsTestingExtensions.cs index 2679dd020a..5015a22249 100644 --- a/src/GitVersionCore.Tests/Extensions/GitToolsTestingExtensions.cs +++ b/src/GitVersionCore.Tests/Extensions/GitToolsTestingExtensions.cs @@ -21,7 +21,7 @@ public static VersionVariables GetVersion(this RepositoryFixtureBase fixture, Co { if (configuration == null) { - configuration = new Config(); + configuration = new TestableConfig(); configuration.Reset(); } @@ -67,7 +67,7 @@ public static VersionVariables GetVersion(this RepositoryFixtureBase fixture, Co public static void AssertFullSemver(this RepositoryFixtureBase fixture, string fullSemver, Config configuration = null, IRepository repository = null, string commitId = null, bool onlyTrackedBranches = true, string targetBranch = null) { - configuration ??= new Config(); + configuration ??= new TestableConfig(); configuration.Reset(); Console.WriteLine("---------"); diff --git a/src/GitVersionCore.Tests/Helpers/GitVersionContextBuilder.cs b/src/GitVersionCore.Tests/Helpers/GitVersionContextBuilder.cs index 6bc8ccf56f..1a762e3586 100644 --- a/src/GitVersionCore.Tests/Helpers/GitVersionContextBuilder.cs +++ b/src/GitVersionCore.Tests/Helpers/GitVersionContextBuilder.cs @@ -76,7 +76,7 @@ private GitVersionContextBuilder AddBranch(string branchName) public void Build() { var repo = repository ?? CreateRepository(); - var config = configuration ?? new Config(); + var config = configuration ?? new TestableConfig(); config.Reset(); diff --git a/src/GitVersionCore.Tests/Helpers/TestBase.cs b/src/GitVersionCore.Tests/Helpers/TestBase.cs index 549263e557..503b8c5795 100644 --- a/src/GitVersionCore.Tests/Helpers/TestBase.cs +++ b/src/GitVersionCore.Tests/Helpers/TestBase.cs @@ -26,7 +26,7 @@ protected static IServiceProvider ConfigureServices(Action o protected static IServiceProvider BuildServiceProvider(string workingDirectory, IRepository repository, string branch, Config config = null) { - config ??= new Config().ApplyDefaults(); + config ??= new TestableConfig().ApplyDefaults(); var options = Options.Create(new GitVersionOptions { WorkingDirectory = workingDirectory, diff --git a/src/GitVersionCore.Tests/Helpers/TestableConfig.cs b/src/GitVersionCore.Tests/Helpers/TestableConfig.cs new file mode 100644 index 0000000000..0c3d91f773 --- /dev/null +++ b/src/GitVersionCore.Tests/Helpers/TestableConfig.cs @@ -0,0 +1,24 @@ +using System; +using GitVersion.Model.Configuration; + +namespace GitVersionCore.Tests.Helpers +{ + [Obsolete("Do not use that config because it implicitly overwrites some settings (even default values). Use Config and override required settings explicitly instead.")] + public class TestableConfig : Config + { + public override void MergeTo(Config targetConfig) + { + targetConfig.Ignore = this.Ignore; + + targetConfig.Branches.Clear(); + targetConfig.Branches = this.Branches; + + targetConfig.Increment = this.Increment; + targetConfig.NextVersion = this.NextVersion; + targetConfig.VersioningMode = this.VersioningMode; + targetConfig.AssemblyFileVersioningFormat = this.AssemblyFileVersioningFormat; + targetConfig.TagPrefix = this.TagPrefix; + targetConfig.TagPreReleaseWeight = this.TagPreReleaseWeight; + } + } +} diff --git a/src/GitVersionCore.Tests/IntegrationTests/DevelopScenarios.cs b/src/GitVersionCore.Tests/IntegrationTests/DevelopScenarios.cs index aec34d81ed..603cb5eee9 100644 --- a/src/GitVersionCore.Tests/IntegrationTests/DevelopScenarios.cs +++ b/src/GitVersionCore.Tests/IntegrationTests/DevelopScenarios.cs @@ -55,7 +55,7 @@ public void WhenDevelopBranchedFromTaggedCommitOnMasterVersionDoesNotChange() [Test] public void CanChangeDevelopTagViaConfig() { - var config = new Config + var config = new TestableConfig { Branches = { @@ -115,7 +115,7 @@ public void MergingReleaseBranchBackIntoDevelopWithMergingToMasterDoesBumpDevelo [Test] public void CanHandleContinuousDelivery() { - var config = new Config + var config = new TestableConfig { Branches = { @@ -205,7 +205,7 @@ public void TagOnHotfixShouldNotAffectDevelop() [Test] public void CommitsSinceVersionSourceShouldNotGoDownUponGitFlowReleaseFinish() { - var config = new Config + var config = new TestableConfig { VersioningMode = VersioningMode.ContinuousDeployment }; @@ -246,7 +246,7 @@ public void CommitsSinceVersionSourceShouldNotGoDownUponGitFlowReleaseFinish() [Test] public void CommitsSinceVersionSourceShouldNotGoDownUponMergingFeatureOnlyToDevelop() { - var config = new Config + var config = new TestableConfig { VersioningMode = VersioningMode.ContinuousDeployment }; diff --git a/src/GitVersionCore.Tests/IntegrationTests/FeatureBranchScenarios.cs b/src/GitVersionCore.Tests/IntegrationTests/FeatureBranchScenarios.cs index fd800e739f..7127014d13 100644 --- a/src/GitVersionCore.Tests/IntegrationTests/FeatureBranchScenarios.cs +++ b/src/GitVersionCore.Tests/IntegrationTests/FeatureBranchScenarios.cs @@ -41,7 +41,7 @@ public void ShouldInheritIncrementCorrectlyWithMultiplePossibleParentsAndWeirdly [Test] public void BranchCreatedAfterFastForwardMergeShouldInheritCorrectly() { - var config = new Config + var config = new TestableConfig { Branches = { @@ -169,14 +169,14 @@ public void ShouldBePossibleToMergeDevelopForALongRunningBranchWhereDevelopAndMa Commands.Checkout(fixture.Repository, "feature/longrunning"); fixture.Repository.Merge(fixture.Repository.Branches["develop"], Generate.SignatureNow()); - var configuration = new Config { VersioningMode = VersioningMode.ContinuousDeployment }; + var configuration = new TestableConfig { VersioningMode = VersioningMode.ContinuousDeployment }; fixture.AssertFullSemver("1.2.0-longrunning.2", configuration); } [Test] public void CanUseBranchNameOffAReleaseBranch() { - var config = new Config + var config = new TestableConfig { Branches = { @@ -201,7 +201,7 @@ public void CanUseBranchNameOffAReleaseBranch() [TestCase("alpha.{BranchName}", "JIRA-123", "alpha.JIRA-123")] public void ShouldUseConfiguredTag(string tag, string featureName, string preReleaseTagName) { - var config = new Config + var config = new TestableConfig { Branches = { @@ -301,7 +301,7 @@ public class WhenMasterMarkedAsIsDevelop [Test] public void ShouldPickUpVersionFromMasterAfterReleaseBranchCreated() { - var config = new Config + var config = new TestableConfig { Branches = new Dictionary { @@ -332,7 +332,7 @@ public void ShouldPickUpVersionFromMasterAfterReleaseBranchCreated() [Test] public void ShouldPickUpVersionFromMasterAfterReleaseBranchMergedBack() { - var config = new Config + var config = new TestableConfig { Branches = new Dictionary { @@ -411,7 +411,7 @@ public class WhenMasterMarkedAsIsDevelop [Test] public void ShouldPickUpVersionFromMasterAfterReleaseBranchCreated() { - var config = new Config + var config = new TestableConfig { Branches = new Dictionary { @@ -442,7 +442,7 @@ public void ShouldPickUpVersionFromMasterAfterReleaseBranchCreated() [Test] public void ShouldPickUpVersionFromMasterAfterReleaseBranchMergedBack() { - var config = new Config + var config = new TestableConfig { Branches = new Dictionary { @@ -477,7 +477,7 @@ public void ShouldPickUpVersionFromMasterAfterReleaseBranchMergedBack() [Test] public void PickUpVersionFromMasterMarkedWithIsTracksReleaseBranches() { - var config = new Config + var config = new TestableConfig { VersioningMode = VersioningMode.ContinuousDelivery, Branches = new Dictionary @@ -521,7 +521,7 @@ public void PickUpVersionFromMasterMarkedWithIsTracksReleaseBranches() [Test] public void ShouldHaveAGreaterSemVerAfterDevelopIsMergedIntoFeature() { - var config = new Config + var config = new TestableConfig { VersioningMode = VersioningMode.ContinuousDeployment, AssemblyVersioningScheme = AssemblyVersioningScheme.Major, diff --git a/src/GitVersionCore.Tests/IntegrationTests/HotfixBranchScenarios.cs b/src/GitVersionCore.Tests/IntegrationTests/HotfixBranchScenarios.cs index ea9b885a66..e01f2b4503 100644 --- a/src/GitVersionCore.Tests/IntegrationTests/HotfixBranchScenarios.cs +++ b/src/GitVersionCore.Tests/IntegrationTests/HotfixBranchScenarios.cs @@ -1,7 +1,6 @@ using System.Linq; using GitTools.Testing; using GitVersion.Extensions; -using GitVersion.Model.Configuration; using GitVersion.VersionCalculation; using GitVersionCore.Tests.Helpers; using LibGit2Sharp; @@ -128,7 +127,7 @@ public void PatchOlderReleaseExample() [Test] public void FeatureOnHotfixFeatureBranchDeleted() { - var config = new Config + var config = new TestableConfig { AssemblyVersioningScheme = AssemblyVersioningScheme.MajorMinorPatchTag, VersioningMode = VersioningMode.ContinuousDeployment @@ -181,7 +180,7 @@ public void FeatureOnHotfixFeatureBranchDeleted() [Test] public void FeatureOnHotfixFeatureBranchNotDeleted() { - var config = new Config + var config = new TestableConfig { AssemblyVersioningScheme = AssemblyVersioningScheme.MajorMinorPatchTag, VersioningMode = VersioningMode.ContinuousDeployment diff --git a/src/GitVersionCore.Tests/IntegrationTests/MainlineDevelopmentMode.cs b/src/GitVersionCore.Tests/IntegrationTests/MainlineDevelopmentMode.cs index 220206c322..2d24c25057 100644 --- a/src/GitVersionCore.Tests/IntegrationTests/MainlineDevelopmentMode.cs +++ b/src/GitVersionCore.Tests/IntegrationTests/MainlineDevelopmentMode.cs @@ -15,7 +15,7 @@ namespace GitVersionCore.Tests.IntegrationTests { public class MainlineDevelopmentMode : TestBase { - private readonly Config config = new Config + private readonly Config config = new TestableConfig { VersioningMode = VersioningMode.Mainline }; @@ -397,7 +397,7 @@ public void VerifyMergingMasterIntoAFeatureBranchWorksWithMultipleBranches() [Test] public void MergingFeatureBranchThatIncrementsMinorNumberIncrementsMinorVersionOfMaster() { - var currentConfig = new Config + var currentConfig = new TestableConfig { VersioningMode = VersioningMode.Mainline, Branches = new Dictionary @@ -430,7 +430,7 @@ public void MergingFeatureBranchThatIncrementsMinorNumberIncrementsMinorVersionO [Test] public void VerifyIncrementConfigIsHonoured() { - var minorIncrementConfig = new Config + var minorIncrementConfig = new TestableConfig { VersioningMode = VersioningMode.Mainline, Increment = IncrementStrategy.Minor, diff --git a/src/GitVersionCore.Tests/IntegrationTests/MasterScenarios.cs b/src/GitVersionCore.Tests/IntegrationTests/MasterScenarios.cs index c752bfbc3d..57cc833180 100644 --- a/src/GitVersionCore.Tests/IntegrationTests/MasterScenarios.cs +++ b/src/GitVersionCore.Tests/IntegrationTests/MasterScenarios.cs @@ -13,7 +13,7 @@ public class MasterScenarios : TestBase [Test] public void CanHandleContinuousDelivery() { - var config = new Config + var config = new TestableConfig { Branches = { @@ -34,7 +34,7 @@ public void CanHandleContinuousDelivery() [Test] public void CanHandleContinuousDeployment() { - var config = new Config + var config = new TestableConfig { Branches = { @@ -100,7 +100,7 @@ public void GivenARepositoryWithCommitsButNoTagsWithDetachedHeadVersionShouldBe0 public void GivenARepositoryWithTagAndNextVersionInConfigVersionShouldMatchVersionTxtFile() { const string expectedNextVersion = "1.1.0"; - var config = new Config { NextVersion = expectedNextVersion }; + var config = new TestableConfig { NextVersion = expectedNextVersion }; using var fixture = new EmptyRepositoryFixture(); const string taggedVersion = "1.0.3"; fixture.Repository.MakeATaggedCommit(taggedVersion); @@ -116,7 +116,7 @@ public void GivenARepositoryWithTagAndANextVersionTxtFileAndNoCommitsVersionShou const string taggedVersion = "1.0.3"; fixture.Repository.MakeATaggedCommit(taggedVersion); - fixture.AssertFullSemver("1.0.3", new Config { NextVersion = "1.1.0" }); + fixture.AssertFullSemver("1.0.3", new TestableConfig { NextVersion = "1.1.0" }); } [Test] @@ -148,7 +148,7 @@ public void GivenARepositoryWithTagAndOldNextVersionConfigVersionShouldBeTagWith fixture.Repository.MakeATaggedCommit(taggedVersion); fixture.Repository.MakeCommits(5); - fixture.AssertFullSemver("1.1.1+5", new Config { NextVersion = "1.0.0" }); + fixture.AssertFullSemver("1.1.1+5", new TestableConfig { NextVersion = "1.0.0" }); } [Test] @@ -158,7 +158,7 @@ public void GivenARepositoryWithTagAndOldNextVersionConfigAndNoCommitsVersionSho const string taggedVersion = "1.1.0"; fixture.Repository.MakeATaggedCommit(taggedVersion); - fixture.AssertFullSemver("1.1.0", new Config { NextVersion = "1.0.0" }); + fixture.AssertFullSemver("1.1.0", new TestableConfig { NextVersion = "1.0.0" }); } [Test] @@ -169,13 +169,13 @@ public void CanSpecifyTagPrefixes() fixture.Repository.MakeATaggedCommit(taggedVersion); fixture.Repository.MakeCommits(5); - fixture.AssertFullSemver("1.0.4+5", new Config { TagPrefix = "version-" }); + fixture.AssertFullSemver("1.0.4+5", new TestableConfig { TagPrefix = "version-" }); } [Test] public void CanSpecifyTagPrefixesAsRegex() { - var config = new Config { TagPrefix = "version-|[vV]" }; + var config = new TestableConfig { TagPrefix = "version-|[vV]" }; using var fixture = new EmptyRepositoryFixture(); var taggedVersion = "v1.0.3"; fixture.Repository.MakeATaggedCommit(taggedVersion); @@ -193,7 +193,7 @@ public void CanSpecifyTagPrefixesAsRegex() [Test] public void AreTagsNotAdheringToTagPrefixIgnored() { - var config = new Config { TagPrefix = "" }; + var config = new TestableConfig { TagPrefix = "" }; using var fixture = new EmptyRepositoryFixture(); var taggedVersion = "version-1.0.3"; fixture.Repository.MakeATaggedCommit(taggedVersion); diff --git a/src/GitVersionCore.Tests/IntegrationTests/OtherScenarios.cs b/src/GitVersionCore.Tests/IntegrationTests/OtherScenarios.cs index d41fcab46d..7546ba639f 100644 --- a/src/GitVersionCore.Tests/IntegrationTests/OtherScenarios.cs +++ b/src/GitVersionCore.Tests/IntegrationTests/OtherScenarios.cs @@ -60,7 +60,7 @@ public void AllowHavingVariantsStartingWithMaster() [Test] public void AllowHavingMainInsteadOfMaster() { - var config = new Config(); + var config = new TestableConfig(); config.Branches.Add("master", new BranchConfig { Regex = "main", diff --git a/src/GitVersionCore.Tests/IntegrationTests/ReleaseBranchScenarios.cs b/src/GitVersionCore.Tests/IntegrationTests/ReleaseBranchScenarios.cs index 6e9736348c..3657968549 100644 --- a/src/GitVersionCore.Tests/IntegrationTests/ReleaseBranchScenarios.cs +++ b/src/GitVersionCore.Tests/IntegrationTests/ReleaseBranchScenarios.cs @@ -100,7 +100,7 @@ public void CanTakePreReleaseVersionFromReleasesBranchWithNumericPreReleaseTag() [Test] public void ReleaseBranchWithNextVersionSetInConfig() { - var config = new Config + var config = new TestableConfig { NextVersion = "2.0.0" }; @@ -116,7 +116,7 @@ public void ReleaseBranchWithNextVersionSetInConfig() [Test] public void CanTakeVersionFromReleaseBranchWithTagOverridden() { - var config = new Config + var config = new TestableConfig { Branches = { @@ -313,7 +313,7 @@ public void WhenMergingReleaseBackToDevShouldNotResetBetaVersion() [Test] public void HotfixOffReleaseBranchShouldNotResetCount() { - var config = new Config + var config = new TestableConfig { VersioningMode = VersioningMode.ContinuousDeployment }; @@ -350,7 +350,7 @@ public void HotfixOffReleaseBranchShouldNotResetCount() [Test] public void MergeOnReleaseBranchShouldNotResetCount() { - var config = new Config + var config = new TestableConfig { AssemblyVersioningScheme = AssemblyVersioningScheme.MajorMinorPatchTag, VersioningMode = VersioningMode.ContinuousDeployment, @@ -380,7 +380,7 @@ public void MergeOnReleaseBranchShouldNotResetCount() [Test] public void CommitOnDevelopAfterReleaseBranchMergeToDevelopShouldNotResetCount() { - var config = new Config + var config = new TestableConfig { VersioningMode = VersioningMode.ContinuousDeployment }; @@ -436,7 +436,7 @@ public void CommitOnDevelopAfterReleaseBranchMergeToDevelopShouldNotResetCount() [Test] public void CommitBeetweenMergeReleaseToDevelopShouldNotResetCount() { - var config = new Config + var config = new TestableConfig { VersioningMode = VersioningMode.ContinuousDeployment }; @@ -511,7 +511,7 @@ public void ReleaseBranchedAtCommitWithSemverMessageShouldUseBranchNameVersion() [Test] public void FeatureFromReleaseBranchShouldNotResetCount() { - var config = new Config + var config = new TestableConfig { VersioningMode = VersioningMode.ContinuousDeployment }; @@ -558,7 +558,7 @@ public void FeatureFromReleaseBranchShouldNotResetCount() [Test] public void AssemblySemFileVerShouldBeWeightedByPreReleaseWeight() { - var config = new Config + var config = new TestableConfig { AssemblyFileVersioningFormat = "{Major}.{Minor}.{Patch}.{WeightedPreReleaseNumber}", Branches = @@ -583,7 +583,7 @@ public void AssemblySemFileVerShouldBeWeightedByPreReleaseWeight() [Test] public void AssemblySemFileVerShouldBeWeightedByDefaultPreReleaseWeight() { - var config = new Config + var config = new TestableConfig { AssemblyFileVersioningFormat = "{Major}.{Minor}.{Patch}.{WeightedPreReleaseNumber}", }; @@ -603,7 +603,7 @@ public void AssemblySemFileVerShouldBeWeightedByDefaultPreReleaseWeight() [Test] public void FeatureOnReleaseFeatureBranchDeleted() { - var config = new Config + var config = new TestableConfig { AssemblyVersioningScheme = AssemblyVersioningScheme.MajorMinorPatchTag, VersioningMode = VersioningMode.ContinuousDeployment @@ -638,7 +638,7 @@ public void FeatureOnReleaseFeatureBranchDeleted() [Test] public void FeatureOnReleaseFeatureBranchNotDeleted() { - var config = new Config + var config = new TestableConfig { AssemblyVersioningScheme = AssemblyVersioningScheme.MajorMinorPatchTag, VersioningMode = VersioningMode.ContinuousDeployment diff --git a/src/GitVersionCore.Tests/IntegrationTests/VersionBumpingScenarios.cs b/src/GitVersionCore.Tests/IntegrationTests/VersionBumpingScenarios.cs index d46c6a4fe9..6104a07fb1 100644 --- a/src/GitVersionCore.Tests/IntegrationTests/VersionBumpingScenarios.cs +++ b/src/GitVersionCore.Tests/IntegrationTests/VersionBumpingScenarios.cs @@ -12,7 +12,7 @@ public class VersionBumpingScenarios : TestBase [Test] public void AppliedPrereleaseTagCausesBump() { - var configuration = new Config + var configuration = new TestableConfig { Branches = { diff --git a/src/GitVersionCore.Tests/IntegrationTests/VersionInCurrentBranchNameScenarios.cs b/src/GitVersionCore.Tests/IntegrationTests/VersionInCurrentBranchNameScenarios.cs index 6c4afd9de4..6d35db7085 100644 --- a/src/GitVersionCore.Tests/IntegrationTests/VersionInCurrentBranchNameScenarios.cs +++ b/src/GitVersionCore.Tests/IntegrationTests/VersionInCurrentBranchNameScenarios.cs @@ -32,7 +32,7 @@ public void DoesNotTakeVersionFromNameOfNonReleaseBranch() [Test] public void TakesVersionFromNameOfBranchThatIsReleaseByConfig() { - var config = new Config + var config = new TestableConfig { Branches = new Dictionary { { "support", new BranchConfig { IsReleaseBranch = true } } } }; diff --git a/src/GitVersionCore.Tests/IntegrationTests/VersionInMergedBranchNameScenarios.cs b/src/GitVersionCore.Tests/IntegrationTests/VersionInMergedBranchNameScenarios.cs index 18a1416101..b14912b86b 100644 --- a/src/GitVersionCore.Tests/IntegrationTests/VersionInMergedBranchNameScenarios.cs +++ b/src/GitVersionCore.Tests/IntegrationTests/VersionInMergedBranchNameScenarios.cs @@ -33,7 +33,7 @@ public void DoesNotTakeVersionFromNameOfNonReleaseBranch() [Test] public void TakesVersionFromNameOfBranchThatIsReleaseByConfig() { - var config = new Config + var config = new TestableConfig { Branches = new Dictionary { { "support", new BranchConfig { IsReleaseBranch = true } } } }; diff --git a/src/GitVersionCore.Tests/IntegrationTests/VersionInTagScenarios.cs b/src/GitVersionCore.Tests/IntegrationTests/VersionInTagScenarios.cs index 2d201b911d..778c44caf4 100644 --- a/src/GitVersionCore.Tests/IntegrationTests/VersionInTagScenarios.cs +++ b/src/GitVersionCore.Tests/IntegrationTests/VersionInTagScenarios.cs @@ -1,7 +1,7 @@ using GitTools.Testing; using GitVersion.Configuration; -using GitVersion.Model.Configuration; using GitVersion.VersionCalculation; +using GitVersionCore.Tests.Helpers; using NUnit.Framework; using Shouldly; @@ -14,7 +14,7 @@ class VersionInTagScenarios public void TagPreReleaseWeightIsNotConfigured_HeadIsATaggedCommit_WeightedPreReleaseNumberShouldBeTheDefaultValue() { // Arrange - var config = new Config() + var config = new TestableConfig() { AssemblyFileVersioningFormat = "{Major}.{Minor}.{Patch}.{WeightedPreReleaseNumber}", }; @@ -33,7 +33,7 @@ public void TagPreReleaseWeightIsNotConfigured_HeadIsATaggedCommit_WeightedPreRe public void TagPreReleaseWeightIsConfigured_HeadIsATaggedCommit_WeightedPreReleaseNumberShouldBeTheSameAsTheTagPreReleaseWeight() { // Arrange - var config = new Config() + var config = new TestableConfig() { AssemblyFileVersioningFormat = "{Major}.{Minor}.{Patch}.{WeightedPreReleaseNumber}", TagPreReleaseWeight = 65535 @@ -53,7 +53,7 @@ public void TagPreReleaseWeightIsConfigured_HeadIsATaggedCommit_WeightedPreRelea public void TagPreReleaseWeightIsConfigured_GitFlowReleaseIsFinished_WeightedPreReleaseNumberShouldBeTheSameAsTheTagPreReleaseWeight() { // Arrange - var config = new Config() + var config = new TestableConfig() { AssemblyFileVersioningFormat = "{Major}.{Minor}.{Patch}.{WeightedPreReleaseNumber}", TagPreReleaseWeight = 65535, @@ -81,7 +81,7 @@ public void TagPreReleaseWeightIsConfigured_GitFlowReleaseIsFinished_WeightedPre public void TagPreReleaseWeightIsNotConfigured_GitFlowReleaseIsFinished_WeightedPreReleaseNumberShouldBeTheDefaultValue() { // Arrange - var config = new Config() + var config = new TestableConfig() { AssemblyFileVersioningFormat = "{Major}.{Minor}.{Patch}.{WeightedPreReleaseNumber}", VersioningMode = VersioningMode.ContinuousDeployment diff --git a/src/GitVersionCore.Tests/Model/GitVersionContextTests.cs b/src/GitVersionCore.Tests/Model/GitVersionContextTests.cs index 2de7aaff1e..bef7e25c25 100644 --- a/src/GitVersionCore.Tests/Model/GitVersionContextTests.cs +++ b/src/GitVersionCore.Tests/Model/GitVersionContextTests.cs @@ -23,7 +23,7 @@ public void CanInheritVersioningMode(VersioningMode mode) { using var fixture = new EmptyRepositoryFixture(); - var config = new Config + var config = new TestableConfig { VersioningMode = mode }; @@ -55,7 +55,7 @@ public void CanInheritIncrement(IncrementStrategy increment, IncrementStrategy? // Dummy branch name to make sure that no default config exists. const string dummyBranchName = "dummy"; - var config = new Config + var config = new TestableConfig { Increment = increment }; @@ -77,7 +77,7 @@ public void UsesBranchSpecificConfigOverTopLevelDefaults() using var fixture = new EmptyRepositoryFixture(); var branchName = "develop"; - var config = new Config + var config = new TestableConfig { VersioningMode = VersioningMode.ContinuousDelivery, Branches = @@ -123,7 +123,7 @@ public void UsesFirstBranchConfigWhenMultipleMatch() IsReleaseBranch = false, SourceBranches = new List() }; - var config = new Config + var config = new TestableConfig { VersioningMode = VersioningMode.ContinuousDelivery, Branches = @@ -157,7 +157,7 @@ public void UsesFirstBranchConfigWhenMultipleMatch() [Test] public void CanFindParentBranchForInheritingIncrementStrategy() { - var config = new Config + var config = new TestableConfig { Branches = { diff --git a/src/GitVersionCore.Tests/Model/MergeMessageTests.cs b/src/GitVersionCore.Tests/Model/MergeMessageTests.cs index 3afbf6d508..accffb0543 100644 --- a/src/GitVersionCore.Tests/Model/MergeMessageTests.cs +++ b/src/GitVersionCore.Tests/Model/MergeMessageTests.cs @@ -11,7 +11,7 @@ namespace GitVersionCore.Tests [TestFixture] public class MergeMessageTests : TestBase { - private readonly Config config = new Config { TagPrefix = "[vV]" }; + private readonly Config config = new TestableConfig { TagPrefix = "[vV]" }; [Test] public void NullMessageStringThrows() @@ -42,7 +42,7 @@ public void EmptyTagPrefix(string prefix) { // Arrange var message = "Updated some code."; - var config = new Config { TagPrefix = prefix }; + var config = new TestableConfig { TagPrefix = prefix }; // Act var sut = new MergeMessage(message, config); diff --git a/src/GitVersionCore.Tests/VersionCalculation/BaseVersionCalculatorTests.cs b/src/GitVersionCore.Tests/VersionCalculation/BaseVersionCalculatorTests.cs index ce6e97784e..e871343e68 100644 --- a/src/GitVersionCore.Tests/VersionCalculation/BaseVersionCalculatorTests.cs +++ b/src/GitVersionCore.Tests/VersionCalculation/BaseVersionCalculatorTests.cs @@ -92,7 +92,7 @@ public void ShouldNotFilterVersion() var versionCalculator = GetBaseVersionCalculator(contextBuilder => { contextBuilder - .WithConfig(new Config { Ignore = fakeIgnoreConfig }) + .WithConfig(new TestableConfig { Ignore = fakeIgnoreConfig }) .OverrideServices(services => { services.RemoveAll(); @@ -118,7 +118,7 @@ public void ShouldFilterVersion() var versionCalculator = GetBaseVersionCalculator(contextBuilder => { contextBuilder - .WithConfig(new Config { Ignore = fakeIgnoreConfig }) + .WithConfig(new TestableConfig { Ignore = fakeIgnoreConfig }) .OverrideServices(services => { services.RemoveAll(); diff --git a/src/GitVersionCore.Tests/VersionCalculation/NextVersionCalculatorTests.cs b/src/GitVersionCore.Tests/VersionCalculation/NextVersionCalculatorTests.cs index 7508ac25b4..7ac7da8011 100644 --- a/src/GitVersionCore.Tests/VersionCalculation/NextVersionCalculatorTests.cs +++ b/src/GitVersionCore.Tests/VersionCalculation/NextVersionCalculatorTests.cs @@ -29,7 +29,7 @@ public void ShouldIncrementVersionBasedOnConfig() services.AddSingleton(new TestBaseVersionCalculator(true, new SemanticVersion(1), new MockCommit())); services.AddSingleton(new TestMainlineVersionCalculator(semanticVersionBuildMetaData)); }) - .WithConfig(new Config()) + .WithConfig(new TestableConfig()) .Build(); var nextVersionCalculator = contextBuilder.ServicesProvider.GetService(); @@ -53,7 +53,7 @@ public void DoesNotIncrementWhenBaseVersionSaysNotTo() services.AddSingleton(new TestBaseVersionCalculator(false, new SemanticVersion(1), new MockCommit())); services.AddSingleton(new TestMainlineVersionCalculator(semanticVersionBuildMetaData)); }) - .WithConfig(new Config()) + .WithConfig(new TestableConfig()) .Build(); var nextVersionCalculator = contextBuilder.ServicesProvider.GetService(); @@ -91,7 +91,7 @@ public void AppliesBranchPreReleaseTag() [Test] public void PreReleaseTagCanUseBranchName() { - var config = new Config + var config = new TestableConfig { NextVersion = "1.0.0", Branches = new Dictionary @@ -120,7 +120,7 @@ public void PreReleaseTagCanUseBranchName() [Test] public void PreReleaseTagCanUseBranchNameVariable() { - var config = new Config + var config = new TestableConfig { NextVersion = "1.0.0", Branches = new Dictionary @@ -149,7 +149,7 @@ public void PreReleaseTagCanUseBranchNameVariable() [Test] public void PreReleaseNumberShouldBeScopeToPreReleaseLabelInContinuousDelivery() { - var config = new Config + var config = new TestableConfig { VersioningMode = VersioningMode.ContinuousDelivery, Branches = new Dictionary diff --git a/src/GitVersionCore.Tests/VersionCalculation/Strategies/ConfigNextVersionBaseVersionStrategyTests.cs b/src/GitVersionCore.Tests/VersionCalculation/Strategies/ConfigNextVersionBaseVersionStrategyTests.cs index a61e4d820b..047e35c136 100644 --- a/src/GitVersionCore.Tests/VersionCalculation/Strategies/ConfigNextVersionBaseVersionStrategyTests.cs +++ b/src/GitVersionCore.Tests/VersionCalculation/Strategies/ConfigNextVersionBaseVersionStrategyTests.cs @@ -25,7 +25,7 @@ public void ReturnsNullWhenNoNextVersionIsInConfig() [TestCase("2.12.654651698", "2.12.654651698")] public void ConfigNextVersionTest(string nextVersion, string expectedVersion) { - var baseVersion = GetBaseVersion(new Config + var baseVersion = GetBaseVersion(new TestableConfig { NextVersion = nextVersion }); diff --git a/src/GitVersionCore.Tests/VersionCalculation/Strategies/MergeMessageBaseVersionStrategyTests.cs b/src/GitVersionCore.Tests/VersionCalculation/Strategies/MergeMessageBaseVersionStrategyTests.cs index e3e4d9c689..3d8e5071e4 100644 --- a/src/GitVersionCore.Tests/VersionCalculation/Strategies/MergeMessageBaseVersionStrategyTests.cs +++ b/src/GitVersionCore.Tests/VersionCalculation/Strategies/MergeMessageBaseVersionStrategyTests.cs @@ -139,7 +139,7 @@ public void ShouldNotTakeVersionFromUnrelatedMerge(string commitMessage) [TestCase("Merge branch 'release/2.0.0'", null, "2.0.0")] public void TakesVersionFromMergeOfConfiguredReleaseBranch(string message, string releaseBranch, string expectedVersion) { - var config = new Config(); + var config = new TestableConfig(); if (releaseBranch != null) config.Branches[releaseBranch] = new BranchConfig { IsReleaseBranch = true }; var parents = GetParents(true); @@ -155,7 +155,7 @@ private void AssertMergeMessage(string message, string expectedVersion, IList { { "support", new BranchConfig { IsReleaseBranch = true } } }; - var config = new Config().ApplyDefaults(); + var config = new TestableConfig().ApplyDefaults(); config.Branches = branchConfigs; var strategy = GetVersionStrategy(fixture.RepositoryPath, fixture.Repository, branchName, config); diff --git a/src/GitVersionCore/Configuration/ConfigExtensions.cs b/src/GitVersionCore/Configuration/ConfigExtensions.cs index 1b438952db..fe7518d7dd 100644 --- a/src/GitVersionCore/Configuration/ConfigExtensions.cs +++ b/src/GitVersionCore/Configuration/ConfigExtensions.cs @@ -174,19 +174,6 @@ This is because mainline mode treats your entire git repository as an event sour } } - public static void ApplyOverridesTo(this Config config, Config overrideConfig) - { - config.Branches.Clear(); - config.Ignore = overrideConfig.Ignore; - config.Branches = overrideConfig.Branches; - config.Increment = overrideConfig.Increment; - config.NextVersion = overrideConfig.NextVersion; - config.VersioningMode = overrideConfig.VersioningMode; - config.AssemblyFileVersioningFormat = overrideConfig.AssemblyFileVersioningFormat; - config.TagPrefix = string.IsNullOrWhiteSpace(overrideConfig.TagPrefix) ? config.TagPrefix : overrideConfig.TagPrefix; - config.TagPreReleaseWeight = overrideConfig.TagPreReleaseWeight; - } - public static BranchConfig GetConfigForBranch(this Config config, string branchName) { if (branchName == null) throw new ArgumentNullException(nameof(branchName)); diff --git a/src/GitVersionCore/Configuration/ConfigProvider.cs b/src/GitVersionCore/Configuration/ConfigProvider.cs index 7c41dcec5f..befb3f9e16 100644 --- a/src/GitVersionCore/Configuration/ConfigProvider.cs +++ b/src/GitVersionCore/Configuration/ConfigProvider.cs @@ -39,8 +39,16 @@ public Config Provide(string workingDirectory, bool applyDefaults = true, Config var readConfig = configFileLocator.ReadConfig(workingDirectory); readConfig.Verify(); - if (applyDefaults) readConfig.Reset(); - if (null != overrideConfig) readConfig.ApplyOverridesTo(overrideConfig); + if (applyDefaults) + { + readConfig.Reset(); + } + + if (overrideConfig != null) + { + overrideConfig.MergeTo(readConfig); + } + return readConfig; } diff --git a/src/GitVersionCore/Model/Configuration/Config.cs b/src/GitVersionCore/Model/Configuration/Config.cs index c5db8aa6bb..16f29d2a54 100644 --- a/src/GitVersionCore/Model/Configuration/Config.cs +++ b/src/GitVersionCore/Model/Configuration/Config.cs @@ -124,6 +124,13 @@ private static T MergeObjects(T target, T source) [YamlMember(Alias = "update-build-number")] public bool? UpdateBuildNumber { get; set; } + public virtual void MergeTo(Config targetConfig) + { + if (targetConfig == null) throw new ArgumentNullException(nameof(targetConfig)); + + targetConfig.TagPrefix = this.TagPrefix ?? targetConfig.TagPrefix; + } + public override string ToString() { var stringBuilder = new StringBuilder(); diff --git a/src/GitVersionTask.Tests/GitVersionTask.Tests.csproj b/src/GitVersionTask.Tests/GitVersionTask.Tests.csproj index ff0b9388a5..726e01e23f 100644 --- a/src/GitVersionTask.Tests/GitVersionTask.Tests.csproj +++ b/src/GitVersionTask.Tests/GitVersionTask.Tests.csproj @@ -23,6 +23,7 @@ +