Skip to content

Commit 6d90d26

Browse files
authored
Merge pull request #1306 from ccHanibal/feature-commitdateformatconfigurable
Add configuration parameter to format CommitDate #1305
2 parents 0678efa + dcc9c2b commit 6d90d26

10 files changed

+60
-6
lines changed

docs/configuration.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ legacy-semver-padding: 4
4444
build-metadata-padding: 4
4545
commits-since-version-source-padding: 4
4646
commit-message-incrementing: Enabled
47+
commit-date-format: 'yyyy-MM-dd'
4748
ignore:
4849
sha: []
4950
commits-before: yyyy-MM-ddTHH:mm:ss
@@ -136,6 +137,9 @@ Sets whether it should be possible to increment the version with special syntax
136137
in the commit message. See the `*-version-bump-message` options above for
137138
details on the syntax. Default set to `Enabled`; set to `Disabled` to disable.
138139

140+
### commit-date-format
141+
Sets the format which will be used to format the `CommitDate` output variable.
142+
139143
### ignore
140144
The header for ignore configuration.
141145

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
using System;
2+
using System.Collections;
3+
using System.Collections.Generic;
4+
using System.Linq;
5+
using GitVersion;
6+
using GitVersion.VersionFilters;
7+
using NUnit.Framework;
8+
9+
namespace GitVersionCore.Tests
10+
{
11+
[TestFixture]
12+
public class CommitDateTests
13+
{
14+
[Test]
15+
[TestCase("yyyy-MM-dd", "2017-10-06")]
16+
[TestCase("dd.MM.yyyy", "06.10.2017")]
17+
[TestCase("yyyyMMdd", "20171006")]
18+
[TestCase("yyyy-MM", "2017-10")]
19+
public void CommitDateFormatTest(string format, string expectedOutcome)
20+
{
21+
var date = new DateTime(2017, 10, 6);
22+
23+
var formatValues = new SemanticVersionFormatValues(
24+
new SemanticVersion
25+
{
26+
BuildMetaData = new SemanticVersionBuildMetaData(0, "master", "3139d4eeb044f46057693473eacc2655b3b27e7d", new DateTimeOffset(date, TimeSpan.Zero)), // assume time zone is UTC
27+
28+
},
29+
new EffectiveConfiguration(
30+
AssemblyVersioningScheme.MajorMinorPatch, AssemblyFileVersioningScheme.MajorMinorPatch, "", VersioningMode.ContinuousDelivery, "", "", "", IncrementStrategy.Inherit,
31+
"", true, "", "", false, "", "", "", "", CommitMessageIncrementMode.Enabled, 4, 4, 4, Enumerable.Empty<IVersionFilter>(), false, true, format)
32+
);
33+
34+
Assert.That(formatValues.CommitDate, Is.EqualTo(expectedOutcome));
35+
}
36+
}
37+
}

src/GitVersionCore.Tests/ConfigProviderTests.CanWriteOutEffectiveConfiguration.approved.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,3 +114,4 @@ branches:
114114
is-mainline: true
115115
ignore:
116116
sha: []
117+
commit-date-format: yyyy-MM-dd

src/GitVersionCore.Tests/GitVersionCore.Tests.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@
9494
<Compile Include="BuildServers\VsoAgentBuildNumberTests.cs" />
9595
<Compile Include="BuildServers\VsoAgentTests.cs" />
9696
<Compile Include="BuildServers\TeamCityTests.cs" />
97+
<Compile Include="CommitDateTests.cs" />
9798
<Compile Include="Configuration\IgnoreConfigTests.cs" />
9899
<Compile Include="DynamicRepositoryTests.cs" />
99100
<Compile Include="GitRepoMetadataProviderTests.cs" />

src/GitVersionCore.Tests/TestEffectiveConfiguration.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,14 +30,15 @@ public TestEffectiveConfiguration(
3030
int commitsSinceVersionSourcePadding = 4,
3131
IEnumerable<IVersionFilter> versionFilters = null,
3232
bool tracksReleaseBranches = false,
33-
bool isRelease = false) :
33+
bool isRelease = false,
34+
string commitDateFormat = "yyyy-MM-dd") :
3435
base(assemblyVersioningScheme, assemblyFileVersioningScheme, assemblyInformationalFormat, versioningMode, gitTagPrefix, tag, nextVersion, IncrementStrategy.Patch,
3536
branchPrefixToTrim, preventIncrementForMergedBranchVersion, tagNumberPattern, continuousDeploymentFallbackTag,
3637
trackMergeTarget,
3738
majorMessage, minorMessage, patchMessage, noBumpMessage,
3839
commitMessageMode, legacySemVerPadding, buildMetaDataPadding, commitsSinceVersionSourcePadding,
3940
versionFilters ?? Enumerable.Empty<IVersionFilter>(),
40-
tracksReleaseBranches, isRelease)
41+
tracksReleaseBranches, isRelease, commitDateFormat)
4142
{
4243
}
4344
}

src/GitVersionCore/Configuration/Config.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,5 +134,8 @@ T MergeObjects<T>(T target, T source)
134134

135135
[YamlMember(Alias = "increment")]
136136
public IncrementStrategy? Increment { get; set; }
137+
138+
[YamlMember(Alias = "commit-date-format")]
139+
public string CommitDateFormat { get; set; }
137140
}
138141
}

src/GitVersionCore/Configuration/ConfigurationProvider.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,7 @@ public static void ApplyDefaultsTo(Config config)
9999
config.LegacySemVerPadding = config.LegacySemVerPadding ?? 4;
100100
config.BuildMetaDataPadding = config.BuildMetaDataPadding ?? 4;
101101
config.CommitsSinceVersionSourcePadding = config.CommitsSinceVersionSourcePadding ?? 4;
102+
config.CommitDateFormat = config.CommitDateFormat ?? "yyyy-MM-dd";
102103

103104
var configBranches = config.Branches.ToList();
104105

@@ -260,7 +261,7 @@ public static void Verify(GitPreparer gitPreparer, IFileSystem fileSystem)
260261
{
261262
if (!string.IsNullOrWhiteSpace(gitPreparer.TargetUrl))
262263
{
263-
// Assuming this is a dynamic repository. At this stage it's unsure whether we have
264+
// Assuming this is a dynamic repository. At this stage it's unsure whether we have
264265
// any .git info so we need to skip verification
265266
return;
266267
}

src/GitVersionCore/EffectiveConfiguration.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,8 @@ public EffectiveConfiguration(
2929
int commitsSinceVersionSourcePadding,
3030
IEnumerable<IVersionFilter> versionFilters,
3131
bool tracksReleaseBranches,
32-
bool isCurrentBranchRelease)
32+
bool isCurrentBranchRelease,
33+
string commitDateFormat)
3334
{
3435
AssemblyVersioningScheme = assemblyVersioningScheme;
3536
AssemblyFileVersioningScheme = assemblyFileVersioningScheme;
@@ -55,6 +56,7 @@ public EffectiveConfiguration(
5556
VersionFilters = versionFilters;
5657
TracksReleaseBranches = tracksReleaseBranches;
5758
IsCurrentBranchRelease = isCurrentBranchRelease;
59+
CommitDateFormat = commitDateFormat;
5860
}
5961

6062
public bool TracksReleaseBranches { get; private set; }
@@ -105,5 +107,7 @@ public EffectiveConfiguration(
105107
public CommitMessageIncrementMode CommitMessageIncrementing { get; private set; }
106108

107109
public IEnumerable<IVersionFilter> VersionFilters { get; private set; }
110+
111+
public string CommitDateFormat { get; private set; }
108112
}
109113
}

src/GitVersionCore/GitVersionContext.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,7 @@ void CalculateEffectiveConfiguration()
127127
var minorMessage = FullConfiguration.MinorVersionBumpMessage;
128128
var patchMessage = FullConfiguration.PatchVersionBumpMessage;
129129
var noBumpMessage = FullConfiguration.NoBumpMessage;
130+
var commitDateFormat = FullConfiguration.CommitDateFormat;
130131

131132
var commitMessageVersionBump = currentBranchConfig.CommitMessageIncrementing ?? FullConfiguration.CommitMessageIncrementing.Value;
132133

@@ -144,7 +145,8 @@ void CalculateEffectiveConfiguration()
144145
FullConfiguration.CommitsSinceVersionSourcePadding.Value,
145146
FullConfiguration.Ignore.ToFilters(),
146147
currentBranchConfig.TracksReleaseBranches.Value,
147-
currentBranchConfig.IsReleaseBranch.Value);
148+
currentBranchConfig.IsReleaseBranch.Value,
149+
commitDateFormat);
148150
}
149151

150152
private static Branch GetTargetBranch(IRepository repository, string targetBranch)

src/GitVersionCore/SemanticVersionFormatValues.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ public string Sha
109109

110110
public string CommitDate
111111
{
112-
get { return _semver.BuildMetaData.CommitDate.UtcDateTime.ToString("yyyy-MM-dd"); }
112+
get { return _semver.BuildMetaData.CommitDate.UtcDateTime.ToString(_config.CommitDateFormat, CultureInfo.InvariantCulture); }
113113
}
114114

115115
// TODO When NuGet 3 is released: public string NuGetVersionV3 { get { return ??; } }

0 commit comments

Comments
 (0)