diff --git a/src/GitVersionCore.Tests/Approved/VariableProviderTests.ProvidesVariablesInContinuousDeploymentModeForPreRelease.approved.txt b/src/GitVersionCore.Tests/Approved/VariableProviderTests.ProvidesVariablesInContinuousDeploymentModeForPreRelease.approved.txt index 48fa17ef7e..fb99d985f4 100644 --- a/src/GitVersionCore.Tests/Approved/VariableProviderTests.ProvidesVariablesInContinuousDeploymentModeForPreRelease.approved.txt +++ b/src/GitVersionCore.Tests/Approved/VariableProviderTests.ProvidesVariablesInContinuousDeploymentModeForPreRelease.approved.txt @@ -2,29 +2,29 @@ "Major":1, "Minor":2, "Patch":3, - "PreReleaseTag":"unstable.5", - "PreReleaseTagWithDash":"-unstable.5", + "PreReleaseTag":"unstable.8", + "PreReleaseTagWithDash":"-unstable.8", "PreReleaseLabel":"unstable", - "PreReleaseNumber":5, - "WeightedPreReleaseNumber":5, + "PreReleaseNumber":8, + "WeightedPreReleaseNumber":8, "BuildMetaData":"", "BuildMetaDataPadded":"", "FullBuildMetaData":"Branch.develop.Sha.commitSha", "MajorMinorPatch":"1.2.3", - "SemVer":"1.2.3-unstable.5", - "LegacySemVer":"1.2.3-unstable5", - "LegacySemVerPadded":"1.2.3-unstable0005", + "SemVer":"1.2.3-unstable.8", + "LegacySemVer":"1.2.3-unstable8", + "LegacySemVerPadded":"1.2.3-unstable0008", "AssemblySemVer":"1.2.3.0", "AssemblySemFileVer":"1.2.3.0", - "FullSemVer":"1.2.3-unstable.5", - "InformationalVersion":"1.2.3-unstable.5+Branch.develop.Sha.commitSha", + "FullSemVer":"1.2.3-unstable.8", + "InformationalVersion":"1.2.3-unstable.8+Branch.develop.Sha.commitSha", "BranchName":"develop", "Sha":"commitSha", "ShortSha":"commitShortSha", - "NuGetVersionV2":"1.2.3-unstable0005", - "NuGetVersion":"1.2.3-unstable0005", - "NuGetPreReleaseTagV2":"unstable0005", - "NuGetPreReleaseTag":"unstable0005", + "NuGetVersionV2":"1.2.3-unstable0008", + "NuGetVersion":"1.2.3-unstable0008", + "NuGetPreReleaseTagV2":"unstable0008", + "NuGetPreReleaseTag":"unstable0008", "VersionSourceSha":"versionSourceSha", "CommitsSinceVersionSource":5, "CommitsSinceVersionSourcePadded":"0005", diff --git a/src/GitVersionCore.Tests/IntegrationTests/DevelopScenarios.cs b/src/GitVersionCore.Tests/IntegrationTests/DevelopScenarios.cs index 8388a0e3b9..887286e4a5 100644 --- a/src/GitVersionCore.Tests/IntegrationTests/DevelopScenarios.cs +++ b/src/GitVersionCore.Tests/IntegrationTests/DevelopScenarios.cs @@ -273,5 +273,21 @@ public void CommitsSinceVersionSourceShouldNotGoDownUponMergingFeatureOnlyToDeve var expectedFullSemVer = "1.3.0-alpha.5"; fixture.AssertFullSemver(config, expectedFullSemVer); } + + [Test] + public void PreviousPreReleaseTagShouldBeRespectedWhenCountingCommits() + { + using var fixture = new EmptyRepositoryFixture(); + + fixture.Repository.MakeACommit(); + + fixture.BranchTo("develop"); + fixture.MakeATaggedCommit("1.0.0-alpha.3"); // manual bump version + + fixture.MakeACommit(); + fixture.MakeACommit(); + + fixture.AssertFullSemver("1.0.0-alpha.5"); + } } } diff --git a/src/GitVersionCore/OutputVariables/VariableProvider.cs b/src/GitVersionCore/OutputVariables/VariableProvider.cs index d4cdfc7763..d6b45b7768 100644 --- a/src/GitVersionCore/OutputVariables/VariableProvider.cs +++ b/src/GitVersionCore/OutputVariables/VariableProvider.cs @@ -102,9 +102,25 @@ public VersionVariables GetVariablesFor(SemanticVersion semanticVersion, Effecti private static void PromoteNumberOfCommitsToTagNumber(SemanticVersion semanticVersion) { // For continuous deployment the commits since tag gets promoted to the pre-release number - semanticVersion.PreReleaseTag.Number = semanticVersion.BuildMetaData.CommitsSinceTag; - semanticVersion.BuildMetaData.CommitsSinceVersionSource = semanticVersion.BuildMetaData.CommitsSinceTag ?? 0; - semanticVersion.BuildMetaData.CommitsSinceTag = null; + if (!semanticVersion.BuildMetaData.CommitsSinceTag.HasValue) + { + semanticVersion.PreReleaseTag.Number = null; + semanticVersion.BuildMetaData.CommitsSinceVersionSource = 0; + } + else + { + // Number of commits since last tag should be added to PreRelease number if given. Remember to deduct automatic version bump. + if (semanticVersion.PreReleaseTag.Number.HasValue) + { + semanticVersion.PreReleaseTag.Number += semanticVersion.BuildMetaData.CommitsSinceTag - 1; + } + else + { + semanticVersion.PreReleaseTag.Number = semanticVersion.BuildMetaData.CommitsSinceTag; + } + semanticVersion.BuildMetaData.CommitsSinceVersionSource = semanticVersion.BuildMetaData.CommitsSinceTag.Value; + semanticVersion.BuildMetaData.CommitsSinceTag = null; // why is this set to null ? + } } private static string CheckAndFormatString(string formatString, T source, IEnvironment environment, string defaultValue, string formatVarName)