diff --git a/src/NerdBank.GitVersioning/ReleaseManager.cs b/src/NerdBank.GitVersioning/ReleaseManager.cs index e937bc2d2..2b1ceb6a6 100644 --- a/src/NerdBank.GitVersioning/ReleaseManager.cs +++ b/src/NerdBank.GitVersioning/ReleaseManager.cs @@ -280,7 +280,7 @@ private void UpdateVersion(LibGit2Context context, SemanticVersion oldVersion, S if (!EqualityComparer.Default.Equals(versionOptions.Version, newVersion)) { - if (versionOptions.VersionHeightPosition.HasValue && SemanticVersion.WillVersionChangeResetVersionHeight(versionOptions.Version, newVersion, versionOptions.VersionHeightPosition.Value)) + if (versionOptions.VersionHeightOffset != -1 && versionOptions.VersionHeightPosition.HasValue && SemanticVersion.WillVersionChangeResetVersionHeight(versionOptions.Version, newVersion, versionOptions.VersionHeightPosition.Value)) { // The version will be reset by this change, so remove the version height offset property. versionOptions.VersionHeightOffset = null; diff --git a/test/Nerdbank.GitVersioning.Tests/ReleaseManagerTests.cs b/test/Nerdbank.GitVersioning.Tests/ReleaseManagerTests.cs index 0c170b81d..b00a1533d 100644 --- a/test/Nerdbank.GitVersioning.Tests/ReleaseManagerTests.cs +++ b/test/Nerdbank.GitVersioning.Tests/ReleaseManagerTests.cs @@ -638,6 +638,44 @@ public void PrepareRelease_ResetsVersionHeightOffset() Assert.Equal(expectedReleaseVersionOptions, releaseVersion); } + [Fact] + public void PrepareRelease_DoesNotResetNegativeVersionHeightOffset() + { + // create and configure repository + this.InitializeSourceControl(); + + var initialVersionOptions = new VersionOptions + { + Version = SemanticVersion.Parse("1.0-beta"), + VersionHeightOffset = -1, + }; + + var expectedReleaseVersionOptions = new VersionOptions + { + Version = SemanticVersion.Parse("1.0"), + VersionHeightOffset = -1, + }; + + var expectedMainVersionOptions = new VersionOptions + { + Version = SemanticVersion.Parse("1.1-alpha"), + VersionHeightOffset = -1, + }; + + // create version.json + this.WriteVersionFile(initialVersionOptions); + + var releaseManager = new ReleaseManager(); + releaseManager.PrepareRelease(this.RepoPath); + + this.SetContextToHead(); + VersionOptions newVersion = this.Context.VersionFile.GetVersion(); + Assert.Equal(expectedMainVersionOptions, newVersion); + + VersionOptions releaseVersion = this.GetVersionOptions(committish: this.LibGit2Repository.Branches["v1.0"].Tip.Sha); + Assert.Equal(expectedReleaseVersionOptions, releaseVersion); + } + [Theory] [InlineData("1.0-beta", "{0} Custom commit message pattern", "1.0 Custom commit message pattern")] [InlineData("1.0-beta", "Custom commit message pattern - {0} custom message", "Custom commit message pattern - 1.0 custom message")]