Skip to content

Commit dc6f8b4

Browse files
committed
Changed the Continuous Deployment output to be more sensible
1 parent 3d90664 commit dc6f8b4

13 files changed

+182
-77
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
{
2+
"Major":1,
3+
"Minor":2,
4+
"Patch":3,
5+
"PreReleaseTag":"",
6+
"PreReleaseTagWithDash":"",
7+
"BuildMetaData":5,
8+
"FullBuildMetaData":"5.Branch.develop.Sha.commitSha",
9+
"MajorMinorPatch":"1.2.3",
10+
"SemVer":"1.2.3",
11+
"LegacySemVer":"1.2.3",
12+
"LegacySemVerPadded":"1.2.3",
13+
"AssemblySemVer":"1.2.3.0",
14+
"FullSemVer":"1.2.3+5",
15+
"InformationalVersion":"1.2.3+5.Branch.develop.Sha.commitSha",
16+
"BranchName":"develop",
17+
"Sha":"commitSha",
18+
"NuGetVersionV2":"1.2.3",
19+
"NuGetVersion":"1.2.3"
20+
}

GitVersionCore.Tests/VariableProviderTests.ProvidesVariablesInContinuousDeploymentMode.approved.txt

Lines changed: 0 additions & 20 deletions
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
{
2+
"Major":1,
3+
"Minor":2,
4+
"Patch":3,
5+
"PreReleaseTag":"unstable.5",
6+
"PreReleaseTagWithDash":"-unstable.5",
7+
"BuildMetaData":5,
8+
"FullBuildMetaData":"5.Branch.develop.Sha.commitSha",
9+
"MajorMinorPatch":"1.2.3",
10+
"SemVer":"1.2.3-unstable.5",
11+
"LegacySemVer":"1.2.3-unstable5",
12+
"LegacySemVerPadded":"1.2.3-unstable0005",
13+
"AssemblySemVer":"1.2.3.0",
14+
"FullSemVer":"1.2.3-unstable.5+4",
15+
"InformationalVersion":"1.2.3-unstable.5+4.Branch.develop.Sha.commitSha",
16+
"BranchName":"develop",
17+
"Sha":"commitSha",
18+
"NuGetVersionV2":"1.2.3-unstable0005",
19+
"NuGetVersion":"1.2.3-unstable0005"
20+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
{
2+
"Major":1,
3+
"Minor":2,
4+
"Patch":3,
5+
"PreReleaseTag":"",
6+
"PreReleaseTagWithDash":"",
7+
"BuildMetaData":5,
8+
"FullBuildMetaData":"5.Branch.develop.Sha.commitSha",
9+
"MajorMinorPatch":"1.2.3",
10+
"SemVer":"1.2.3.5",
11+
"LegacySemVer":"1.2.3.5",
12+
"LegacySemVerPadded":"1.2.3.5",
13+
"AssemblySemVer":"1.2.3.0",
14+
"FullSemVer":"1.2.3.5",
15+
"InformationalVersion":"1.2.3.5",
16+
"BranchName":"develop",
17+
"Sha":"commitSha",
18+
"NuGetVersionV2":"1.2.3.5",
19+
"NuGetVersion":"1.2.3.5"
20+
}

GitVersionCore.Tests/VariableProviderTests.cs

Lines changed: 40 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
public class VariableProviderTests
88
{
99
[Test]
10-
public void ProvidesVariablesInContinuousDeliveryMode()
10+
public void ProvidesVariablesInContinuousDeliveryModeForPreRelease()
1111
{
1212
var semVer = new SemanticVersion
1313
{
@@ -27,7 +27,7 @@ public void ProvidesVariablesInContinuousDeliveryMode()
2727
}
2828

2929
[Test]
30-
public void ProvidesVariablesInContinuousDeploymentMode()
30+
public void ProvidesVariablesInContinuousDeploymentModeForPreRelease()
3131
{
3232
var semVer = new SemanticVersion
3333
{
@@ -45,4 +45,42 @@ public void ProvidesVariablesInContinuousDeploymentMode()
4545

4646
Approvals.Verify(JsonOutputFormatter.ToJson(vars));
4747
}
48+
49+
[Test]
50+
public void ProvidesVariablesInContinuousDeliveryModeForStable()
51+
{
52+
var semVer = new SemanticVersion
53+
{
54+
Major = 1,
55+
Minor = 2,
56+
Patch = 3,
57+
BuildMetaData = "5.Branch.develop"
58+
};
59+
60+
semVer.BuildMetaData.Sha = "commitSha";
61+
semVer.BuildMetaData.CommitDate = DateTimeOffset.Parse("2014-03-06 23:59:59Z");
62+
63+
var vars = VariableProvider.GetVariablesFor(semVer, AssemblyVersioningScheme.MajorMinorPatch, VersioningMode.ContinuousDelivery);
64+
65+
Approvals.Verify(JsonOutputFormatter.ToJson(vars));
66+
}
67+
68+
[Test]
69+
public void ProvidesVariablesInContinuousDeploymentModeForStable()
70+
{
71+
var semVer = new SemanticVersion
72+
{
73+
Major = 1,
74+
Minor = 2,
75+
Patch = 3,
76+
BuildMetaData = "5.Branch.develop"
77+
};
78+
79+
semVer.BuildMetaData.Sha = "commitSha";
80+
semVer.BuildMetaData.CommitDate = DateTimeOffset.Parse("2014-03-06 23:59:59Z");
81+
82+
var vars = VariableProvider.GetVariablesFor(semVer, AssemblyVersioningScheme.MajorMinorPatch, VersioningMode.ContinuousDeployment);
83+
84+
Approvals.Verify(JsonOutputFormatter.ToJson(vars));
85+
}
4886
}

GitVersionCore/GitVersionCore.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@
8484
<Compile Include="Helpers\IFileSystem.cs" />
8585
<Compile Include="Helpers\ProcessHelper.cs" />
8686
<Compile Include="LastMinorVersionFinder.cs" />
87+
<Compile Include="OutputVariables\CommitsAsFourthVersionPartFormatter.cs" />
8788
<Compile Include="OutputVariables\VersionVariables.cs" />
8889
<Compile Include="SemanticVersionExtensions.cs" />
8990
<Compile Include="VersioningModes\ContinuousDeliveryMode.cs" />
@@ -124,7 +125,6 @@
124125
<Compile Include="OutputFormatters\BuildOutputFormatter.cs" />
125126
<Compile Include="OutputFormatters\JsonOutputFormatter.cs" />
126127
<Compile Include="OutputType.cs" />
127-
<Compile Include="OutputVariables\CiFeedFormatter.cs" />
128128
<Compile Include="OutputVariables\VariableProvider.cs" />
129129
<Compile Include="AssemblyInfo.cs" />
130130
<Compile Include="RepositoryLoader.cs" />

GitVersionCore/OutputVariables/CiFeedFormatter.cs

Lines changed: 0 additions & 47 deletions
This file was deleted.
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
namespace GitVersion
2+
{
3+
using System;
4+
5+
public class CommitsAsFourthVersionPartFormatter : IFormatProvider, ICustomFormatter
6+
{
7+
public object GetFormat(Type formatType)
8+
{
9+
if (formatType == typeof(SemanticVersion))
10+
return this;
11+
12+
return null;
13+
}
14+
15+
public string Format(string format, object arg, IFormatProvider formatProvider)
16+
{
17+
var semanticVersion = (SemanticVersion)arg;
18+
var metaData = new SemanticVersionBuildMetaData(semanticVersion.BuildMetaData)
19+
{
20+
CommitsSinceTag = null
21+
}.ToString();
22+
23+
return string.Format("{0}.{1}{2}{3}",
24+
semanticVersion.ToString("j"),
25+
semanticVersion.BuildMetaData.CommitsSinceTag,
26+
semanticVersion.PreReleaseTag.HasTag() ? "-" + semanticVersion.PreReleaseTag.ToString(format) : string.Empty,
27+
!string.IsNullOrEmpty(metaData) ? "+" + metaData : string.Empty);
28+
}
29+
}
30+
}

GitVersionCore/OutputVariables/VariableProvider.cs

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,29 @@
11
namespace GitVersion
22
{
3+
using System;
4+
35
public static class VariableProvider
46
{
57
public static VersionVariables GetVariablesFor(SemanticVersion semanticVersion, AssemblyVersioningScheme assemblyVersioningScheme, VersioningMode mode)
68
{
79
var bmd = semanticVersion.BuildMetaData;
8-
var formatter = mode == VersioningMode.ContinuousDeployment ? new CiFeedFormatter() : null;
10+
IFormatProvider formatProvider = null;
11+
if (mode == VersioningMode.ContinuousDeployment)
12+
{
13+
// For continuous deployment the commits since tag gets promoted to the pre-release number
14+
semanticVersion = new SemanticVersion(semanticVersion);
15+
if (semanticVersion.PreReleaseTag.HasTag())
16+
{
17+
var oldPreReleaseNumber = semanticVersion.PreReleaseTag.Number;
18+
semanticVersion.PreReleaseTag.Number = semanticVersion.BuildMetaData.CommitsSinceTag;
19+
semanticVersion.BuildMetaData.CommitsSinceTag = oldPreReleaseNumber;
20+
}
21+
else
22+
{
23+
// When there is no pre-release tag we will make the version a 4 part number
24+
formatProvider = new CommitsAsFourthVersionPartFormatter();
25+
}
26+
}
927

1028
var variables = new VersionVariables(
1129
major: semanticVersion.Major.ToString(),
@@ -16,12 +34,12 @@ public static VersionVariables GetVariablesFor(SemanticVersion semanticVersion,
1634
buildMetaData: bmd,
1735
fullBuildMetaData: bmd.ToString("f"),
1836
majorMinorPatch: string.Format("{0}.{1}.{2}", semanticVersion.Major, semanticVersion.Minor, semanticVersion.Patch),
19-
semVer: semanticVersion.ToString(null, formatter),
20-
legacySemVer: semanticVersion.ToString("l", formatter),
21-
legacySemVerPadded: semanticVersion.ToString("lp", formatter),
37+
semVer: semanticVersion.ToString(null, formatProvider),
38+
legacySemVer: semanticVersion.ToString("l", formatProvider),
39+
legacySemVerPadded: semanticVersion.ToString("lp", formatProvider),
2240
assemblySemVer: semanticVersion.GetAssemblyVersion(assemblyVersioningScheme),
23-
fullSemVer: semanticVersion.ToString("f", formatter),
24-
informationalVersion: semanticVersion.ToString("i", formatter),
41+
fullSemVer: semanticVersion.ToString("f", formatProvider),
42+
informationalVersion: semanticVersion.ToString("i", formatProvider),
2543
branchName: bmd.Branch,
2644
sha: bmd.Sha);
2745

GitVersionCore/SemanticVersion.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,16 @@ public SemanticVersion()
2121
BuildMetaData = new SemanticVersionBuildMetaData();
2222
}
2323

24+
public SemanticVersion(SemanticVersion semanticVersion)
25+
{
26+
Major = semanticVersion.Major;
27+
Minor = semanticVersion.Minor;
28+
Patch = semanticVersion.Patch;
29+
30+
PreReleaseTag = new SemanticVersionPreReleaseTag(semanticVersion.PreReleaseTag);
31+
BuildMetaData = new SemanticVersionBuildMetaData(semanticVersion.BuildMetaData);
32+
}
33+
2434
public bool Equals(SemanticVersion obj)
2535
{
2636
if (obj == null)

GitVersionCore/SemanticVersionBuildMetaData.cs

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,14 +22,23 @@ public SemanticVersionBuildMetaData()
2222
{
2323
}
2424

25-
public SemanticVersionBuildMetaData(int? commitsSinceTag, string branch, string commitSha,DateTimeOffset commitDate)
25+
public SemanticVersionBuildMetaData(int? commitsSinceTag, string branch, string commitSha, DateTimeOffset commitDate, string otherMetadata = null)
2626
{
2727
Sha = commitSha;
2828
CommitsSinceTag = commitsSinceTag;
2929
Branch = branch;
3030
CommitDate = commitDate;
31+
OtherMetaData = otherMetadata;
3132
}
3233

34+
public SemanticVersionBuildMetaData(SemanticVersionBuildMetaData buildMetaData)
35+
{
36+
Sha = buildMetaData.Sha;
37+
CommitsSinceTag = buildMetaData.CommitsSinceTag;
38+
Branch = buildMetaData.Branch;
39+
CommitDate = buildMetaData.CommitDate;
40+
OtherMetaData = buildMetaData.OtherMetaData;
41+
}
3342

3443
public override bool Equals(object obj)
3544
{

GitVersionCore/SemanticVersionPreReleaseTag.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,13 @@ public SemanticVersionPreReleaseTag(string name, int? number)
1818
Name = name;
1919
Number = number;
2020
}
21+
22+
public SemanticVersionPreReleaseTag(SemanticVersionPreReleaseTag preReleaseTag)
23+
{
24+
Name = preReleaseTag.Name;
25+
Number = preReleaseTag.Number;
26+
}
27+
2128
public string Name { get; set; }
2229
public int? Number { get; set; }
2330

0 commit comments

Comments
 (0)