Skip to content

Commit 7b964a0

Browse files
authored
Merge pull request #269 from AArnott/fix260
Remove the `g` prefix in commit IDs almost everywhere
2 parents 3a42aba + 5ae98d2 commit 7b964a0

File tree

3 files changed

+35
-12
lines changed

3 files changed

+35
-12
lines changed

src/NerdBank.GitVersioning.Tests/BuildIntegrationTests.cs

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,7 @@ public async Task GetBuildVersion_In_Git_But_Head_Lacks_VersionFile()
176176
Assumes.True(repo.Index[VersionFile.JsonFileName] == null);
177177
var buildResult = await this.BuildAsync();
178178
Assert.Equal("3.4.0." + repo.Head.Commits.First().GetIdAsVersion().Revision, buildResult.BuildVersion);
179-
Assert.Equal("3.4.0+g" + repo.Head.Commits.First().Id.Sha.Substring(0, 10), buildResult.AssemblyInformationalVersion);
179+
Assert.Equal("3.4.0+" + repo.Head.Commits.First().Id.Sha.Substring(0, 10), buildResult.AssemblyInformationalVersion);
180180
}
181181

182182
[Fact]
@@ -201,7 +201,7 @@ public async Task GetBuildVersion_In_Git_No_VersionFile_At_All()
201201
repo.Commit("empty", this.Signer, this.Signer, new CommitOptions { AllowEmptyCommit = true });
202202
var buildResult = await this.BuildAsync();
203203
Assert.Equal("0.0.1." + repo.Head.Commits.First().GetIdAsVersion().Revision, buildResult.BuildVersion);
204-
Assert.Equal("0.0.1+g" + repo.Head.Commits.First().Id.Sha.Substring(0, 10), buildResult.AssemblyInformationalVersion);
204+
Assert.Equal("0.0.1+" + repo.Head.Commits.First().Id.Sha.Substring(0, 10), buildResult.AssemblyInformationalVersion);
205205
}
206206

207207
[Fact]
@@ -915,7 +915,7 @@ private void AssertStandardProperties(VersionOptions versionOptions, BuildResult
915915
Version assemblyVersion = GetExpectedAssemblyVersion(versionOptions, version);
916916
var additionalBuildMetadata = from item in buildResult.BuildResult.ProjectStateAfterBuild.GetItems("BuildMetadata")
917917
select item.EvaluatedInclude;
918-
var expectedBuildMetadata = $"+g{commitIdShort}";
918+
var expectedBuildMetadata = $"+{commitIdShort}";
919919
if (additionalBuildMetadata.Any())
920920
{
921921
expectedBuildMetadata += "." + string.Join(".", additionalBuildMetadata);
@@ -944,7 +944,8 @@ private void AssertStandardProperties(VersionOptions versionOptions, BuildResult
944944

945945
// NuGet is now SemVer 2.0 and will pass additional build metadata if provided
946946
bool semVer2 = versionOptions?.NuGetPackageVersionOrDefault.SemVer == 2;
947-
string pkgVersionSuffix = buildResult.PublicRelease ? string.Empty : $"-g{commitIdShort}";
947+
string semVer1CommitPrefix = semVer2 ? string.Empty : "g";
948+
string pkgVersionSuffix = buildResult.PublicRelease ? string.Empty : $"-{semVer1CommitPrefix}{commitIdShort}";
948949
if (semVer2)
949950
{
950951
pkgVersionSuffix += expectedBuildMetadataWithoutCommitId;
@@ -965,7 +966,7 @@ private void AssertStandardProperties(VersionOptions versionOptions, BuildResult
965966
Assert.Equal(expectedVersion, buildNumberSemVer.Version);
966967
Assert.Equal(buildResult.PrereleaseVersion, buildNumberSemVer.Prerelease);
967968
string expectedBuildNumberMetadata = hasCommitData && commitIdOptions.WhereOrDefault == VersionOptions.CloudBuildNumberCommitWhere.BuildMetadata
968-
? $"+g{commitIdShort}"
969+
? $"+{commitIdShort}"
969970
: string.Empty;
970971
if (additionalBuildMetadata.Any())
971972
{

src/NerdBank.GitVersioning.Tests/VersionOracleTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -240,7 +240,7 @@ public void CanSetSemVer2ForNuGetPackageVersionNonPublicRelease()
240240
this.InitializeSourceControl();
241241
var oracle = VersionOracle.Create(this.RepoPath);
242242
oracle.PublicRelease = false;
243-
Assert.Equal($"7.8.9-foo.25.g{this.CommitIdShort}", oracle.NuGetPackageVersion);
243+
Assert.Equal($"7.8.9-foo.25.{this.CommitIdShort}", oracle.NuGetPackageVersion);
244244
}
245245

246246
[Fact]

src/NerdBank.GitVersioning/VersionOracle.cs

Lines changed: 28 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ public IEnumerable<string> BuildMetadataWithCommitId
143143
{
144144
if (!string.IsNullOrEmpty(this.GitCommitId))
145145
{
146-
yield return $"g{this.GitCommitId.Substring(0, 10)}";
146+
yield return this.GitCommitId.Substring(0, 10);
147147
}
148148

149149
foreach (string identifier in this.BuildMetadata)
@@ -335,22 +335,22 @@ public IDictionary<string, string> CloudBuildVersionVars
335335
/// <summary>
336336
/// Gets the version to use for NuGet packages.
337337
/// </summary>
338-
public string NuGetPackageVersion => this.VersionOptions?.NuGetPackageVersionOrDefault.SemVerOrDefault == 1 ? this.SemVer1 : this.SemVer2;
338+
public string NuGetPackageVersion => this.VersionOptions?.NuGetPackageVersionOrDefault.SemVerOrDefault == 1 ? this.NuGetSemVer1 : this.SemVer2;
339339

340340
/// <summary>
341341
/// Gets the version to use for NPM packages.
342342
/// </summary>
343343
public string NpmPackageVersion => this.SemVer2;
344344

345345
/// <summary>
346-
/// Gets a SemVer 1.0 compliant string that represents this version, including the -gCOMMITID suffix
346+
/// Gets a SemVer 1.0 compliant string that represents this version, including the -COMMITID suffix
347347
/// when <see cref="PublicRelease"/> is <c>false</c>.
348348
/// </summary>
349349
public string SemVer1 =>
350350
$"{this.Version.ToStringSafe(3)}{this.PrereleaseVersionSemVer1}{this.SemVer1BuildMetadata}";
351351

352352
/// <summary>
353-
/// Gets a SemVer 2.0 compliant string that represents this version, including a +gCOMMITID suffix
353+
/// Gets a SemVer 2.0 compliant string that represents this version, including a +COMMITID suffix
354354
/// when <see cref="PublicRelease"/> is <c>false</c>.
355355
/// </summary>
356356
public string SemVer2 =>
@@ -361,9 +361,31 @@ public IDictionary<string, string> CloudBuildVersionVars
361361
/// </summary>
362362
public int SemVer1NumericIdentifierPadding => this.VersionOptions?.SemVer1NumericIdentifierPaddingOrDefault ?? 4;
363363

364-
private string SemVer1BuildMetadata =>
364+
/// <summary>
365+
/// Gets the build metadata, compliant to the NuGet-compatible subset of SemVer 1.0.
366+
/// </summary>
367+
/// <remarks>
368+
/// When adding the git commit ID in a -prerelease tag, prefix a `g` because
369+
/// older NuGet clients (the ones that support only a subset of semver 1.0)
370+
/// cannot handle prerelease tags that begin with a number (which a git commit ID might).
371+
/// See <see href="https://github.com/AArnott/Nerdbank.GitVersioning/issues/260#issuecomment-445511898">this discussion</see>.
372+
/// </remarks>
373+
private string NuGetSemVer1BuildMetadata =>
365374
this.PublicRelease ? string.Empty : $"-g{this.GitCommitIdShort}";
366375

376+
/// <summary>
377+
/// Gets the build metadata, compliant to SemVer 1.0.
378+
/// </summary>
379+
private string SemVer1BuildMetadata =>
380+
this.PublicRelease ? string.Empty : this.GitCommitIdShort;
381+
382+
/// <summary>
383+
/// Gets a SemVer 1.0 compliant string that represents this version, including the -gCOMMITID suffix
384+
/// when <see cref="PublicRelease"/> is <c>false</c>.
385+
/// </summary>
386+
private string NuGetSemVer1 =>
387+
$"{this.Version.ToStringSafe(3)}{this.PrereleaseVersionSemVer1}{this.NuGetSemVer1BuildMetadata}";
388+
367389
/// <summary>
368390
/// Gets the build metadata that is appropriate for SemVer2 use.
369391
/// </summary>
@@ -377,7 +399,7 @@ public IDictionary<string, string> CloudBuildVersionVars
377399

378400
private string PrereleaseVersionSemVer1 => MakePrereleaseSemVer1Compliant(this.PrereleaseVersion, this.SemVer1NumericIdentifierPadding);
379401

380-
private string GitCommitIdShortForNonPublicPrereleaseTag => (string.IsNullOrEmpty(this.PrereleaseVersion) ? "-" : ".") + $"g{this.GitCommitIdShort}";
402+
private string GitCommitIdShortForNonPublicPrereleaseTag => (string.IsNullOrEmpty(this.PrereleaseVersion) ? "-" : ".") + this.GitCommitIdShort;
381403

382404
private VersionOptions.CloudBuildNumberOptions CloudBuildNumberOptions { get; }
383405

0 commit comments

Comments
 (0)