diff --git a/doc/msbuild.md b/doc/msbuild.md
index 5ae13032..10b23e8a 100644
--- a/doc/msbuild.md
+++ b/doc/msbuild.md
@@ -2,6 +2,23 @@
Installing the `Nerdbank.GitVersioning` package from NuGet into your MSBuild-based projects is the recommended way to add version information to your MSBuild project outputs including assemblies, native dll's, and packages.
+If you want the package to affect all the projects in your repo, and you use `PackageReference` (rather than `packages.config`),
+you can add this to a repo-level `Directory.Build.props` file:
+
+```xml
+
+
+
+```
+
+The condition prevents the `PackageReference` from impacting any `packages.config`-based projects
+such as vcxproj that may be in your repo.
+Such projects will require individual installation of the Nerdbank.GitVersioning nuget package
+using the NuGet Package Manager in Visual Studio.
+
## Public releases
By default, each build of a Nuget package will include the git commit ID.
@@ -21,6 +38,64 @@ You should only build with this property set from one release branch per
major.minor version to avoid the risk of producing multiple unique NuGet
packages with a colliding version spec.
+## Custom build authoring
+
+If you are writing your own MSBuild targets or properties and need to consume version information,
+Nerdbank.GitVersioning is there to help.
+The version information created by this package is expressed as MSBuild properties.
+These properties are set by the `GetBuildVersion` target defined in this package.
+This means any dependency you have on these properties must ensure this target has already executed.
+This can be done by defining your own msbuild target like so:
+
+```xml
+
+
+ My assembly version is: $(AssemblyVersion)
+
+
+```
+
+In the above example, the `AssemblyVersion` property, which is set by the
+`GetBuildVersion` target defined by Nerdbank.GitVersioning, is used to define
+another property.
+It could also be used to define msbuild items or anything else you want.
+
+### MSBuild properties defined in `GetBuildVersion`
+
+Many MSBuild properties are set by `GetBuildVersion` allowing you to define or redefine
+properties in virtually any format you like.
+The authoritative list is [here](https://github.com/dotnet/Nerdbank.GitVersioning/blob/dae20a6d15f04d8161fd092c36fdf1f57c021ba1/src/Nerdbank.GitVersioning.Tasks/GetBuildVersion.cs#L300-L323) (switch to the default branch to see the current set).
+
+Below is a snapshot of the properties with example values.
+Note that the values and formats can vary depending on your `version.json` settings and version height.
+
+Property | Example value
+--|--
+AssemblyFileVersion | 2.7.74.11627
+AssemblyInformationalVersion | 2.7.74-alpha+6b2d14ba68
+AssemblyVersion | 2.7.0.0
+BuildingRef | refs/heads/fix299
+BuildNumber | 74
+BuildVersion | 2.7.74.11627
+BuildVersion3Components | 2.7.74
+BuildVersionNumberComponent | 74
+BuildVersionSimple | 2.7.74
+ChocolateyPackageVersion | 2.7.74-alpha-g6b2d14ba68
+CloudBuildNumber | (empty except in cloud build)
+FileVersion | 2.7.74.11627
+GitCommitDateTicks | 637547960670000000
+GitCommitId | 6b2d14ba6844d2152c48268a8d2c1933759e7229
+GitCommitIdShort | 6b2d14ba68
+GitVersionHeight | 74
+MajorMinorVersion | 2.7
+NPMPackageVersion | 2.7.74-alpha.g6b2d14ba68
+NuGetPackageVersion | 2.7.74-alpha-g6b2d14ba68
+PackageVersion | 2.7.74-alpha-g6b2d14ba68
+PrereleaseVersion | -alpha
+PublicRelease | False
+SemVerBuildSuffix | +6b2d14ba68
+Version | 2.7.74-alpha-g6b2d14ba68
+
## Build performance
Repos with many projects or many commits between major/minor version bumps can suffer from compromised build performance due to the MSBuild task that computes the version information for each project.
diff --git a/doc/public_vs_stable.md b/doc/public_vs_stable.md
index 3c121400..058790e0 100644
--- a/doc/public_vs_stable.md
+++ b/doc/public_vs_stable.md
@@ -25,7 +25,7 @@ When a branch becomes stable, the `-prerelease` tag can be removed by adding a c
To remove the `-prerelease`, the version.json file must be changed to remove it.
Committing this change communicates to everyone looking at the repo that this software is stable.
-The natural evolution of a product includes usually includes entering and exiting a `-prerelease` stage many times, but within a branded release (usually recognized by an intentional version number like "1.2") the progression usually transitions only one direction: from `-prerelease` to stable quality.
+The natural evolution of a product usually includes entering and exiting a `-prerelease` stage many times, but within a branded release (usually recognized by an intentional version number like "1.2") the progression usually transitions only one direction: from `-prerelease` to stable quality.
For example, an anticipated version 1.2 might first be released to the public as 1.2-beta before releasing as 1.2 (without the `-beta` suffix).
If the product is undergoing significant changes that warrant downgrading the stability rating to pre-release quality, the version number tends to be incremented at the same time.
So a 1.2 product's subsequent release might appear as 1.3-beta or 2.0-beta.
diff --git a/src/Cake.GitVersioning/Cake.GitVersioning.csproj b/src/Cake.GitVersioning/Cake.GitVersioning.csproj
index 62f6dc01..ea18fd5e 100644
--- a/src/Cake.GitVersioning/Cake.GitVersioning.csproj
+++ b/src/Cake.GitVersioning/Cake.GitVersioning.csproj
@@ -8,9 +8,9 @@
andarno
Cake wrapper for Nerdbank.GitVersioning. Stamps your assemblies with semver 2.0 compliant git commit specific version information and provides NuGet versioning information as well.
Copyright (c) .NET Foundation and Contributors
- git commit versioning version assemblyinfo
- https://cdn.jsdelivr.net/gh/cake-contrib/graphics/png/cake-contrib-medium.png
- cake-contrib-medium.png
+ git commit versioning version assemblyinfo cake-addin
+ https://cdn.jsdelivr.net/gh/cake-contrib/graphics/png/addin/cake-contrib-addin-medium.png
+ cake-contrib-addin-medium.png
http://github.com/dotnet/Nerdbank.GitVersioning
false
@@ -36,7 +36,7 @@
-
+
diff --git a/src/Cake.GitVersioning/cake-contrib-addin-medium.png b/src/Cake.GitVersioning/cake-contrib-addin-medium.png
new file mode 100644
index 00000000..84c2a823
Binary files /dev/null and b/src/Cake.GitVersioning/cake-contrib-addin-medium.png differ
diff --git a/src/Cake.GitVersioning/cake-contrib-medium.png b/src/Cake.GitVersioning/cake-contrib-medium.png
deleted file mode 100644
index 9881edc4..00000000
Binary files a/src/Cake.GitVersioning/cake-contrib-medium.png and /dev/null differ
diff --git a/src/NerdBank.GitVersioning.Tests/GitExtensionsTests.cs b/src/NerdBank.GitVersioning.Tests/LibGit2GitExtensionsTests.cs
similarity index 95%
rename from src/NerdBank.GitVersioning.Tests/GitExtensionsTests.cs
rename to src/NerdBank.GitVersioning.Tests/LibGit2GitExtensionsTests.cs
index 7a8704dc..b01ce4da 100644
--- a/src/NerdBank.GitVersioning.Tests/GitExtensionsTests.cs
+++ b/src/NerdBank.GitVersioning.Tests/LibGit2GitExtensionsTests.cs
@@ -1,4 +1,5 @@
using System;
+using System.Buffers.Binary;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
@@ -11,9 +12,9 @@
using Xunit.Abstractions;
using Version = System.Version;
-public partial class GitExtensionsTests : RepoTestBase
+public class LibGit2GitExtensionsTests : RepoTestBase
{
- public GitExtensionsTests(ITestOutputHelper Logger)
+ public LibGit2GitExtensionsTests(ITestOutputHelper Logger)
: base(Logger)
{
this.InitializeSourceControl();
@@ -166,22 +167,6 @@ public void GetVersionHeight_ProgressAndReset(string version1, string version2,
Assert.Equal(!versionHeightReset, height2 > height1);
}
- [Fact]
- public void GetTruncatedCommitIdAsInteger_Roundtrip()
- {
- var firstCommit = this.LibGit2Repository.Commit("First", this.Signer, this.Signer, new CommitOptions { AllowEmptyCommit = true });
- var secondCommit = this.LibGit2Repository.Commit("Second", this.Signer, this.Signer, new CommitOptions { AllowEmptyCommit = true });
-
- int id1 = firstCommit.GetTruncatedCommitIdAsInt32();
- int id2 = secondCommit.GetTruncatedCommitIdAsInt32();
-
- this.Logger.WriteLine($"Commit {firstCommit.Id.Sha.Substring(0, 8)} as int: {id1}");
- this.Logger.WriteLine($"Commit {secondCommit.Id.Sha.Substring(0, 8)} as int: {id2}");
-
- Assert.Equal(firstCommit, this.LibGit2Repository.GetCommitFromTruncatedIdInteger(id1));
- Assert.Equal(secondCommit, this.LibGit2Repository.GetCommitFromTruncatedIdInteger(id2));
- }
-
[Fact]
public void GetIdAsVersion_ReadsMajorMinorFromVersionTxt()
{
@@ -384,6 +369,19 @@ public void GetIdAsVersion_Roundtrip_UnstableOffset(int startingOffset, int offs
}
}
+ [Fact]
+ public void GetCommitsFromVersion_MatchesOnEitherEndian()
+ {
+ this.InitializeSourceControl();
+ Commit commit = this.WriteVersionFile(new VersionOptions { Version = SemanticVersion.Parse("1.2"), GitCommitIdShortAutoMinimum = 4 });
+
+ Version originalVersion = new VersionOracle(this.Context).Version;
+ Version swappedEndian = new Version(originalVersion.Major, originalVersion.Minor, originalVersion.Build, BinaryPrimitives.ReverseEndianness((ushort)originalVersion.Revision));
+ ushort twoBytesFromCommitId = checked((ushort)originalVersion.Revision);
+ Assert.Contains(commit, LibGit2GitExtensions.GetCommitsFromVersion(this.Context, originalVersion));
+ Assert.Contains(commit, LibGit2GitExtensions.GetCommitsFromVersion(this.Context, swappedEndian));
+ }
+
[Fact]
public void GetIdAsVersion_Roundtrip_WithSubdirectoryVersionFiles()
{
diff --git a/src/NerdBank.GitVersioning.Tests/ManagedGit/GitObjectIdTests.cs b/src/NerdBank.GitVersioning.Tests/ManagedGit/GitObjectIdTests.cs
index c06d8f67..baeb4ff7 100644
--- a/src/NerdBank.GitVersioning.Tests/ManagedGit/GitObjectIdTests.cs
+++ b/src/NerdBank.GitVersioning.Tests/ManagedGit/GitObjectIdTests.cs
@@ -93,7 +93,7 @@ public void AsUInt16Test()
{
// The hash code is the int32 representation of the first 4 bytes
var objectId = GitObjectId.ParseHex(this.shaAsHexAsciiByteArray);
- Assert.Equal(0x914e, objectId.AsUInt16());
+ Assert.Equal(0x4e91, objectId.AsUInt16());
Assert.Equal(0, GitObjectId.Empty.GetHashCode());
}
diff --git a/src/NerdBank.GitVersioning.Tests/ReleaseManagerTests.cs b/src/NerdBank.GitVersioning.Tests/ReleaseManagerTests.cs
index c95500bf..fb3e248c 100644
--- a/src/NerdBank.GitVersioning.Tests/ReleaseManagerTests.cs
+++ b/src/NerdBank.GitVersioning.Tests/ReleaseManagerTests.cs
@@ -392,12 +392,30 @@ public void PrepareRelease_MasterWithVersionDecrement(string initialVersion, str
this.WriteVersionFile(versionOptions);
// running PrepareRelease should result in an error
- // because we're trying to add a prerelease tag to a version without prerelease tag
+ // because we're setting the version on master to a lower version
this.AssertError(
() => new ReleaseManager().PrepareRelease(this.RepoPath, releaseUnstableTag, (nextVersion is null ? null : Version.Parse(nextVersion))),
ReleasePreparationError.VersionDecrement);
}
+ [Theory]
+ [InlineData("1.2", "1.2")]
+ public void PrepareRelease_MasterWithoutVersionIncrement(string initialVersion, string nextVersion)
+ {
+ // create and configure repository
+ this.InitializeSourceControl();
+
+ // create version.json
+ var versionOptions = new VersionOptions() { Version = SemanticVersion.Parse(initialVersion) };
+ this.WriteVersionFile(versionOptions);
+
+ // running PrepareRelease should result in an error
+ // because we're trying to set master to the version it already has
+ this.AssertError(
+ () => new ReleaseManager().PrepareRelease(this.RepoPath, null, (nextVersion is null ? null : Version.Parse(nextVersion))),
+ ReleasePreparationError.NoVersionIncrement);
+ }
+
[Fact]
public void PrepareRelease_DetachedHead()
{
diff --git a/src/NerdBank.GitVersioning.Tests/TestUtilities.cs b/src/NerdBank.GitVersioning.Tests/TestUtilities.cs
index 6d61fbf1..6ea6efc3 100644
--- a/src/NerdBank.GitVersioning.Tests/TestUtilities.cs
+++ b/src/NerdBank.GitVersioning.Tests/TestUtilities.cs
@@ -79,6 +79,10 @@ internal static ExpandedRepo ExtractRepoArchive(string repoArchiveName)
}
}
+ internal static string ToHex(ushort number) => number.ToString("X");
+
+ internal static ushort FromHex(string hex) => ushort.Parse(hex, System.Globalization.NumberStyles.HexNumber);
+
internal class ExpandedRepo : IDisposable
{
internal ExpandedRepo(string repoPath)
diff --git a/src/NerdBank.GitVersioning.Tests/VersionOracleTests.cs b/src/NerdBank.GitVersioning.Tests/VersionOracleTests.cs
index 4f10abf1..1e0fc51f 100644
--- a/src/NerdBank.GitVersioning.Tests/VersionOracleTests.cs
+++ b/src/NerdBank.GitVersioning.Tests/VersionOracleTests.cs
@@ -845,6 +845,23 @@ public void GitCommitIdShort()
}
}
+ [Fact]
+ public void GitCommidIdLeading16BitsDecodedWithBigEndian()
+ {
+ this.WriteVersionFile(new VersionOptions { Version = SemanticVersion.Parse("1.2"), GitCommitIdShortAutoMinimum = 4 });
+ this.InitializeSourceControl();
+ this.AddCommits(1);
+ var oracle = new VersionOracle(this.Context);
+
+ string leadingFourChars = this.Context.GitCommitId.Substring(0, 4);
+ ushort expectedNumber = TestUtilities.FromHex(leadingFourChars);
+ ushort actualNumber = checked((ushort)oracle.Version.Revision);
+ this.Logger.WriteLine("First two characters from commit ID in hex is {0}", leadingFourChars);
+ this.Logger.WriteLine("First two characters, converted to a number is {0}", expectedNumber);
+ this.Logger.WriteLine("Generated 16-bit ushort from commit ID is {0}, whose hex representation is {1}", actualNumber, TestUtilities.ToHex(actualNumber));
+ Assert.Equal(expectedNumber, actualNumber);
+ }
+
[Fact(Skip = "Slow test")]
public void GetVersionHeight_VeryLongHistory()
{
diff --git a/src/NerdBank.GitVersioning/CloudBuild.cs b/src/NerdBank.GitVersioning/CloudBuild.cs
index c1025aac..e5417145 100644
--- a/src/NerdBank.GitVersioning/CloudBuild.cs
+++ b/src/NerdBank.GitVersioning/CloudBuild.cs
@@ -21,6 +21,7 @@ public static class CloudBuild
new Jenkins(),
new GitLab(),
new Travis(),
+ new SpaceAutomation(),
};
///
diff --git a/src/NerdBank.GitVersioning/CloudBuildServices/SpaceAutomation.cs b/src/NerdBank.GitVersioning/CloudBuildServices/SpaceAutomation.cs
new file mode 100644
index 00000000..b3d11a0d
--- /dev/null
+++ b/src/NerdBank.GitVersioning/CloudBuildServices/SpaceAutomation.cs
@@ -0,0 +1,38 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+
+namespace Nerdbank.GitVersioning.CloudBuildServices
+{
+ ///
+ /// SpaceAutomation CI build support.
+ ///
+ ///
+ /// The SpaceAutomation-specific properties referenced here are documented here:
+ /// https://www.jetbrains.com/help/space/automation-environment-variables.html
+ ///
+ internal class SpaceAutomation : ICloudBuild
+ {
+ public string BuildingBranch => CloudBuild.IfStartsWith(BuildingRef, "refs/heads/");
+
+ public string BuildingTag => CloudBuild.IfStartsWith(BuildingRef, "refs/tags/");
+
+ public string GitCommitId => Environment.GetEnvironmentVariable("JB_SPACE_GIT_REVISION");
+
+ public bool IsApplicable => this.GitCommitId is not null;
+
+ public bool IsPullRequest => false;
+
+ private static string BuildingRef => Environment.GetEnvironmentVariable("JB_SPACE_GIT_BRANCH");
+
+ public IReadOnlyDictionary SetCloudBuildNumber(string buildNumber, TextWriter stdout, TextWriter stderr)
+ {
+ return new Dictionary();
+ }
+
+ public IReadOnlyDictionary SetCloudBuildVariable(string name, string value, TextWriter stdout, TextWriter stderr)
+ {
+ return new Dictionary();
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/NerdBank.GitVersioning/CloudBuildServices/TeamCity.cs b/src/NerdBank.GitVersioning/CloudBuildServices/TeamCity.cs
index ec0cd84b..828798ee 100644
--- a/src/NerdBank.GitVersioning/CloudBuildServices/TeamCity.cs
+++ b/src/NerdBank.GitVersioning/CloudBuildServices/TeamCity.cs
@@ -8,8 +8,8 @@
/// TeamCity CI build support.
///
///
- /// The TeamCIty-specific properties referenced here are documented here:
- /// https://confluence.jetbrains.com/display/TCD8/Predefined+Build+Parameters
+ /// The TeamCity-specific properties referenced here are documented here:
+ /// https://www.jetbrains.com/help/teamcity/predefined-build-parameters.html
///
internal class TeamCity : ICloudBuild
{
diff --git a/src/NerdBank.GitVersioning/LibGit2/LibGit2GitExtensions.cs b/src/NerdBank.GitVersioning/LibGit2/LibGit2GitExtensions.cs
index 045c647a..b644803f 100644
--- a/src/NerdBank.GitVersioning/LibGit2/LibGit2GitExtensions.cs
+++ b/src/NerdBank.GitVersioning/LibGit2/LibGit2GitExtensions.cs
@@ -3,8 +3,8 @@
namespace Nerdbank.GitVersioning.LibGit2
{
using System;
+ using System.Buffers.Binary;
using System.Collections.Generic;
- using System.Globalization;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices;
@@ -97,18 +97,6 @@ public static int GetHeight(LibGit2Context context, Func? continue
return GetCommitHeight(context.Commit, tracker, continueStepping);
}
- ///
- /// Takes the first 4 bytes of a commit ID (i.e. first 8 characters of its hex-encoded SHA)
- /// and returns them as an integer.
- ///
- /// The commit to identify with an integer.
- /// The integer which identifies a commit.
- public static int GetTruncatedCommitIdAsInt32(this Commit commit)
- {
- Requires.NotNull(commit, nameof(commit));
- return BitConverter.ToInt32(commit.Id.RawId, 0);
- }
-
///
/// Takes the first 2 bytes of a commit ID (i.e. first 4 characters of its hex-encoded SHA)
/// and returns them as an 16-bit unsigned integer.
@@ -118,21 +106,7 @@ public static int GetTruncatedCommitIdAsInt32(this Commit commit)
public static ushort GetTruncatedCommitIdAsUInt16(this Commit commit)
{
Requires.NotNull(commit, nameof(commit));
- return BitConverter.ToUInt16(commit.Id.RawId, 0);
- }
-
- ///
- /// Looks up a commit by an integer that captures the first for bytes of its ID.
- ///
- /// The repo to search for a matching commit.
- /// The value returned from .
- /// A matching commit.
- public static Commit GetCommitFromTruncatedIdInteger(this Repository repo, int truncatedId)
- {
- Requires.NotNull(repo, nameof(repo));
-
- byte[] rawId = BitConverter.GetBytes(truncatedId);
- return repo.Lookup(EncodeAsHex(rawId));
+ return BinaryPrimitives.ReadUInt16BigEndian(commit.Id.RawId);
}
///
@@ -310,7 +284,11 @@ private static bool IsCommitIdMismatch(Version version, VersionOptions versionOp
ushort objectIdLeadingValue = (ushort)expectedCommitIdLeadingValue;
ushort objectIdMask = (ushort)(objectIdLeadingValue == MaximumBuildNumberOrRevisionComponent ? 0xfffe : 0xffff);
- return !commit.Id.StartsWith(objectIdLeadingValue, objectIdMask);
+ // Accept a big endian match or a little endian match.
+ // Nerdbank.GitVersioning up to v3.4 would produce versions based on the endianness of the CPU it ran on (typically little endian).
+ // Starting with v3.5, it deterministically used big endian. In order for `nbgv get-commits` to match on versions computed before and after the change,
+ // we match on either endian setting.
+ return !(commit.Id.StartsWith(objectIdLeadingValue, bigEndian: true, objectIdMask) || commit.Id.StartsWith(objectIdLeadingValue, bigEndian: false, objectIdMask));
}
}
@@ -324,10 +302,11 @@ private static bool IsCommitIdMismatch(Version version, VersionOptions versionOp
/// The object whose ID is to be tested.
/// The leading 16-bits to be tested.
/// The mask that indicates which bits should be compared.
+ /// to read the first two bytes as big endian (v3.5+ behavior); to use little endian (v3.4 and earlier behavior).
/// True if the object's ID starts with after applying the .
- private static bool StartsWith(this ObjectId @object, ushort leadingBytes, ushort bitMask = 0xffff)
+ private static bool StartsWith(this ObjectId @object, ushort leadingBytes, bool bigEndian, ushort bitMask = 0xffff)
{
- ushort truncatedObjectId = BitConverter.ToUInt16(@object.RawId, 0);
+ ushort truncatedObjectId = bigEndian ? BinaryPrimitives.ReadUInt16BigEndian(@object.RawId) : BinaryPrimitives.ReadUInt16LittleEndian(@object.RawId);
return (truncatedObjectId & bitMask) == leadingBytes;
}
diff --git a/src/NerdBank.GitVersioning/ManagedGit/GitObjectId.cs b/src/NerdBank.GitVersioning/ManagedGit/GitObjectId.cs
index 76b5d672..3e62f158 100644
--- a/src/NerdBank.GitVersioning/ManagedGit/GitObjectId.cs
+++ b/src/NerdBank.GitVersioning/ManagedGit/GitObjectId.cs
@@ -167,7 +167,7 @@ public override bool Equals(object? obj)
///
/// A which represents the first two bytes of this .
///
- public ushort AsUInt16() => BinaryPrimitives.ReadUInt16LittleEndian(this.Value.Slice(0, 2));
+ public ushort AsUInt16() => BinaryPrimitives.ReadUInt16BigEndian(this.Value.Slice(0, 2));
///
/// Returns the SHA1 hash of this object.
diff --git a/src/NerdBank.GitVersioning/ReleaseManager.cs b/src/NerdBank.GitVersioning/ReleaseManager.cs
index a59e4739..6656a73e 100644
--- a/src/NerdBank.GitVersioning/ReleaseManager.cs
+++ b/src/NerdBank.GitVersioning/ReleaseManager.cs
@@ -47,6 +47,11 @@ public enum ReleasePreparationError
///
VersionDecrement,
+ ///
+ /// Branch cannot be set to the specified version because the new version is not higher than the current version
+ ///
+ NoVersionIncrement,
+
///
/// Cannot create a branch because it already exists
///
@@ -273,6 +278,14 @@ public void PrepareRelease(string projectDirectory, string releaseUnstableTag =
var nextDevVersion = this.GetNextDevVersion(versionOptions, nextVersion, versionIncrement);
+ // check if the current version on the current branch is different from the next version
+ // otherwise, both the release branch and the dev branch would have the same version
+ if (versionOptions.Version.Version == nextDevVersion.Version)
+ {
+ this.stderr.WriteLine($"Version on '{originalBranchName}' is already set to next version {nextDevVersion.Version}.");
+ throw new ReleasePreparationException(ReleasePreparationError.NoVersionIncrement);
+ }
+
// check if the release branch already exists
if (repository.Branches[releaseBranchName] is not null)
{
diff --git a/src/nbgv/Program.cs b/src/nbgv/Program.cs
index e9ae5d75..b68a1fef 100644
--- a/src/nbgv/Program.cs
+++ b/src/nbgv/Program.cs
@@ -736,6 +736,7 @@ private static int OnPrepareReleaseCommand(string project, string nextVersion, s
case ReleaseManager.ReleasePreparationError.NoVersionFile:
return (int)ExitCodes.NoVersionJsonFound;
case ReleaseManager.ReleasePreparationError.VersionDecrement:
+ case ReleaseManager.ReleasePreparationError.NoVersionIncrement:
return (int)ExitCodes.InvalidVersionSpec;
case ReleaseManager.ReleasePreparationError.BranchAlreadyExists:
return (int)ExitCodes.BranchAlreadyExists;
diff --git a/src/nerdbank-gitversioning.npm/yarn.lock b/src/nerdbank-gitversioning.npm/yarn.lock
index 58378eda..c66da78b 100644
--- a/src/nerdbank-gitversioning.npm/yarn.lock
+++ b/src/nerdbank-gitversioning.npm/yarn.lock
@@ -1222,9 +1222,9 @@ homedir-polyfill@^1.0.1:
parse-passwd "^1.0.0"
hosted-git-info@^2.1.4:
- version "2.8.8"
- resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488"
- integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==
+ version "2.8.9"
+ resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9"
+ integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==
ignore@^5.1.1:
version "5.1.4"
@@ -2029,9 +2029,9 @@ path-is-absolute@^1.0.0:
integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
path-parse@^1.0.6:
- version "1.0.6"
- resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c"
- integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
+ integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
path-root-regex@^0.1.0:
version "0.1.2"
diff --git a/version.json b/version.json
index 4e9d5d3e..f0167361 100644
--- a/version.json
+++ b/version.json
@@ -1,6 +1,6 @@
{
"$schema": "https://raw.githubusercontent.com/dotnet/Nerdbank.GitVersioning/master/src/NerdBank.GitVersioning/version.schema.json",
- "version": "3.4",
+ "version": "3.5-alpha",
"assemblyVersion": {
"precision": "revision"
},