From 06616099f13f9ddff20fe66c935595bef32c33de Mon Sep 17 00:00:00 2001 From: David Driscoll Date: Sun, 14 Oct 2018 00:36:53 -0400 Subject: [PATCH 1/2] Attempt to fix merge message issue --- src/GitVersionCore.Tests/CommitDateTests.cs | 4 ++-- .../TestEffectiveConfiguration.cs | 7 ++++--- .../MergeMessageBaseVersionStrategyTests.cs | 21 ++++++++++++------- .../Configuration/BranchConfig.cs | 5 ++++- src/GitVersionCore/Configuration/Config.cs | 7 +++++-- .../Configuration/ConfigurationProvider.cs | 1 + src/GitVersionCore/EffectiveConfiguration.cs | 9 +++++--- src/GitVersionCore/GitVersionContext.cs | 8 +++++-- .../BaseVersionCalculator.cs | 4 ++-- .../MergeMessageBaseVersionStrategy.cs | 9 ++++++-- .../TestEffectiveConfiguration.cs | 7 ++++--- .../Helpers/TestEffectiveConfiguration.cs | 7 ++++--- 12 files changed, 59 insertions(+), 30 deletions(-) diff --git a/src/GitVersionCore.Tests/CommitDateTests.cs b/src/GitVersionCore.Tests/CommitDateTests.cs index c5db74ff53..faceca4ef3 100644 --- a/src/GitVersionCore.Tests/CommitDateTests.cs +++ b/src/GitVersionCore.Tests/CommitDateTests.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections; using System.Collections.Generic; using System.Linq; @@ -28,7 +28,7 @@ public void CommitDateFormatTest(string format, string expectedOutcome) }, new EffectiveConfiguration( AssemblyVersioningScheme.MajorMinorPatch, AssemblyFileVersioningScheme.MajorMinorPatch, "", "", "", VersioningMode.ContinuousDelivery, "", "", "", IncrementStrategy.Inherit, - "", true, "", "", false, "", "", "", "", CommitMessageIncrementMode.Enabled, 4, 4, 4, Enumerable.Empty(), false, true, format) + "", true, "", "", false, "", "", "", "", CommitMessageIncrementMode.Enabled, 4, 4, 4, Enumerable.Empty(), false, true, format, true) ); Assert.That(formatValues.CommitDate, Is.EqualTo(expectedOutcome)); diff --git a/src/GitVersionCore.Tests/TestEffectiveConfiguration.cs b/src/GitVersionCore.Tests/TestEffectiveConfiguration.cs index 876de76ac1..0ad127aae4 100644 --- a/src/GitVersionCore.Tests/TestEffectiveConfiguration.cs +++ b/src/GitVersionCore.Tests/TestEffectiveConfiguration.cs @@ -33,15 +33,16 @@ public TestEffectiveConfiguration( IEnumerable versionFilters = null, bool tracksReleaseBranches = false, bool isRelease = false, - string commitDateFormat = "yyyy-MM-dd") : + string commitDateFormat = "yyyy-MM-dd", + bool useMergeMessageVersion = true) : base(assemblyVersioningScheme, assemblyFileVersioningScheme, assemblyInformationalFormat, assemblyVersioningFormat, assemblyFileVersioningFormat, versioningMode, gitTagPrefix, tag, nextVersion, IncrementStrategy.Patch, branchPrefixToTrim, preventIncrementForMergedBranchVersion, tagNumberPattern, continuousDeploymentFallbackTag, trackMergeTarget, majorMessage, minorMessage, patchMessage, noBumpMessage, commitMessageMode, legacySemVerPadding, buildMetaDataPadding, commitsSinceVersionSourcePadding, versionFilters ?? Enumerable.Empty(), - tracksReleaseBranches, isRelease, commitDateFormat) + tracksReleaseBranches, isRelease, commitDateFormat, useMergeMessageVersion) { } } -} \ No newline at end of file +} diff --git a/src/GitVersionCore.Tests/VersionCalculation/Strategies/MergeMessageBaseVersionStrategyTests.cs b/src/GitVersionCore.Tests/VersionCalculation/Strategies/MergeMessageBaseVersionStrategyTests.cs index 407940265a..5c2fbd1b7d 100644 --- a/src/GitVersionCore.Tests/VersionCalculation/Strategies/MergeMessageBaseVersionStrategyTests.cs +++ b/src/GitVersionCore.Tests/VersionCalculation/Strategies/MergeMessageBaseVersionStrategyTests.cs @@ -1,7 +1,8 @@ -namespace GitVersionCore.Tests.VersionCalculation.Strategies +namespace GitVersionCore.Tests.VersionCalculation.Strategies { using System.Collections.Generic; using System.Linq; + using GitVersion; using GitVersion.VersionCalculation.BaseVersionCalculators; using LibGit2Sharp; using NUnit.Framework; @@ -15,14 +16,16 @@ public void ShouldNotAllowIncrementOfVersion() { // When a branch is merged in you want to start building stable packages of that version // So we shouldn't bump the version - var context = new GitVersionContextBuilder().WithRepository(new MockRepository - { - Head = new MockBranch("master") { new MockCommit + var context = new GitVersionContextBuilder() + .WithRepository(new MockRepository + { + Head = new MockBranch("master") { new MockCommit { MessageEx = "Merge branch 'hotfix-0.1.5'", ParentsEx = GetParents(true) } } - }).Build(); + }).Build(); + var sut = new MergeMessageBaseVersionStrategy(); var baseVersion = sut.GetVersions(context).Single(); @@ -94,7 +97,7 @@ public void MergeMessagesThatIsNotRelatedToGitVersion(string commitMessage) var parents = GetParents(true); AssertMergeMessage(commitMessage, null, parents); - } + } static void AssertMergeMessage(string message, string expectedVersion, List parents) { @@ -105,6 +108,10 @@ static void AssertMergeMessage(string message, string expectedVersion, List GetParents(bool isMergeCommit) }; } } -} \ No newline at end of file +} diff --git a/src/GitVersionCore/Configuration/BranchConfig.cs b/src/GitVersionCore/Configuration/BranchConfig.cs index c0e717adae..0cbd9bf436 100644 --- a/src/GitVersionCore/Configuration/BranchConfig.cs +++ b/src/GitVersionCore/Configuration/BranchConfig.cs @@ -1,4 +1,4 @@ -namespace GitVersion +namespace GitVersion { using System.Collections.Generic; using YamlDotNet.Serialization; @@ -72,6 +72,9 @@ public BranchConfig(BranchConfig branchConfiguration) [YamlMember(Alias = "is-mainline")] public bool? IsMainline { get; set; } + [YamlMember(Alias = "use-merge-message-version")] + public bool? UseMergeMessageVersion { get; set; } + /// /// The name given to this configuration in the config file. /// diff --git a/src/GitVersionCore/Configuration/Config.cs b/src/GitVersionCore/Configuration/Config.cs index 8225df969f..3678128909 100644 --- a/src/GitVersionCore/Configuration/Config.cs +++ b/src/GitVersionCore/Configuration/Config.cs @@ -1,4 +1,4 @@ -namespace GitVersion +namespace GitVersion { using System; using System.Collections.Generic; @@ -79,6 +79,9 @@ public string NextVersion [YamlMember(Alias = "commit-message-incrementing")] public CommitMessageIncrementMode? CommitMessageIncrementing { get; set; } + [YamlMember(Alias = "use-merge-message-version")] + public bool? UseMergeMessageVersion { get; set; } + [YamlMember(Alias = "branches")] public Dictionary Branches { @@ -145,4 +148,4 @@ T MergeObjects(T target, T source) [YamlMember(Alias = "commit-date-format")] public string CommitDateFormat { get; set; } } -} \ No newline at end of file +} diff --git a/src/GitVersionCore/Configuration/ConfigurationProvider.cs b/src/GitVersionCore/Configuration/ConfigurationProvider.cs index d0fc3b8d96..2c0577e8e8 100644 --- a/src/GitVersionCore/Configuration/ConfigurationProvider.cs +++ b/src/GitVersionCore/Configuration/ConfigurationProvider.cs @@ -102,6 +102,7 @@ public static void ApplyDefaultsTo(Config config) config.BuildMetaDataPadding = config.BuildMetaDataPadding ?? 4; config.CommitsSinceVersionSourcePadding = config.CommitsSinceVersionSourcePadding ?? 4; config.CommitDateFormat = config.CommitDateFormat ?? "yyyy-MM-dd"; + config.UseMergeMessageVersion = config.UseMergeMessageVersion ?? false; var configBranches = config.Branches.ToList(); diff --git a/src/GitVersionCore/EffectiveConfiguration.cs b/src/GitVersionCore/EffectiveConfiguration.cs index abf2cd9aec..45b5dfe68f 100644 --- a/src/GitVersionCore/EffectiveConfiguration.cs +++ b/src/GitVersionCore/EffectiveConfiguration.cs @@ -1,4 +1,4 @@ -using System.Collections.Generic; +using System.Collections.Generic; using GitVersion.VersionFilters; namespace GitVersion @@ -32,7 +32,8 @@ public EffectiveConfiguration( IEnumerable versionFilters, bool tracksReleaseBranches, bool isCurrentBranchRelease, - string commitDateFormat) + string commitDateFormat, + bool useMergeMessageVersion) { AssemblyVersioningScheme = assemblyVersioningScheme; AssemblyFileVersioningScheme = assemblyFileVersioningScheme; @@ -61,6 +62,7 @@ public EffectiveConfiguration( TracksReleaseBranches = tracksReleaseBranches; IsCurrentBranchRelease = isCurrentBranchRelease; CommitDateFormat = commitDateFormat; + UseMergeMessageVersion = useMergeMessageVersion; } public bool TracksReleaseBranches { get; private set; } @@ -115,5 +117,6 @@ public EffectiveConfiguration( public IEnumerable VersionFilters { get; private set; } public string CommitDateFormat { get; private set; } + public bool UseMergeMessageVersion { get; private set; } } -} \ No newline at end of file +} diff --git a/src/GitVersionCore/GitVersionContext.cs b/src/GitVersionCore/GitVersionContext.cs index 4478d330b4..6e1c48c9b9 100644 --- a/src/GitVersionCore/GitVersionContext.cs +++ b/src/GitVersionCore/GitVersionContext.cs @@ -1,4 +1,4 @@ -namespace GitVersion +namespace GitVersion { using LibGit2Sharp; using System; @@ -110,6 +110,8 @@ void CalculateEffectiveConfiguration() throw new Exception("Configuration value for 'BuildMetaDataPadding' has no value. (this should not happen, please report an issue)"); if (!FullConfiguration.CommitsSinceVersionSourcePadding.HasValue) throw new Exception("Configuration value for 'CommitsSinceVersionSourcePadding' has no value. (this should not happen, please report an issue)"); + if (!FullConfiguration.UseMergeMessageVersion.HasValue) + throw new Exception("Configuration value for 'UseMergeMessageVersion' has no value. (this should not happen, please report an issue)"); var versioningMode = currentBranchConfig.VersioningMode.Value; var tag = currentBranchConfig.Tag; @@ -132,6 +134,7 @@ void CalculateEffectiveConfiguration() var commitDateFormat = FullConfiguration.CommitDateFormat; var commitMessageVersionBump = currentBranchConfig.CommitMessageIncrementing ?? FullConfiguration.CommitMessageIncrementing.Value; + var useMergeMessageVersion = currentBranchConfig.UseMergeMessageVersion ?? FullConfiguration.UseMergeMessageVersion.Value; Configuration = new EffectiveConfiguration( assemblyVersioningScheme, assemblyFileVersioningScheme, assemblyInformationalFormat, assemblyVersioningFormat, assemblyFileVersioningFormat, versioningMode, gitTagPrefix, @@ -148,7 +151,8 @@ void CalculateEffectiveConfiguration() FullConfiguration.Ignore.ToFilters(), currentBranchConfig.TracksReleaseBranches.Value, currentBranchConfig.IsReleaseBranch.Value, - commitDateFormat); + commitDateFormat, + useMergeMessageVersion); } private static Branch GetTargetBranch(IRepository repository, string targetBranch) diff --git a/src/GitVersionCore/VersionCalculation/BaseVersionCalculator.cs b/src/GitVersionCore/VersionCalculation/BaseVersionCalculator.cs index 66d312dfa8..2d989852b7 100644 --- a/src/GitVersionCore/VersionCalculation/BaseVersionCalculator.cs +++ b/src/GitVersionCore/VersionCalculation/BaseVersionCalculator.cs @@ -1,4 +1,4 @@ -namespace GitVersion.VersionCalculation +namespace GitVersion.VersionCalculation { using System; using System.Linq; @@ -93,4 +93,4 @@ public static SemanticVersion MaybeIncrement(GitVersionContext context, BaseVers return version.SemanticVersion; } } -} \ No newline at end of file +} diff --git a/src/GitVersionCore/VersionCalculation/BaseVersionCalculators/MergeMessageBaseVersionStrategy.cs b/src/GitVersionCore/VersionCalculation/BaseVersionCalculators/MergeMessageBaseVersionStrategy.cs index e9fac9c84c..dc52755dca 100644 --- a/src/GitVersionCore/VersionCalculation/BaseVersionCalculators/MergeMessageBaseVersionStrategy.cs +++ b/src/GitVersionCore/VersionCalculation/BaseVersionCalculators/MergeMessageBaseVersionStrategy.cs @@ -1,4 +1,4 @@ -namespace GitVersion.VersionCalculation.BaseVersionCalculators +namespace GitVersion.VersionCalculation.BaseVersionCalculators { using System.Collections.Generic; using System.Linq; @@ -13,6 +13,11 @@ public class MergeMessageBaseVersionStrategy : BaseVersionStrategy { public override IEnumerable GetVersions(GitVersionContext context) { + if (!context.Configuration.UseMergeMessageVersion) + { + return Enumerable.Empty(); + } + var commitsPriorToThan = context.CurrentBranch .CommitsPriorToThan(context.CurrentCommit.When()); var baseVersions = commitsPriorToThan @@ -49,4 +54,4 @@ static SemanticVersion Inner(Commit mergeCommit, GitVersionContext context) return mergeMessage.Version; } } -} \ No newline at end of file +} diff --git a/src/GitVersionExe.Tests/TestEffectiveConfiguration.cs b/src/GitVersionExe.Tests/TestEffectiveConfiguration.cs index 6b2d03ddfe..7d2452b458 100644 --- a/src/GitVersionExe.Tests/TestEffectiveConfiguration.cs +++ b/src/GitVersionExe.Tests/TestEffectiveConfiguration.cs @@ -33,16 +33,17 @@ public TestEffectiveConfiguration( IEnumerable versionFilters = null, bool tracksReleaseBranches = false, bool isRelease = false, - string commitDateFormat = "yyyy-MM-dd") : + string commitDateFormat = "yyyy-MM-dd", + bool useMergeMessageVersion = true) : base(assemblyVersioningScheme, assemblyFileVersioningScheme, assemblyInformationalFormat, assemblyVersioningFormat, assemblyFileVersioningFormat, versioningMode, gitTagPrefix, tag, nextVersion, IncrementStrategy.Patch, branchPrefixToTrim, preventIncrementForMergedBranchVersion, tagNumberPattern, continuousDeploymentFallbackTag, trackMergeTarget, majorMessage, minorMessage, patchMessage, noBumpMessage, commitMessageMode, legacySemVerPadding, buildMetaDataPadding, commitsSinceVersionSourcePadding, versionFilters ?? Enumerable.Empty(), - tracksReleaseBranches, isRelease, commitDateFormat) + tracksReleaseBranches, isRelease, commitDateFormat, useMergeMessageVersion) { } } -} \ No newline at end of file +} diff --git a/src/GitVersionTask.Tests/Helpers/TestEffectiveConfiguration.cs b/src/GitVersionTask.Tests/Helpers/TestEffectiveConfiguration.cs index 876de76ac1..0ad127aae4 100644 --- a/src/GitVersionTask.Tests/Helpers/TestEffectiveConfiguration.cs +++ b/src/GitVersionTask.Tests/Helpers/TestEffectiveConfiguration.cs @@ -33,15 +33,16 @@ public TestEffectiveConfiguration( IEnumerable versionFilters = null, bool tracksReleaseBranches = false, bool isRelease = false, - string commitDateFormat = "yyyy-MM-dd") : + string commitDateFormat = "yyyy-MM-dd", + bool useMergeMessageVersion = true) : base(assemblyVersioningScheme, assemblyFileVersioningScheme, assemblyInformationalFormat, assemblyVersioningFormat, assemblyFileVersioningFormat, versioningMode, gitTagPrefix, tag, nextVersion, IncrementStrategy.Patch, branchPrefixToTrim, preventIncrementForMergedBranchVersion, tagNumberPattern, continuousDeploymentFallbackTag, trackMergeTarget, majorMessage, minorMessage, patchMessage, noBumpMessage, commitMessageMode, legacySemVerPadding, buildMetaDataPadding, commitsSinceVersionSourcePadding, versionFilters ?? Enumerable.Empty(), - tracksReleaseBranches, isRelease, commitDateFormat) + tracksReleaseBranches, isRelease, commitDateFormat, useMergeMessageVersion) { } } -} \ No newline at end of file +} From 2587e8b89833781f3542b501cd2e2f4a82d56c4c Mon Sep 17 00:00:00 2001 From: David Driscoll Date: Sun, 14 Oct 2018 01:36:49 -0400 Subject: [PATCH 2/2] Added documentation --- docs/configuration.md | 7 ++++++- ...derTests.CanWriteOutEffectiveConfiguration.approved.txt | 1 + src/GitVersionCore/Configuration/BranchConfig.cs | 3 --- src/GitVersionCore/Configuration/ConfigurationProvider.cs | 2 +- src/GitVersionCore/GitVersionContext.cs | 2 +- 5 files changed, 9 insertions(+), 6 deletions(-) diff --git a/docs/configuration.md b/docs/configuration.md index 217041adbd..f37dc47815 100644 --- a/docs/configuration.md +++ b/docs/configuration.md @@ -45,6 +45,7 @@ build-metadata-padding: 4 commits-since-version-source-padding: 4 commit-message-incrementing: Enabled commit-date-format: 'yyyy-MM-dd' +use-merge-message-version: true ignore: sha: [] commits-before: yyyy-MM-ddTHH:mm:ss @@ -179,6 +180,10 @@ Date and time in the format `yyyy-MM-ddTHH:mm:ss` (eg `commits-before: 2015-10-23T12:23:15`) to setup an exclusion range. Effectively any commit before `commits-before` will be ignored. +#### use-merge-message-version +This configuration can be used to disable merge message version detection, where the version +is infered from the commit message. + ## Branch configuration Then we have branch specific configuration, which looks something like this: @@ -286,7 +291,7 @@ By looking at this graph, you cannot tell which of these scenarios happened: 2. release/1.0.0 branches off feature/foo - Branch feature/foo from master - - Branch release/1.0.0 from feature/foo + - Branch release/1.0.0 from feature/foo - Add a commit to both release/1.0.0 and feature/foo - feature/foo is the base for release/1.0.0 diff --git a/src/GitVersionCore.Tests/ConfigProviderTests.CanWriteOutEffectiveConfiguration.approved.txt b/src/GitVersionCore.Tests/ConfigProviderTests.CanWriteOutEffectiveConfiguration.approved.txt index 2650aedd2b..b6c9c2f2be 100644 --- a/src/GitVersionCore.Tests/ConfigProviderTests.CanWriteOutEffectiveConfiguration.approved.txt +++ b/src/GitVersionCore.Tests/ConfigProviderTests.CanWriteOutEffectiveConfiguration.approved.txt @@ -11,6 +11,7 @@ legacy-semver-padding: 4 build-metadata-padding: 4 commits-since-version-source-padding: 4 commit-message-incrementing: Enabled +use-merge-message-version: true branches: develop: mode: ContinuousDeployment diff --git a/src/GitVersionCore/Configuration/BranchConfig.cs b/src/GitVersionCore/Configuration/BranchConfig.cs index 0cbd9bf436..9fd8f6b199 100644 --- a/src/GitVersionCore/Configuration/BranchConfig.cs +++ b/src/GitVersionCore/Configuration/BranchConfig.cs @@ -72,9 +72,6 @@ public BranchConfig(BranchConfig branchConfiguration) [YamlMember(Alias = "is-mainline")] public bool? IsMainline { get; set; } - [YamlMember(Alias = "use-merge-message-version")] - public bool? UseMergeMessageVersion { get; set; } - /// /// The name given to this configuration in the config file. /// diff --git a/src/GitVersionCore/Configuration/ConfigurationProvider.cs b/src/GitVersionCore/Configuration/ConfigurationProvider.cs index 2c0577e8e8..aea89cc10c 100644 --- a/src/GitVersionCore/Configuration/ConfigurationProvider.cs +++ b/src/GitVersionCore/Configuration/ConfigurationProvider.cs @@ -102,7 +102,7 @@ public static void ApplyDefaultsTo(Config config) config.BuildMetaDataPadding = config.BuildMetaDataPadding ?? 4; config.CommitsSinceVersionSourcePadding = config.CommitsSinceVersionSourcePadding ?? 4; config.CommitDateFormat = config.CommitDateFormat ?? "yyyy-MM-dd"; - config.UseMergeMessageVersion = config.UseMergeMessageVersion ?? false; + config.UseMergeMessageVersion = config.UseMergeMessageVersion ?? true; var configBranches = config.Branches.ToList(); diff --git a/src/GitVersionCore/GitVersionContext.cs b/src/GitVersionCore/GitVersionContext.cs index 6e1c48c9b9..60513495da 100644 --- a/src/GitVersionCore/GitVersionContext.cs +++ b/src/GitVersionCore/GitVersionContext.cs @@ -134,7 +134,7 @@ void CalculateEffectiveConfiguration() var commitDateFormat = FullConfiguration.CommitDateFormat; var commitMessageVersionBump = currentBranchConfig.CommitMessageIncrementing ?? FullConfiguration.CommitMessageIncrementing.Value; - var useMergeMessageVersion = currentBranchConfig.UseMergeMessageVersion ?? FullConfiguration.UseMergeMessageVersion.Value; + var useMergeMessageVersion = FullConfiguration.UseMergeMessageVersion.Value; Configuration = new EffectiveConfiguration( assemblyVersioningScheme, assemblyFileVersioningScheme, assemblyInformationalFormat, assemblyVersioningFormat, assemblyFileVersioningFormat, versioningMode, gitTagPrefix,