diff --git a/src/GitVersionCore.Tests/ConfigProviderTests.cs b/src/GitVersionCore.Tests/ConfigProviderTests.cs index 576fcef00e..e4b27f009e 100644 --- a/src/GitVersionCore.Tests/ConfigProviderTests.cs +++ b/src/GitVersionCore.Tests/ConfigProviderTests.cs @@ -4,6 +4,7 @@ using NUnit.Framework; using Shouldly; using System; +using System.Collections.Generic; using System.IO; using System.Linq; using System.Reflection; @@ -362,4 +363,71 @@ public void WarnOnObsoleteIsDevelopBranchConfigurationSetting() const string expectedMessage = @"'is-develop' is deprecated, use 'tracks-release-branches' instead."; exception.Message.ShouldContain(expectedMessage); } + + [Test] + public void ShouldUseSpecifiedSourceBranchesForDevelop() + { + var defaultConfig = ConfigurationProvider.Provide(repoPath, fileSystem); + const string text = @" +next-version: 2.0.0 +branches: + develop: + mode: ContinuousDeployment + source-branches: ['develop'] + tag: dev"; + SetupConfigFileContent(text); + var config = ConfigurationProvider.Provide(repoPath, fileSystem); + + config.Branches["develop"].SourceBranches.ShouldBe(new List { "develop" }); + } + + [Test] + public void ShouldUseDefaultSourceBranchesWhenNotSpecifiedForDevelop() + { + var defaultConfig = ConfigurationProvider.Provide(repoPath, fileSystem); + const string text = @" +next-version: 2.0.0 +branches: + develop: + mode: ContinuousDeployment + tag: dev"; + SetupConfigFileContent(text); + var config = ConfigurationProvider.Provide(repoPath, fileSystem); + + config.Branches["develop"].SourceBranches.ShouldBe(new List()); + } + + [Test] + public void ShouldUseSpecifiedSourceBranchesForFeature() + { + var defaultConfig = ConfigurationProvider.Provide(repoPath, fileSystem); + const string text = @" +next-version: 2.0.0 +branches: + feature: + mode: ContinuousDeployment + source-branches: ['develop', 'release'] + tag: dev"; + SetupConfigFileContent(text); + var config = ConfigurationProvider.Provide(repoPath, fileSystem); + + config.Branches["feature"].SourceBranches.ShouldBe(new List { "develop", "release" }); + } + + [Test] + public void ShouldUseDefaultSourceBranchesWhenNotSpecifiedForFeature() + { + var defaultConfig = ConfigurationProvider.Provide(repoPath, fileSystem); + const string text = @" +next-version: 2.0.0 +branches: + feature: + mode: ContinuousDeployment + tag: dev"; + SetupConfigFileContent(text); + var config = ConfigurationProvider.Provide(repoPath, fileSystem); + + config.Branches["feature"].SourceBranches.ShouldBe( + new List { "develop", "master", "release", "feature", "support", "hotfix" }); + } } diff --git a/src/GitVersionCore/Configuration/ConfigurationProvider.cs b/src/GitVersionCore/Configuration/ConfigurationProvider.cs index b6c6ae38a4..74d586a538 100644 --- a/src/GitVersionCore/Configuration/ConfigurationProvider.cs +++ b/src/GitVersionCore/Configuration/ConfigurationProvider.cs @@ -220,7 +220,8 @@ public static void ApplyBranchDefaults(Config config, bool isMainline = false) { branchConfig.Regex = string.IsNullOrEmpty(branchConfig.Regex) ? branchRegex : branchConfig.Regex; - branchConfig.SourceBranches = sourceBranches; + branchConfig.SourceBranches = branchConfig.SourceBranches == null || !branchConfig.SourceBranches.Any() + ? sourceBranches : branchConfig.SourceBranches; branchConfig.Tag = branchConfig.Tag ?? defaultTag; branchConfig.TagNumberPattern = branchConfig.TagNumberPattern ?? defaultTagNumberPattern; branchConfig.Increment = branchConfig.Increment ?? defaultIncrementStrategy ?? config.Increment ?? DefaultIncrementStrategy;