Skip to content

Commit 0e5a247

Browse files
committed
Add CommitsSinceVersionSourceList to VariablesProvider.
1 parent 110abbc commit 0e5a247

File tree

12 files changed

+82
-6
lines changed

12 files changed

+82
-6
lines changed

src/GitVersion.Core.Tests/Extensions/GitRepositoryTestingExtensions.cs

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,29 @@ public static void AssertFullSemver(this RepositoryFixtureBase fixture, string f
156156
}
157157
}
158158

159+
public static void AssertCommitsSinceVersionSource(this RepositoryFixtureBase fixture, int commitsSinceVersionSourceExpected,
160+
IGitVersionConfiguration? configuration = null, IRepository? repository = null, string? commitId = null, bool onlyTrackedBranches = true, string? targetBranch = null, string? customMessage = null)
161+
{
162+
repository ??= fixture.Repository;
163+
164+
var variables = GetVersion(fixture, configuration, repository, commitId, onlyTrackedBranches, targetBranch);
165+
variables.CommitsSinceVersionSource.ShouldBe(commitsSinceVersionSourceExpected.ToString(), customMessage);
166+
if (commitId == null)
167+
{
168+
var message = new StringBuilder($"CommitsSinceVersionSource:{commitsSinceVersionSourceExpected}");
169+
if (variables.CommitsSinceVersionSourceList != null)
170+
{
171+
foreach (var sha in variables.CommitsSinceVersionSourceList)
172+
{
173+
message.Append(System.Environment.NewLine);
174+
message.Append($"- {sha}");
175+
}
176+
}
177+
178+
fixture.SequenceDiagram.NoteOver(message.ToString(), repository.Head.FriendlyName, color: "#D3D3D3");
179+
}
180+
}
181+
159182
/// <summary>
160183
/// Simulates running on build server
161184
/// </summary>

src/GitVersion.Core.Tests/Helpers/TestableGitVersionVariables.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,4 +26,5 @@ internal record TestableGitVersionVariables() : GitVersionVariables("",
2626
"",
2727
"",
2828
"",
29+
"",
2930
"");

src/GitVersion.Core.Tests/IntegrationTests/GitflowScenarios.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@ public void GitflowComplexExample()
8989
fixture.AssertFullSemver("1.2.1-2", configuration);
9090
fixture.ApplyTag("1.2.1");
9191
fixture.AssertFullSemver("1.2.1", configuration);
92+
fixture.AssertCommitsSinceVersionSource(2, configuration);
9293
fixture.Checkout(developBranch);
9394
fixture.MergeNoFF(hotfixBranch);
9495
if (!keepBranches)

src/GitVersion.Core.Tests/VersionCalculation/VersionSourceTests.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ public void VersionSourceSha()
2424
var semanticVersion = nextVersionCalculator.FindVersion();
2525

2626
semanticVersion.BuildMetaData.VersionSourceSha.ShouldBeNull();
27+
semanticVersion.BuildMetaData.CommitsSinceVersionSourceList.Length.ShouldBe((int)semanticVersion.BuildMetaData.CommitsSinceVersionSource);
2728
semanticVersion.BuildMetaData.CommitsSinceVersionSource.ShouldBe(3);
2829
}
2930

@@ -39,6 +40,7 @@ public void VersionSourceShaOneCommit()
3940
var semanticVersion = nextVersionCalculator.FindVersion();
4041

4142
semanticVersion.BuildMetaData.VersionSourceSha.ShouldBeNull();
43+
semanticVersion.BuildMetaData.CommitsSinceVersionSourceList.Length.ShouldBe((int)semanticVersion.BuildMetaData.CommitsSinceVersionSource);
4244
semanticVersion.BuildMetaData.CommitsSinceVersionSource.ShouldBe(1);
4345
}
4446

@@ -58,6 +60,9 @@ public void VersionSourceShaUsingTag()
5860
var semanticVersion = nextVersionCalculator.FindVersion();
5961

6062
semanticVersion.BuildMetaData.VersionSourceSha.ShouldBe(secondCommitSha);
63+
#if DEBUG
64+
semanticVersion.BuildMetaData.CommitsSinceVersionSourceList.Length.ShouldBe((int)semanticVersion.BuildMetaData.CommitsSinceVersionSource);
65+
#endif
6166
semanticVersion.BuildMetaData.CommitsSinceVersionSource.ShouldBe(1);
6267
}
6368

src/GitVersion.Core/OutputVariables/GitVersionVariables.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ public record GitVersionVariables(string Major,
2424
string? CommitDate,
2525
string? VersionSourceSha,
2626
string? CommitsSinceVersionSource,
27+
string? CommitsSinceVersionSourceList,
2728
string? UncommittedChanges) : IEnumerable<KeyValuePair<string, string?>>
2829
{
2930
internal static readonly List<string> AvailableVariables =
@@ -52,6 +53,7 @@ public record GitVersionVariables(string Major,
5253
nameof(CommitDate),
5354
nameof(VersionSourceSha),
5455
nameof(CommitsSinceVersionSource),
56+
nameof(CommitsSinceVersionSourceList),
5557
nameof(UncommittedChanges)
5658
];
5759

@@ -81,6 +83,7 @@ public record GitVersionVariables(string Major,
8183
{ nameof(CommitDate), CommitDate },
8284
{ nameof(VersionSourceSha), VersionSourceSha },
8385
{ nameof(CommitsSinceVersionSource), CommitsSinceVersionSource },
86+
{ nameof(CommitsSinceVersionSourceList), CommitsSinceVersionSourceList },
8487
{ nameof(UncommittedChanges), UncommittedChanges }
8588
};
8689

src/GitVersion.Core/PublicAPI.Shipped.txt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -426,14 +426,16 @@ GitVersion.OutputVariables.GitVersionVariables.CommitDate.get -> string?
426426
GitVersion.OutputVariables.GitVersionVariables.CommitDate.init -> void
427427
GitVersion.OutputVariables.GitVersionVariables.CommitsSinceVersionSource.get -> string?
428428
GitVersion.OutputVariables.GitVersionVariables.CommitsSinceVersionSource.init -> void
429+
GitVersion.OutputVariables.GitVersionVariables.CommitsSinceVersionSourceList.get -> string?
430+
GitVersion.OutputVariables.GitVersionVariables.CommitsSinceVersionSourceList.init -> void
429431
GitVersion.OutputVariables.GitVersionVariables.EscapedBranchName.get -> string?
430432
GitVersion.OutputVariables.GitVersionVariables.EscapedBranchName.init -> void
431433
GitVersion.OutputVariables.GitVersionVariables.FullBuildMetaData.get -> string?
432434
GitVersion.OutputVariables.GitVersionVariables.FullBuildMetaData.init -> void
433435
GitVersion.OutputVariables.GitVersionVariables.FullSemVer.get -> string!
434436
GitVersion.OutputVariables.GitVersionVariables.FullSemVer.init -> void
435437
GitVersion.OutputVariables.GitVersionVariables.GetEnumerator() -> System.Collections.Generic.IEnumerator<System.Collections.Generic.KeyValuePair<string!, string?>>!
436-
GitVersion.OutputVariables.GitVersionVariables.GitVersionVariables(string! Major, string! Minor, string! Patch, string? BuildMetaData, string? FullBuildMetaData, string? BranchName, string? EscapedBranchName, string? Sha, string? ShortSha, string! MajorMinorPatch, string! SemVer, string! FullSemVer, string? AssemblySemVer, string? AssemblySemFileVer, string? PreReleaseTag, string? PreReleaseTagWithDash, string? PreReleaseLabel, string? PreReleaseLabelWithDash, string? PreReleaseNumber, string! WeightedPreReleaseNumber, string? InformationalVersion, string? CommitDate, string? VersionSourceSha, string? CommitsSinceVersionSource, string? UncommittedChanges) -> void
438+
GitVersion.OutputVariables.GitVersionVariables.GitVersionVariables(string! Major, string! Minor, string! Patch, string? BuildMetaData, string? FullBuildMetaData, string? BranchName, string? EscapedBranchName, string? Sha, string? ShortSha, string! MajorMinorPatch, string! SemVer, string! FullSemVer, string? AssemblySemVer, string? AssemblySemFileVer, string? PreReleaseTag, string? PreReleaseTagWithDash, string? PreReleaseLabel, string? PreReleaseLabelWithDash, string? PreReleaseNumber, string! WeightedPreReleaseNumber, string? InformationalVersion, string? CommitDate, string? VersionSourceSha, string? CommitsSinceVersionSource, string? CommitsSinceVersionSourceList, string? UncommittedChanges) -> void
437439
GitVersion.OutputVariables.GitVersionVariables.InformationalVersion.get -> string?
438440
GitVersion.OutputVariables.GitVersionVariables.InformationalVersion.init -> void
439441
GitVersion.OutputVariables.GitVersionVariables.Major.get -> string!
@@ -520,6 +522,8 @@ GitVersion.SemanticVersionBuildMetaData.CommitsSinceTag.get -> long?
520522
GitVersion.SemanticVersionBuildMetaData.CommitsSinceTag.init -> void
521523
GitVersion.SemanticVersionBuildMetaData.CommitsSinceVersionSource.get -> long
522524
GitVersion.SemanticVersionBuildMetaData.CommitsSinceVersionSource.init -> void
525+
GitVersion.SemanticVersionBuildMetaData.CommitsSinceVersionSourceList.get -> string[]
526+
GitVersion.SemanticVersionBuildMetaData.CommitsSinceVersionSourceList.init -> void
523527
GitVersion.SemanticVersionBuildMetaData.Equals(GitVersion.SemanticVersionBuildMetaData? other) -> bool
524528
GitVersion.SemanticVersionBuildMetaData.OtherMetaData.get -> string?
525529
GitVersion.SemanticVersionBuildMetaData.OtherMetaData.init -> void

src/GitVersion.Core/PublicAPI.Unshipped.txt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,12 @@ GitVersion.Git.AuthenticationInfo.AuthenticationInfo() -> void
1111
GitVersion.Git.AuthenticationInfo.AuthenticationInfo(GitVersion.Git.AuthenticationInfo! original) -> void
1212
GitVersion.Git.CommitFilter.CommitFilter() -> void
1313
GitVersion.Git.CommitFilter.CommitFilter(GitVersion.Git.CommitFilter! original) -> void
14-
GitVersion.OutputVariables.GitVersionVariables.Deconstruct(out string! Major, out string! Minor, out string! Patch, out string? BuildMetaData, out string? FullBuildMetaData, out string? BranchName, out string? EscapedBranchName, out string? Sha, out string? ShortSha, out string! MajorMinorPatch, out string! SemVer, out string! FullSemVer, out string? AssemblySemVer, out string? AssemblySemFileVer, out string? PreReleaseTag, out string? PreReleaseTagWithDash, out string? PreReleaseLabel, out string? PreReleaseLabelWithDash, out string? PreReleaseNumber, out string! WeightedPreReleaseNumber, out string? InformationalVersion, out string? CommitDate, out string? VersionSourceSha, out string? CommitsSinceVersionSource, out string? UncommittedChanges) -> void
14+
GitVersion.OutputVariables.GitVersionVariables.Deconstruct(out string! Major, out string! Minor, out string! Patch, out string? BuildMetaData, out string? FullBuildMetaData, out string? BranchName, out string? EscapedBranchName, out string? Sha, out string? ShortSha, out string! MajorMinorPatch, out string! SemVer, out string! FullSemVer, out string? AssemblySemVer, out string? AssemblySemFileVer, out string? PreReleaseTag, out string? PreReleaseTagWithDash, out string? PreReleaseLabel, out string? PreReleaseLabelWithDash, out string? PreReleaseNumber, out string! WeightedPreReleaseNumber, out string? InformationalVersion, out string? CommitDate, out string? VersionSourceSha, out string? CommitsSinceVersionSource, out string? CommitsSinceVersionSourceList, out string? UncommittedChanges) -> void
1515
GitVersion.OutputVariables.GitVersionVariables.GitVersionVariables(GitVersion.OutputVariables.GitVersionVariables! original) -> void
1616
GitVersion.RepositoryInfo.RepositoryInfo() -> void
1717
GitVersion.RepositoryInfo.RepositoryInfo(GitVersion.RepositoryInfo! original) -> void
18+
GitVersion.SemanticVersionBuildMetaData.CommitsSinceVersionSourceList.get -> string![]!
19+
GitVersion.SemanticVersionFormatValues.CommitsSinceVersionSourceList.get -> string?
1820
GitVersion.SemanticVersionWithTag.<Clone>$() -> GitVersion.SemanticVersionWithTag!
1921
GitVersion.SemanticVersionWithTag.Deconstruct(out GitVersion.SemanticVersion! Value, out GitVersion.Git.ITag! Tag) -> void
2022
GitVersion.SemanticVersionWithTag.Equals(GitVersion.SemanticVersionWithTag? other) -> bool

src/GitVersion.Core/SemVer/SemanticVersionBuildMetaData.cs

Lines changed: 34 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,16 +26,46 @@ public class SemanticVersionBuildMetaData : IFormattable, IEquatable<SemanticVer
2626

2727
public string? VersionSourceSha { get; init; }
2828

29-
public long CommitsSinceVersionSource { get; init; }
29+
public long CommitsSinceVersionSource
30+
{
31+
get;
32+
init;
33+
}
34+
35+
public string[] CommitsSinceVersionSourceList
36+
{
37+
get;
38+
init;
39+
}
3040

3141
public long UncommittedChanges { get; init; }
3242

3343
public SemanticVersionBuildMetaData()
3444
{
3545
}
3646

37-
public SemanticVersionBuildMetaData(string? versionSourceSha, long? commitsSinceTag, string? branch, string? commitSha,
38-
string? commitShortSha, DateTimeOffset? commitDate, long numberOfUnCommittedChanges, string? otherMetadata = null)
47+
public SemanticVersionBuildMetaData(
48+
string? versionSourceSha,
49+
long? commitsSinceTag,
50+
string? branch,
51+
string? commitSha,
52+
string? commitShortSha,
53+
DateTimeOffset? commitDate,
54+
long numberOfUnCommittedChanges,
55+
string? otherMetadata = null)
56+
: this(versionSourceSha, commitsSinceTag, branch, commitSha, commitShortSha, commitDate, numberOfUnCommittedChanges, otherMetadata, [])
57+
{ }
58+
59+
internal SemanticVersionBuildMetaData(
60+
string? versionSourceSha,
61+
long? commitsSinceTag,
62+
string? branch,
63+
string? commitSha,
64+
string? commitShortSha,
65+
DateTimeOffset? commitDate,
66+
long numberOfUnCommittedChanges,
67+
string? otherMetadata,
68+
string[]? commitSinceTagList)
3969
{
4070
this.Sha = commitSha;
4171
this.ShortSha = commitShortSha;
@@ -45,6 +75,7 @@ public SemanticVersionBuildMetaData(string? versionSourceSha, long? commitsSince
4575
this.OtherMetaData = otherMetadata;
4676
this.VersionSourceSha = versionSourceSha;
4777
this.CommitsSinceVersionSource = commitsSinceTag ?? 0;
78+
this.CommitsSinceVersionSourceList = commitsSinceTag == null ? [] : commitSinceTagList ?? [];
4879
this.UncommittedChanges = numberOfUnCommittedChanges;
4980
}
5081

src/GitVersion.Core/VersionCalculation/SemanticVersioning/SemanticVersionFormatValues.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,5 +55,7 @@ public class SemanticVersionFormatValues(SemanticVersion semver, IGitVersionConf
5555

5656
public string CommitsSinceVersionSource => semver.BuildMetaData.CommitsSinceVersionSource.ToString(CultureInfo.InvariantCulture);
5757

58+
public string? CommitsSinceVersionSourceList => string.Join(", ", semver.BuildMetaData.CommitsSinceVersionSourceList ?? []).ToString(CultureInfo.InvariantCulture);
59+
5860
public string UncommittedChanges => semver.BuildMetaData.UncommittedChanges.ToString(CultureInfo.InvariantCulture);
5961
}

src/GitVersion.Core/VersionCalculation/VariableProvider.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ public GitVersionVariables GetVariablesFor(
6363
semverFormatValues.CommitDate,
6464
semverFormatValues.VersionSourceSha,
6565
semverFormatValues.CommitsSinceVersionSource,
66+
semverFormatValues.CommitsSinceVersionSourceList,
6667
semverFormatValues.UncommittedChanges
6768
);
6869
}

0 commit comments

Comments
 (0)