From e7c30cd95049c7791935702e7a9aa3c7fc8ce085 Mon Sep 17 00:00:00 2001 From: Ruh Ullah Shah Date: Tue, 24 Jul 2018 16:11:34 +0200 Subject: [PATCH 1/3] Added a testcase to demonstrate the issue --- .../FeatureBranchScenarios.cs | 50 ++++++++++++++++++- 1 file changed, 49 insertions(+), 1 deletion(-) diff --git a/src/GitVersionCore.Tests/IntegrationTests/FeatureBranchScenarios.cs b/src/GitVersionCore.Tests/IntegrationTests/FeatureBranchScenarios.cs index 7bd7506d1a..53003e8d8f 100644 --- a/src/GitVersionCore.Tests/IntegrationTests/FeatureBranchScenarios.cs +++ b/src/GitVersionCore.Tests/IntegrationTests/FeatureBranchScenarios.cs @@ -552,4 +552,52 @@ public void PickUpVersionFromMasterMarkedWithIsTracksReleaseBranches() fixture.AssertFullSemver(config, "0.10.1-MyFeatureD.1+1"); } } -} + + [Test] + public void ShouldHaveAGreaterSemVerAfterDevelopIsMergedIntoFeature() + { + var config = new Config() + { + VersioningMode = VersioningMode.ContinuousDeployment, + AssemblyVersioningScheme = AssemblyVersioningScheme.Major, + AssemblyFileVersioningFormat = "{MajorMinorPatch}.{env:WeightedPreReleaseNumber ?? 0}", + LegacySemVerPadding = 4, + BuildMetaDataPadding = 4, + CommitsSinceVersionSourcePadding = 4, + CommitMessageIncrementing = CommitMessageIncrementMode.Disabled, + Branches = new Dictionary + { + { + "develop", new BranchConfig() + { + PreventIncrementOfMergedBranchVersion = true + } + }, + { + "feature", new BranchConfig() + { + PreventIncrementOfMergedBranchVersion = true, + Tag = "feat-{BranchName}" + } + } + } + }; + using (var fixture = new EmptyRepositoryFixture()) + { + fixture.MakeACommit(); + fixture.BranchTo("develop"); + fixture.MakeACommit(); + fixture.ApplyTag("16.23.0"); + fixture.MakeACommit(); + fixture.AssertFullSemver(config, "16.24.0-alpha.1"); + fixture.BranchTo("feature/featX"); + fixture.MakeACommit(); + fixture.AssertFullSemver(config, "16.24.0-feat-featX.2"); + fixture.Checkout("develop"); + fixture.MakeACommit(); + fixture.Checkout("feature/featX"); + fixture.MergeNoFF("develop"); + fixture.AssertFullSemver(config, "16.24.0-feat-featX.4"); + } + } +} \ No newline at end of file From 328b2893e85cb2a7de550218ff33d2e78a5c0b36 Mon Sep 17 00:00:00 2001 From: Ruh Ullah Shah Date: Tue, 24 Jul 2018 16:27:52 +0200 Subject: [PATCH 2/3] Remove unnecessary config params --- .../IntegrationTests/FeatureBranchScenarios.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/GitVersionCore.Tests/IntegrationTests/FeatureBranchScenarios.cs b/src/GitVersionCore.Tests/IntegrationTests/FeatureBranchScenarios.cs index 53003e8d8f..56e36c901d 100644 --- a/src/GitVersionCore.Tests/IntegrationTests/FeatureBranchScenarios.cs +++ b/src/GitVersionCore.Tests/IntegrationTests/FeatureBranchScenarios.cs @@ -576,7 +576,6 @@ public void ShouldHaveAGreaterSemVerAfterDevelopIsMergedIntoFeature() { "feature", new BranchConfig() { - PreventIncrementOfMergedBranchVersion = true, Tag = "feat-{BranchName}" } } From b6a61890fb0478719a258298fb4c7037ff974f2a Mon Sep 17 00:00:00 2001 From: Ruh Ullah Shah Date: Mon, 25 Feb 2019 14:03:56 +0100 Subject: [PATCH 3/3] When the chosenBranch for inheriting the configuration is master or develop, use its IncrementStrategy instead of arbitrarily setting it to Patch. Fixed the failing test, Corrected the version number in one of the old tests --- .../IntegrationTests/DevelopScenarios.cs | 2 +- .../FeatureBranchScenarios.cs | 4 +- .../BranchConfigurationCalculator.cs | 54 +++++++++++++++++-- 3 files changed, 51 insertions(+), 9 deletions(-) diff --git a/src/GitVersionCore.Tests/IntegrationTests/DevelopScenarios.cs b/src/GitVersionCore.Tests/IntegrationTests/DevelopScenarios.cs index 9f505afbf4..c1506cd7f8 100644 --- a/src/GitVersionCore.Tests/IntegrationTests/DevelopScenarios.cs +++ b/src/GitVersionCore.Tests/IntegrationTests/DevelopScenarios.cs @@ -201,7 +201,7 @@ public void WhenMultipleDevelopBranchesExistAndCurrentBranchHasIncrementInheritP fixture.Repository.MakeACommit(); fixture.Repository.MergeNoFF("develop"); - fixture.AssertFullSemver("1.0.1-x.1+3"); + fixture.AssertFullSemver("1.1.0-x.1+3"); } } } diff --git a/src/GitVersionCore.Tests/IntegrationTests/FeatureBranchScenarios.cs b/src/GitVersionCore.Tests/IntegrationTests/FeatureBranchScenarios.cs index 56e36c901d..e972c4d842 100644 --- a/src/GitVersionCore.Tests/IntegrationTests/FeatureBranchScenarios.cs +++ b/src/GitVersionCore.Tests/IntegrationTests/FeatureBranchScenarios.cs @@ -588,10 +588,8 @@ public void ShouldHaveAGreaterSemVerAfterDevelopIsMergedIntoFeature() fixture.MakeACommit(); fixture.ApplyTag("16.23.0"); fixture.MakeACommit(); - fixture.AssertFullSemver(config, "16.24.0-alpha.1"); fixture.BranchTo("feature/featX"); fixture.MakeACommit(); - fixture.AssertFullSemver(config, "16.24.0-feat-featX.2"); fixture.Checkout("develop"); fixture.MakeACommit(); fixture.Checkout("feature/featX"); @@ -599,4 +597,4 @@ public void ShouldHaveAGreaterSemVerAfterDevelopIsMergedIntoFeature() fixture.AssertFullSemver(config, "16.24.0-feat-featX.4"); } } -} \ No newline at end of file +} diff --git a/src/GitVersionCore/BranchConfigurationCalculator.cs b/src/GitVersionCore/BranchConfigurationCalculator.cs index df6d7c1f2d..f73c147679 100644 --- a/src/GitVersionCore/BranchConfigurationCalculator.cs +++ b/src/GitVersionCore/BranchConfigurationCalculator.cs @@ -142,11 +142,21 @@ static BranchConfig InheritBranchConfiguration(GitVersionContext context, Branch // To prevent infinite loops, make sure that a new branch was chosen. if (targetBranch.IsSameBranch(chosenBranch)) { - Logger.WriteWarning("Fallback branch wants to inherit Increment branch configuration from itself. Using patch increment instead."); - return new BranchConfig(branchConfiguration) + BranchConfig developOrMasterConfig = + ChooseMasterOrDevelopIncrementStrategyIfTheChosenBranchIsOneOfThem( + chosenBranch, branchConfiguration, config); + if (developOrMasterConfig != null) { - Increment = IncrementStrategy.Patch - }; + return developOrMasterConfig; + } + else + { + Logger.WriteWarning("Fallback branch wants to inherit Increment branch configuration from itself. Using patch increment instead."); + return new BranchConfig(branchConfiguration) + { + Increment = IncrementStrategy.Patch + }; + } } var inheritingBranchConfig = GetBranchConfiguration(context, chosenBranch, excludedInheritBranches); @@ -201,5 +211,39 @@ static Branch[] CalculateWhenMultipleParents(IRepository repository, Commit curr return excludedBranches; } + + private static BranchConfig + ChooseMasterOrDevelopIncrementStrategyIfTheChosenBranchIsOneOfThem(Branch ChosenBranch, + BranchConfig BranchConfiguration, Config config) + { + BranchConfig masterOrDevelopConfig = null; + var developBranchRegex = config.Branches[ConfigurationProvider.DevelopBranchKey].Regex; + var masterBranchRegex = config.Branches[ConfigurationProvider.MasterBranchKey].Regex; + if (Regex.IsMatch(ChosenBranch.FriendlyName, developBranchRegex, RegexOptions.IgnoreCase)) + { + // Normally we would not expect this to happen but for safety we add a check + if (config.Branches[ConfigurationProvider.DevelopBranchKey].Increment != + IncrementStrategy.Inherit) + { + masterOrDevelopConfig = new BranchConfig(BranchConfiguration) + { + Increment = config.Branches[ConfigurationProvider.DevelopBranchKey].Increment + }; + } + } + else if (Regex.IsMatch(ChosenBranch.FriendlyName, masterBranchRegex, RegexOptions.IgnoreCase)) + { + // Normally we would not expect this to happen but for safety we add a check + if (config.Branches[ConfigurationProvider.MasterBranchKey].Increment != + IncrementStrategy.Inherit) + { + masterOrDevelopConfig = new BranchConfig(BranchConfiguration) + { + Increment = config.Branches[ConfigurationProvider.DevelopBranchKey].Increment + }; + } + } + return masterOrDevelopConfig; + } } -} \ No newline at end of file +}