From 3cbd5006c4a22709ef8a0a8e3c4d88f66aaf14ef Mon Sep 17 00:00:00 2001 From: vchirikov Date: Mon, 9 Mar 2020 02:10:58 +0300 Subject: [PATCH] Review fixes --- .../VersionOracleTests.cs | 3 +-- src/NerdBank.GitVersioning/VersionOptions.cs | 23 ++++++++++++++++++- src/NerdBank.GitVersioning/VersionOracle.cs | 5 ++-- .../version.schema.json | 2 +- 4 files changed, 27 insertions(+), 6 deletions(-) diff --git a/src/NerdBank.GitVersioning.Tests/VersionOracleTests.cs b/src/NerdBank.GitVersioning.Tests/VersionOracleTests.cs index e9238157..b64af102 100644 --- a/src/NerdBank.GitVersioning.Tests/VersionOracleTests.cs +++ b/src/NerdBank.GitVersioning.Tests/VersionOracleTests.cs @@ -323,8 +323,7 @@ public void CanSetGitCommitIdPrefixNonPublicRelease() { SemVer = 2, }, - GitCommitIdPrefix = "git" - + GitCommitIdPrefix = "git", }; this.WriteVersionFile(workingCopyVersion); this.InitializeSourceControl(); diff --git a/src/NerdBank.GitVersioning/VersionOptions.cs b/src/NerdBank.GitVersioning/VersionOptions.cs index ca5ae85e..64c7e8e6 100644 --- a/src/NerdBank.GitVersioning/VersionOptions.cs +++ b/src/NerdBank.GitVersioning/VersionOptions.cs @@ -15,6 +15,9 @@ [DebuggerDisplay("{DebuggerDisplay,nq}")] public class VersionOptions : IEquatable { + [DebuggerBrowsable(DebuggerBrowsableState.Never)] + private string gitCommitIdPrefix; + /// /// Default value for . /// @@ -60,13 +63,31 @@ public class VersionOptions : IEquatable [JsonProperty(DefaultValueHandling = DefaultValueHandling.Ignore)] public AssemblyVersionOptions AssemblyVersion { get; set; } + /// /// Gets or sets the prefix for git commit id in version. + /// Because of semver rules the prefix must lead with a [A-z_] character (not a number) and it cannot be the empty string. /// If null 'g' will be used. /// /// A prefix for git commit id. [JsonProperty(DefaultValueHandling = DefaultValueHandling.Ignore)] - public string GitCommitIdPrefix { get; set; } + public string GitCommitIdPrefix + { + get => gitCommitIdPrefix; + set + { + if (string.IsNullOrWhiteSpace(value)) + { + throw new ArgumentNullException(nameof(value), $"{nameof(this.GitCommitIdPrefix)} can't be empty"); + } + char first = value[0]; + if (first < 'A' || (first > 'Z' && first < 'a' && first != '_') || first > 'z') + { + throw new ArgumentException(nameof(value), $"{nameof(this.GitCommitIdPrefix)} must lead with a [A-z_] character (not a number)"); + } + this.gitCommitIdPrefix = value; + } + } /// /// Gets the version to use particularly for the diff --git a/src/NerdBank.GitVersioning/VersionOracle.cs b/src/NerdBank.GitVersioning/VersionOracle.cs index a52dd14f..66ddc562 100644 --- a/src/NerdBank.GitVersioning/VersionOracle.cs +++ b/src/NerdBank.GitVersioning/VersionOracle.cs @@ -418,7 +418,7 @@ public IEnumerable BuildMetadataWithCommitId this.PublicRelease ? string.Empty : $"-{this.GitCommitIdShort}"; /// - /// Gets a SemVer 1.0 compliant string that represents this version, including the -{GitCommitIdPrefix}COMMITID suffix + /// Gets a SemVer 1.0 compliant string that represents this version, including the -gCOMMITID suffix /// when is false. /// private string NuGetSemVer1 => @@ -438,7 +438,8 @@ public IEnumerable BuildMetadataWithCommitId private string PrereleaseVersionSemVer1 => SemanticVersionExtensions.MakePrereleaseSemVer1Compliant(this.PrereleaseVersion, this.SemVer1NumericIdentifierPadding); /// - /// Gets the -{}c0ffee or .c0ffee suffix for the version. + /// Gets the -gc0ffee or .gc0ffee suffix for the version. + /// The g in the prefix might be changed if is set. /// /// /// The prefix to the commit ID is to remain SemVer2 compliant particularly when the partial commit ID we use is made up entirely of numerals. diff --git a/src/NerdBank.GitVersioning/version.schema.json b/src/NerdBank.GitVersioning/version.schema.json index 46ad2244..1e402b08 100644 --- a/src/NerdBank.GitVersioning/version.schema.json +++ b/src/NerdBank.GitVersioning/version.schema.json @@ -81,7 +81,7 @@ }, "gitCommitIdPrefix": { "type": "string", - "description": "The git commit prefix (e.g. 'g') in prerelease versions", + "description": "The git commit prefix (e.g. 'g') in non-public release versions.", "pattern": "^[^0-9][\\da-z\\-_\\.]*$", "default": "g" },