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/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/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.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..9fd8f6b199 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; 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..aea89cc10c 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 ?? true; 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..60513495da 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 = 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 +}