Skip to content

Commit efe5aca

Browse files
authored
Merge pull request #137 from robmen/136-overrideoffset
Allow BuildNumberOffset to be overridden via MSBuild
2 parents df1fba2 + 3c5fe19 commit efe5aca

File tree

4 files changed

+40
-4
lines changed

4 files changed

+40
-4
lines changed

src/NerdBank.GitVersioning.Tests/BuildIntegrationTests.cs

+15
Original file line numberDiff line numberDiff line change
@@ -382,6 +382,21 @@ public async Task GetBuildVersion_CustomBuildNumberOffset()
382382
this.AssertStandardProperties(versionOptions, buildResult);
383383
}
384384

385+
[Fact]
386+
public async Task GetBuildVersion_OverrideBuildNumberOffset()
387+
{
388+
this.WriteVersionFile("14.0");
389+
this.InitializeSourceControl();
390+
var versionOptions = new VersionOptions
391+
{
392+
Version = new SemanticVersion(new Version(14, 1))
393+
};
394+
this.WriteVersionFile(versionOptions);
395+
this.testProject.AddProperty("OverrideBuildNumberOffset", "10");
396+
var buildResult = await this.BuildAsync();
397+
Assert.Equal("14.1.11.31122", buildResult.AssemblyFileVersion);
398+
}
399+
385400
[Fact]
386401
public async Task GetBuildVersion_Minus1BuildOffset_NotYetCommitted()
387402
{

src/NerdBank.GitVersioning/VersionOracle.cs

+17-3
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,9 @@ public class VersionOracle
2929
/// <param name="projectDirectory"></param>
3030
/// <param name="gitRepoDirectory"></param>
3131
/// <param name="cloudBuild"></param>
32+
/// <param name="overrideBuildNumberOffset"></param>
3233
/// <returns></returns>
33-
public static VersionOracle Create(string projectDirectory, string gitRepoDirectory = null, ICloudBuild cloudBuild = null)
34+
public static VersionOracle Create(string projectDirectory, string gitRepoDirectory = null, ICloudBuild cloudBuild = null, int? overrideBuildNumberOffset = null)
3435
{
3536
Requires.NotNull(projectDirectory, nameof(projectDirectory));
3637
if (string.IsNullOrEmpty(gitRepoDirectory))
@@ -40,14 +41,14 @@ public static VersionOracle Create(string projectDirectory, string gitRepoDirect
4041

4142
using (var git = OpenGitRepo(gitRepoDirectory))
4243
{
43-
return new VersionOracle(projectDirectory, git, cloudBuild);
44+
return new VersionOracle(projectDirectory, git, cloudBuild, overrideBuildNumberOffset);
4445
}
4546
}
4647

4748
/// <summary>
4849
/// Initializes a new instance of the <see cref="VersionOracle"/> class.
4950
/// </summary>
50-
public VersionOracle(string projectDirectory, LibGit2Sharp.Repository repo, ICloudBuild cloudBuild)
51+
public VersionOracle(string projectDirectory, LibGit2Sharp.Repository repo, ICloudBuild cloudBuild, int? overrideBuildNumberOffset = null)
5152
{
5253
var repoRoot = repo?.Info?.WorkingDirectory?.TrimEnd(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar);
5354
var relativeRepoProjectDirectory = !string.IsNullOrWhiteSpace(repoRoot)
@@ -60,6 +61,19 @@ public VersionOracle(string projectDirectory, LibGit2Sharp.Repository repo, IClo
6061

6162
var workingVersion = VersionFile.GetVersion(projectDirectory);
6263

64+
if (overrideBuildNumberOffset.HasValue)
65+
{
66+
if (committedVersion != null)
67+
{
68+
committedVersion.BuildNumberOffset = overrideBuildNumberOffset.Value;
69+
}
70+
71+
if (workingVersion != null)
72+
{
73+
workingVersion.BuildNumberOffset = overrideBuildNumberOffset.Value;
74+
}
75+
}
76+
6377
this.VersionOptions = committedVersion ?? workingVersion;
6478

6579
this.GitCommitId = commit?.Id.Sha ?? cloudBuild?.GitCommitId ?? null;

src/Nerdbank.GitVersioning.NuGet/build/Nerdbank.GitVersioning.targets

+1
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@
6060
BuildMetadata="@(BuildMetadata)"
6161
DefaultPublicRelease="$(PublicRelease)"
6262
GitRepoRoot="$(GitRepoRoot)"
63+
OverrideBuildNumberOffset="$(OverrideBuildNumberOffset)"
6364
TargetsPath="$(MSBuildThisFileDirectory)">
6465

6566
<Output TaskParameter="Version" PropertyName="BuildVersion" />

src/Nerdbank.GitVersioning.Tasks/GetBuildVersion.cs

+7-1
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,11 @@ public GetBuildVersion()
4040
/// </summary>
4141
public string GitRepoRoot { get; set; }
4242

43+
/// <summary>
44+
/// Gets or sets the optional override build number offset.
45+
/// </summary>
46+
public int OverrideBuildNumberOffset { get; set; } = int.MaxValue;
47+
4348
/// <summary>
4449
/// Gets or sets the path to the folder that contains the NB.GV .targets file.
4550
/// </summary>
@@ -156,7 +161,8 @@ protected override bool ExecuteInner()
156161
try
157162
{
158163
var cloudBuild = CloudBuild.Active;
159-
var oracle = VersionOracle.Create(Directory.GetCurrentDirectory(), this.GitRepoRoot, cloudBuild);
164+
var overrideBuildNumberOffset = (this.OverrideBuildNumberOffset == int.MaxValue) ? (int?)null : this.OverrideBuildNumberOffset;
165+
var oracle = VersionOracle.Create(Directory.GetCurrentDirectory(), this.GitRepoRoot, cloudBuild, overrideBuildNumberOffset);
160166
if (!string.IsNullOrEmpty(this.DefaultPublicRelease))
161167
{
162168
oracle.PublicRelease = string.Equals(this.DefaultPublicRelease, "true", StringComparison.OrdinalIgnoreCase);

0 commit comments

Comments
 (0)