From 68285ff58b2f2d542e1b581c03bebf26fd0c65d5 Mon Sep 17 00:00:00 2001 From: Oliver Daum Date: Fri, 6 Oct 2017 16:46:42 +0200 Subject: [PATCH 1/2] Add configuration parameter to format CommitDate #1305 --- docs/configuration.md | 4 ++ src/GitVersionCore.Tests/CommitDateTests.cs | 51 +++++++++++++++++++ ...riteOutEffectiveConfiguration.approved.txt | 1 + .../GitVersionCore.Tests.csproj | 1 + .../TestEffectiveConfiguration.cs | 5 +- src/GitVersionCore/Configuration/Config.cs | 3 ++ .../Configuration/ConfigurationProvider.cs | 3 +- src/GitVersionCore/EffectiveConfiguration.cs | 6 ++- src/GitVersionCore/GitVersionContext.cs | 4 +- .../SemanticVersionFormatValues.cs | 2 +- 10 files changed, 74 insertions(+), 6 deletions(-) create mode 100644 src/GitVersionCore.Tests/CommitDateTests.cs diff --git a/docs/configuration.md b/docs/configuration.md index d66220c884..04ed44ae24 100644 --- a/docs/configuration.md +++ b/docs/configuration.md @@ -44,6 +44,7 @@ legacy-semver-padding: 4 build-metadata-padding: 4 commits-since-version-source-padding: 4 commit-message-incrementing: Enabled +commit-date-format: 'yyyy-MM-dd' ignore: sha: [] commits-before: yyyy-MM-ddTHH:mm:ss @@ -136,6 +137,9 @@ Sets whether it should be possible to increment the version with special syntax in the commit message. See the `*-version-bump-message` options above for details on the syntax. Default set to `Enabled`; set to `Disabled` to disable. +### commit-date-format +Sets the format which will be used to format the `CommitDate` output variable. + ### ignore The header for ignore configuration. diff --git a/src/GitVersionCore.Tests/CommitDateTests.cs b/src/GitVersionCore.Tests/CommitDateTests.cs new file mode 100644 index 0000000000..137a45992a --- /dev/null +++ b/src/GitVersionCore.Tests/CommitDateTests.cs @@ -0,0 +1,51 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using GitVersion; +using GitVersion.VersionFilters; +using NUnit.Framework; + +namespace GitVersionCore.Tests +{ + [TestFixture] + public class CommitDateTests + { + public static IEnumerable CommitDateFormatTestCases + { + get + { + var date = new DateTime(2017, 10, 6); + + var testCasesFormats = new[] + { + "yyyy-MM-dd", + "dd.MM.yyyy", + "yyyyMMdd", + "yyyy-MM" + }; + + foreach (var format in testCasesFormats) + yield return new TestCaseData(date, format, date.ToString(format)); + } + } + + [Test] + [TestCaseSource(nameof(CommitDateFormatTestCases))] + public void CommitDateFormatTest(DateTime date, string format, string expectedOutcome) + { + var formatValues = new SemanticVersionFormatValues( + new SemanticVersion + { + BuildMetaData = new SemanticVersionBuildMetaData(0, "master", "3139d4eeb044f46057693473eacc2655b3b27e7d", new DateTimeOffset(date, TimeSpan.Zero)), // assume time zone is UTC + + }, + new EffectiveConfiguration( + AssemblyVersioningScheme.MajorMinorPatch, AssemblyFileVersioningScheme.MajorMinorPatch, "", VersioningMode.ContinuousDelivery, "", "", "", IncrementStrategy.Inherit, + "", true, "", "", false, "", "", "", "", CommitMessageIncrementMode.Enabled, 4, 4, 4, Enumerable.Empty(), false, true, format) + ); + + 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 1a0c0ba54b..2650aedd2b 100644 --- a/src/GitVersionCore.Tests/ConfigProviderTests.CanWriteOutEffectiveConfiguration.approved.txt +++ b/src/GitVersionCore.Tests/ConfigProviderTests.CanWriteOutEffectiveConfiguration.approved.txt @@ -114,3 +114,4 @@ branches: is-mainline: true ignore: sha: [] +commit-date-format: yyyy-MM-dd diff --git a/src/GitVersionCore.Tests/GitVersionCore.Tests.csproj b/src/GitVersionCore.Tests/GitVersionCore.Tests.csproj index 1c888abf5a..d1f5a93bf4 100644 --- a/src/GitVersionCore.Tests/GitVersionCore.Tests.csproj +++ b/src/GitVersionCore.Tests/GitVersionCore.Tests.csproj @@ -94,6 +94,7 @@ + diff --git a/src/GitVersionCore.Tests/TestEffectiveConfiguration.cs b/src/GitVersionCore.Tests/TestEffectiveConfiguration.cs index 3256c2d90e..1fc326056a 100644 --- a/src/GitVersionCore.Tests/TestEffectiveConfiguration.cs +++ b/src/GitVersionCore.Tests/TestEffectiveConfiguration.cs @@ -30,14 +30,15 @@ public TestEffectiveConfiguration( int commitsSinceVersionSourcePadding = 4, IEnumerable versionFilters = null, bool tracksReleaseBranches = false, - bool isRelease = false) : + bool isRelease = false, + string commitDateFormat = "yyyy-MM-dd") : base(assemblyVersioningScheme, assemblyFileVersioningScheme, assemblyInformationalFormat, versioningMode, gitTagPrefix, tag, nextVersion, IncrementStrategy.Patch, branchPrefixToTrim, preventIncrementForMergedBranchVersion, tagNumberPattern, continuousDeploymentFallbackTag, trackMergeTarget, majorMessage, minorMessage, patchMessage, noBumpMessage, commitMessageMode, legacySemVerPadding, buildMetaDataPadding, commitsSinceVersionSourcePadding, versionFilters ?? Enumerable.Empty(), - tracksReleaseBranches, isRelease) + tracksReleaseBranches, isRelease, commitDateFormat) { } } diff --git a/src/GitVersionCore/Configuration/Config.cs b/src/GitVersionCore/Configuration/Config.cs index a5d6dcecf8..a1d7e3f010 100644 --- a/src/GitVersionCore/Configuration/Config.cs +++ b/src/GitVersionCore/Configuration/Config.cs @@ -134,5 +134,8 @@ T MergeObjects(T target, T source) [YamlMember(Alias = "increment")] public IncrementStrategy? Increment { get; set; } + + [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 1c9a98e71d..b72cd9ff3c 100644 --- a/src/GitVersionCore/Configuration/ConfigurationProvider.cs +++ b/src/GitVersionCore/Configuration/ConfigurationProvider.cs @@ -99,6 +99,7 @@ public static void ApplyDefaultsTo(Config config) config.LegacySemVerPadding = config.LegacySemVerPadding ?? 4; config.BuildMetaDataPadding = config.BuildMetaDataPadding ?? 4; config.CommitsSinceVersionSourcePadding = config.CommitsSinceVersionSourcePadding ?? 4; + config.CommitDateFormat = config.CommitDateFormat ?? "yyyy-MM-dd"; var configBranches = config.Branches.ToList(); @@ -260,7 +261,7 @@ public static void Verify(GitPreparer gitPreparer, IFileSystem fileSystem) { if (!string.IsNullOrWhiteSpace(gitPreparer.TargetUrl)) { - // Assuming this is a dynamic repository. At this stage it's unsure whether we have + // Assuming this is a dynamic repository. At this stage it's unsure whether we have // any .git info so we need to skip verification return; } diff --git a/src/GitVersionCore/EffectiveConfiguration.cs b/src/GitVersionCore/EffectiveConfiguration.cs index a33af8b1b8..3ce643e31c 100644 --- a/src/GitVersionCore/EffectiveConfiguration.cs +++ b/src/GitVersionCore/EffectiveConfiguration.cs @@ -29,7 +29,8 @@ public EffectiveConfiguration( int commitsSinceVersionSourcePadding, IEnumerable versionFilters, bool tracksReleaseBranches, - bool isCurrentBranchRelease) + bool isCurrentBranchRelease, + string commitDateFormat) { AssemblyVersioningScheme = assemblyVersioningScheme; AssemblyFileVersioningScheme = assemblyFileVersioningScheme; @@ -55,6 +56,7 @@ public EffectiveConfiguration( VersionFilters = versionFilters; TracksReleaseBranches = tracksReleaseBranches; IsCurrentBranchRelease = isCurrentBranchRelease; + CommitDateFormat = commitDateFormat; } public bool TracksReleaseBranches { get; private set; } @@ -105,5 +107,7 @@ public EffectiveConfiguration( public CommitMessageIncrementMode CommitMessageIncrementing { get; private set; } public IEnumerable VersionFilters { get; private set; } + + public string CommitDateFormat { get; private set; } } } \ No newline at end of file diff --git a/src/GitVersionCore/GitVersionContext.cs b/src/GitVersionCore/GitVersionContext.cs index 08eeccb7c9..67bd267ef0 100644 --- a/src/GitVersionCore/GitVersionContext.cs +++ b/src/GitVersionCore/GitVersionContext.cs @@ -127,6 +127,7 @@ void CalculateEffectiveConfiguration() var minorMessage = FullConfiguration.MinorVersionBumpMessage; var patchMessage = FullConfiguration.PatchVersionBumpMessage; var noBumpMessage = FullConfiguration.NoBumpMessage; + var commitDateFormat = FullConfiguration.CommitDateFormat; var commitMessageVersionBump = currentBranchConfig.CommitMessageIncrementing ?? FullConfiguration.CommitMessageIncrementing.Value; @@ -144,7 +145,8 @@ void CalculateEffectiveConfiguration() FullConfiguration.CommitsSinceVersionSourcePadding.Value, FullConfiguration.Ignore.ToFilters(), currentBranchConfig.TracksReleaseBranches.Value, - currentBranchConfig.IsReleaseBranch.Value); + currentBranchConfig.IsReleaseBranch.Value, + commitDateFormat); } private static Branch GetTargetBranch(IRepository repository, string targetBranch) diff --git a/src/GitVersionCore/SemanticVersionFormatValues.cs b/src/GitVersionCore/SemanticVersionFormatValues.cs index 02707e630d..91619ccef4 100644 --- a/src/GitVersionCore/SemanticVersionFormatValues.cs +++ b/src/GitVersionCore/SemanticVersionFormatValues.cs @@ -109,7 +109,7 @@ public string Sha public string CommitDate { - get { return _semver.BuildMetaData.CommitDate.UtcDateTime.ToString("yyyy-MM-dd"); } + get { return _semver.BuildMetaData.CommitDate.UtcDateTime.ToString(_config.CommitDateFormat); } } // TODO When NuGet 3 is released: public string NuGetVersionV3 { get { return ??; } } From dcc9c2b230c0c3e26980d062f75e32bc25488745 Mon Sep 17 00:00:00 2001 From: Oliver Daum Date: Fri, 13 Oct 2017 17:11:36 +0200 Subject: [PATCH 2/2] Review issues fixed --- src/GitVersionCore.Tests/CommitDateTests.cs | 28 +++++-------------- .../SemanticVersionFormatValues.cs | 2 +- 2 files changed, 8 insertions(+), 22 deletions(-) diff --git a/src/GitVersionCore.Tests/CommitDateTests.cs b/src/GitVersionCore.Tests/CommitDateTests.cs index 137a45992a..4872031fdd 100644 --- a/src/GitVersionCore.Tests/CommitDateTests.cs +++ b/src/GitVersionCore.Tests/CommitDateTests.cs @@ -11,29 +11,15 @@ namespace GitVersionCore.Tests [TestFixture] public class CommitDateTests { - public static IEnumerable CommitDateFormatTestCases - { - get - { - var date = new DateTime(2017, 10, 6); - - var testCasesFormats = new[] - { - "yyyy-MM-dd", - "dd.MM.yyyy", - "yyyyMMdd", - "yyyy-MM" - }; - - foreach (var format in testCasesFormats) - yield return new TestCaseData(date, format, date.ToString(format)); - } - } - [Test] - [TestCaseSource(nameof(CommitDateFormatTestCases))] - public void CommitDateFormatTest(DateTime date, string format, string expectedOutcome) + [TestCase("yyyy-MM-dd", "2017-10-06")] + [TestCase("dd.MM.yyyy", "06.10.2017")] + [TestCase("yyyyMMdd", "20171006")] + [TestCase("yyyy-MM", "2017-10")] + public void CommitDateFormatTest(string format, string expectedOutcome) { + var date = new DateTime(2017, 10, 6); + var formatValues = new SemanticVersionFormatValues( new SemanticVersion { diff --git a/src/GitVersionCore/SemanticVersionFormatValues.cs b/src/GitVersionCore/SemanticVersionFormatValues.cs index 91619ccef4..0afafe6e01 100644 --- a/src/GitVersionCore/SemanticVersionFormatValues.cs +++ b/src/GitVersionCore/SemanticVersionFormatValues.cs @@ -109,7 +109,7 @@ public string Sha public string CommitDate { - get { return _semver.BuildMetaData.CommitDate.UtcDateTime.ToString(_config.CommitDateFormat); } + get { return _semver.BuildMetaData.CommitDate.UtcDateTime.ToString(_config.CommitDateFormat, CultureInfo.InvariantCulture); } } // TODO When NuGet 3 is released: public string NuGetVersionV3 { get { return ??; } }