Skip to content

Commit 0e7febc

Browse files
authored
Merge pull request #707 from dotnet/fix703
Honor AssemblyVersion as explicitly set in version.json
2 parents 47439c1 + 5296101 commit 0e7febc

File tree

4 files changed

+65
-15
lines changed

4 files changed

+65
-15
lines changed

src/NerdBank.GitVersioning.Tests/BuildIntegrationTests.cs

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1029,13 +1029,19 @@ private static Version GetExpectedAssemblyVersion(VersionOptions versionOptions,
10291029
{
10301030
// Function should be very similar to VersionOracle.GetAssemblyVersion()
10311031
var assemblyVersion = (versionOptions?.AssemblyVersion?.Version ?? versionOptions.Version.Version).EnsureNonNegativeComponents();
1032-
var precision = versionOptions?.AssemblyVersion?.Precision ?? VersionOptions.DefaultVersionPrecision;
10331032

1034-
assemblyVersion = new System.Version(
1035-
assemblyVersion.Major,
1036-
precision >= VersionOptions.VersionPrecision.Minor ? assemblyVersion.Minor : 0,
1037-
precision >= VersionOptions.VersionPrecision.Build ? version.Build : 0,
1038-
precision >= VersionOptions.VersionPrecision.Revision ? version.Revision : 0);
1033+
if (versionOptions?.AssemblyVersion?.Version is null)
1034+
{
1035+
VersionOptions.VersionPrecision precision = versionOptions?.AssemblyVersion?.Precision ?? VersionOptions.DefaultVersionPrecision;
1036+
assemblyVersion = version;
1037+
1038+
assemblyVersion = new Version(
1039+
assemblyVersion.Major,
1040+
precision >= VersionOptions.VersionPrecision.Minor ? assemblyVersion.Minor : 0,
1041+
precision >= VersionOptions.VersionPrecision.Build ? assemblyVersion.Build : 0,
1042+
precision >= VersionOptions.VersionPrecision.Revision ? assemblyVersion.Revision : 0);
1043+
}
1044+
10391045
return assemblyVersion;
10401046
}
10411047

src/NerdBank.GitVersioning.Tests/VersionOracleTests.cs

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -283,6 +283,32 @@ public void SemVerStableNonPublicVersionShortened()
283283
Assert.Matches(@"^2.3.1-g[a-f0-9]{7}$", oracle.ChocolateyPackageVersion);
284284
}
285285

286+
[Theory]
287+
[InlineData("1.2.0.0", null, null)]
288+
[InlineData("1.0.0.0", null, VersionOptions.VersionPrecision.Major)]
289+
[InlineData("1.2.0.0", null, VersionOptions.VersionPrecision.Minor)]
290+
[InlineData("1.2.1.0", null, VersionOptions.VersionPrecision.Build)]
291+
[InlineData("2.3.4.0", "2.3.4", null)]
292+
[InlineData("2.3.4.0", "2.3.4", VersionOptions.VersionPrecision.Minor)]
293+
[InlineData("2.3.4.0", "2.3.4", VersionOptions.VersionPrecision.Build)]
294+
[InlineData("2.3.4.0", "2.3.4.0", VersionOptions.VersionPrecision.Revision)]
295+
public void CustomAssemblyVersion(string expectedAssemblyVersion, string prescribedAssemblyVersion, VersionOptions.VersionPrecision? precision)
296+
{
297+
this.InitializeSourceControl(withInitialCommit: false);
298+
this.WriteVersionFile(new VersionOptions
299+
{
300+
Version = new SemanticVersion("1.2"),
301+
AssemblyVersion = new VersionOptions.AssemblyVersionOptions
302+
{
303+
Version = prescribedAssemblyVersion is object ? new Version(prescribedAssemblyVersion) : null,
304+
Precision = precision,
305+
},
306+
});
307+
308+
VersionOracle oracle = this.GetVersionOracle();
309+
Assert.Equal(expectedAssemblyVersion, oracle.AssemblyVersion.ToString());
310+
}
311+
286312
[Fact]
287313
public void DefaultNuGetPackageVersionIsSemVer1PublicRelease()
288314
{

src/NerdBank.GitVersioning/VersionOracle.cs

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -450,14 +450,25 @@ private static Version GetAssemblyVersion(Version version, VersionOptions? versi
450450
// If there is no repo, "version" could have uninitialized components (-1).
451451
version = version.EnsureNonNegativeComponents();
452452

453-
var assemblyVersion = versionOptions?.AssemblyVersionOrDefault.Version ?? new System.Version(version.Major, version.Minor);
454-
var precision = versionOptions?.AssemblyVersionOrDefault.PrecisionOrDefault;
455-
456-
assemblyVersion = new System.Version(
457-
assemblyVersion.Major,
458-
precision >= VersionOptions.VersionPrecision.Minor ? assemblyVersion.Minor : 0,
459-
precision >= VersionOptions.VersionPrecision.Build ? version.Build : 0,
460-
precision >= VersionOptions.VersionPrecision.Revision ? version.Revision : 0);
453+
Version assemblyVersion;
454+
455+
if (versionOptions?.AssemblyVersion?.Version is not null)
456+
{
457+
// When specified explicitly, use the assembly version as the user defines it.
458+
assemblyVersion = versionOptions.AssemblyVersion.Version;
459+
}
460+
else
461+
{
462+
// Otherwise consider precision to base the assembly version off of the main computed version.
463+
VersionOptions.VersionPrecision precision = versionOptions?.AssemblyVersion?.Precision ?? VersionOptions.DefaultVersionPrecision;
464+
465+
assemblyVersion = new Version(
466+
version.Major,
467+
precision >= VersionOptions.VersionPrecision.Minor ? version.Minor : 0,
468+
precision >= VersionOptions.VersionPrecision.Build ? version.Build : 0,
469+
precision >= VersionOptions.VersionPrecision.Revision ? version.Revision : 0);
470+
}
471+
461472
return assemblyVersion.EnsureNonNegativeComponents(4);
462473
}
463474

src/NerdBank.GitVersioning/version.schema.json

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,15 @@
4444
{ "$ref": "#/definitions/twoToFourComponentVersion" },
4545
{
4646
"type": "object",
47+
"additionalProperties": false,
48+
"properties": {
49+
"version": { "$ref": "#/definitions/twoToFourComponentVersion" }
50+
}
51+
},
52+
{
53+
"type": "object",
54+
"additionalProperties": false,
4755
"properties": {
48-
"version": { "$ref": "#/definitions/twoToFourComponentVersion" },
4956
"precision": {
5057
"type": "string",
5158
"description": "Identifies the last component to be explicitly set in the version.",

0 commit comments

Comments
 (0)