diff --git a/docs/more-info/variables.md b/docs/more-info/variables.md index c9f883244a..673a4aefc0 100644 --- a/docs/more-info/variables.md +++ b/docs/more-info/variables.md @@ -30,6 +30,7 @@ For the `release/3.0.0` branch of GitVersion it shows: "NuGetVersion":"3.0.0-beta0001", "NuGetPreReleaseTagV2":"beta0001", "NuGetPreReleaseTag":"beta0001", + "VersionSourceSha":"950d2f830f5a2af12a6779a48d20dcbb02351f25", "CommitsSinceVersionSource":1, "CommitsSinceVersionSourcePadded":"0001", "CommitDate":"2014-03-06" diff --git a/src/GitVersionCore.Tests/Approved/JsonVersionBuilderTests.Json.approved.txt b/src/GitVersionCore.Tests/Approved/JsonVersionBuilderTests.Json.approved.txt index b4eca77f3d..8058db300f 100644 --- a/src/GitVersionCore.Tests/Approved/JsonVersionBuilderTests.Json.approved.txt +++ b/src/GitVersionCore.Tests/Approved/JsonVersionBuilderTests.Json.approved.txt @@ -25,6 +25,7 @@ "NuGetVersion":"1.2.0-unstable0004", "NuGetPreReleaseTagV2":"unstable0004", "NuGetPreReleaseTag":"unstable0004", + "VersionSourceSha":"versionSourceSha", "CommitsSinceVersionSource":5, "CommitsSinceVersionSourcePadded":"0005", "CommitDate":"2014-03-06" diff --git a/src/GitVersionCore.Tests/Approved/VariableProviderTests.ProvidesVariablesInContinuousDeliveryModeForPreRelease.approved.txt b/src/GitVersionCore.Tests/Approved/VariableProviderTests.ProvidesVariablesInContinuousDeliveryModeForPreRelease.approved.txt index 6d232cdc87..21791aeaaa 100644 --- a/src/GitVersionCore.Tests/Approved/VariableProviderTests.ProvidesVariablesInContinuousDeliveryModeForPreRelease.approved.txt +++ b/src/GitVersionCore.Tests/Approved/VariableProviderTests.ProvidesVariablesInContinuousDeliveryModeForPreRelease.approved.txt @@ -25,6 +25,7 @@ "NuGetVersion":"1.2.3-unstable0004", "NuGetPreReleaseTagV2":"unstable0004", "NuGetPreReleaseTag":"unstable0004", + "VersionSourceSha":"versionSourceSha", "CommitsSinceVersionSource":5, "CommitsSinceVersionSourcePadded":"0005", "CommitDate":"2014-03-06" diff --git a/src/GitVersionCore.Tests/Approved/VariableProviderTests.ProvidesVariablesInContinuousDeliveryModeForPreReleaseWithPadding.approved.txt b/src/GitVersionCore.Tests/Approved/VariableProviderTests.ProvidesVariablesInContinuousDeliveryModeForPreReleaseWithPadding.approved.txt index fde1b2c423..039b41cb09 100644 --- a/src/GitVersionCore.Tests/Approved/VariableProviderTests.ProvidesVariablesInContinuousDeliveryModeForPreReleaseWithPadding.approved.txt +++ b/src/GitVersionCore.Tests/Approved/VariableProviderTests.ProvidesVariablesInContinuousDeliveryModeForPreReleaseWithPadding.approved.txt @@ -25,6 +25,7 @@ "NuGetVersion":"1.2.3-unstable00004", "NuGetPreReleaseTagV2":"unstable0004", "NuGetPreReleaseTag":"unstable0004", + "VersionSourceSha":"versionSourceSha", "CommitsSinceVersionSource":5, "CommitsSinceVersionSourcePadded":"0005", "CommitDate":"2014-03-06" diff --git a/src/GitVersionCore.Tests/Approved/VariableProviderTests.ProvidesVariablesInContinuousDeliveryModeForStable.approved.txt b/src/GitVersionCore.Tests/Approved/VariableProviderTests.ProvidesVariablesInContinuousDeliveryModeForStable.approved.txt index 3f4b13ed31..2e3623c345 100644 --- a/src/GitVersionCore.Tests/Approved/VariableProviderTests.ProvidesVariablesInContinuousDeliveryModeForStable.approved.txt +++ b/src/GitVersionCore.Tests/Approved/VariableProviderTests.ProvidesVariablesInContinuousDeliveryModeForStable.approved.txt @@ -25,6 +25,7 @@ "NuGetVersion":"1.2.3", "NuGetPreReleaseTagV2":"", "NuGetPreReleaseTag":"", + "VersionSourceSha":"versionSourceSha", "CommitsSinceVersionSource":5, "CommitsSinceVersionSourcePadded":"0005", "CommitDate":"2014-03-06" diff --git a/src/GitVersionCore.Tests/Approved/VariableProviderTests.ProvidesVariablesInContinuousDeploymentModeForPreRelease.approved.txt b/src/GitVersionCore.Tests/Approved/VariableProviderTests.ProvidesVariablesInContinuousDeploymentModeForPreRelease.approved.txt index 9bcefac614..48fa17ef7e 100644 --- a/src/GitVersionCore.Tests/Approved/VariableProviderTests.ProvidesVariablesInContinuousDeploymentModeForPreRelease.approved.txt +++ b/src/GitVersionCore.Tests/Approved/VariableProviderTests.ProvidesVariablesInContinuousDeploymentModeForPreRelease.approved.txt @@ -25,6 +25,7 @@ "NuGetVersion":"1.2.3-unstable0005", "NuGetPreReleaseTagV2":"unstable0005", "NuGetPreReleaseTag":"unstable0005", + "VersionSourceSha":"versionSourceSha", "CommitsSinceVersionSource":5, "CommitsSinceVersionSourcePadded":"0005", "CommitDate":"2014-03-06" diff --git a/src/GitVersionCore.Tests/Approved/VariableProviderTests.ProvidesVariablesInContinuousDeploymentModeForStable.approved.txt b/src/GitVersionCore.Tests/Approved/VariableProviderTests.ProvidesVariablesInContinuousDeploymentModeForStable.approved.txt index a3f6376706..7213bc3934 100644 --- a/src/GitVersionCore.Tests/Approved/VariableProviderTests.ProvidesVariablesInContinuousDeploymentModeForStable.approved.txt +++ b/src/GitVersionCore.Tests/Approved/VariableProviderTests.ProvidesVariablesInContinuousDeploymentModeForStable.approved.txt @@ -25,6 +25,7 @@ "NuGetVersion":"1.2.3-ci0005", "NuGetPreReleaseTagV2":"ci0005", "NuGetPreReleaseTag":"ci0005", + "VersionSourceSha":"versionSourceSha", "CommitsSinceVersionSource":5, "CommitsSinceVersionSourcePadded":"0005", "CommitDate":"2014-03-06" diff --git a/src/GitVersionCore.Tests/Approved/VariableProviderTests.ProvidesVariablesInContinuousDeploymentModeForStableWhenCurrentCommitIsTagged.approved.txt b/src/GitVersionCore.Tests/Approved/VariableProviderTests.ProvidesVariablesInContinuousDeploymentModeForStableWhenCurrentCommitIsTagged.approved.txt index 823905db5e..2170467d25 100644 --- a/src/GitVersionCore.Tests/Approved/VariableProviderTests.ProvidesVariablesInContinuousDeploymentModeForStableWhenCurrentCommitIsTagged.approved.txt +++ b/src/GitVersionCore.Tests/Approved/VariableProviderTests.ProvidesVariablesInContinuousDeploymentModeForStableWhenCurrentCommitIsTagged.approved.txt @@ -25,6 +25,7 @@ "NuGetVersion":"1.2.3", "NuGetPreReleaseTagV2":"", "NuGetPreReleaseTag":"", + "VersionSourceSha":"versionSourceSha", "CommitsSinceVersionSource":5, "CommitsSinceVersionSourcePadded":"0005", "CommitDate":"2014-03-06" diff --git a/src/GitVersionCore.Tests/Approved/WixFileTests.UpdateWixVersionFile.approved.txt b/src/GitVersionCore.Tests/Approved/WixFileTests.UpdateWixVersionFile.approved.txt index 1a64c40973..73aef92757 100644 --- a/src/GitVersionCore.Tests/Approved/WixFileTests.UpdateWixVersionFile.approved.txt +++ b/src/GitVersionCore.Tests/Approved/WixFileTests.UpdateWixVersionFile.approved.txt @@ -28,5 +28,6 @@ + \ No newline at end of file diff --git a/src/GitVersionCore.Tests/Approved/cs/GitVersionInformationGeneratorTests.ShouldCreateFile.approved.txt b/src/GitVersionCore.Tests/Approved/cs/GitVersionInformationGeneratorTests.ShouldCreateFile.approved.txt index 4c485502cd..d9abe5e7ab 100644 --- a/src/GitVersionCore.Tests/Approved/cs/GitVersionInformationGeneratorTests.ShouldCreateFile.approved.txt +++ b/src/GitVersionCore.Tests/Approved/cs/GitVersionInformationGeneratorTests.ShouldCreateFile.approved.txt @@ -37,6 +37,7 @@ static class GitVersionInformation public static string NuGetVersion = "1.2.3-unstable0004"; public static string NuGetPreReleaseTagV2 = "unstable0004"; public static string NuGetPreReleaseTag = "unstable0004"; + public static string VersionSourceSha = "versionSourceSha"; public static string CommitsSinceVersionSource = "5"; public static string CommitsSinceVersionSourcePadded = "0005"; public static string CommitDate = "2014-03-06"; diff --git a/src/GitVersionCore.Tests/Approved/fs/GitVersionInformationGeneratorTests.ShouldCreateFile.approved.txt b/src/GitVersionCore.Tests/Approved/fs/GitVersionInformationGeneratorTests.ShouldCreateFile.approved.txt index 3b4b890510..414e4837df 100644 --- a/src/GitVersionCore.Tests/Approved/fs/GitVersionInformationGeneratorTests.ShouldCreateFile.approved.txt +++ b/src/GitVersionCore.Tests/Approved/fs/GitVersionInformationGeneratorTests.ShouldCreateFile.approved.txt @@ -37,6 +37,7 @@ module GitVersionInformation let NuGetVersion = "1.2.3-unstable0004" let NuGetPreReleaseTagV2 = "unstable0004" let NuGetPreReleaseTag = "unstable0004" + let VersionSourceSha = "versionSourceSha" let CommitsSinceVersionSource = "5" let CommitsSinceVersionSourcePadded = "0005" let CommitDate = "2014-03-06" \ No newline at end of file diff --git a/src/GitVersionCore.Tests/Approved/vb/GitVersionInformationGeneratorTests.ShouldCreateFile.approved.txt b/src/GitVersionCore.Tests/Approved/vb/GitVersionInformationGeneratorTests.ShouldCreateFile.approved.txt index 429bcf29a9..d3c65d5784 100644 --- a/src/GitVersionCore.Tests/Approved/vb/GitVersionInformationGeneratorTests.ShouldCreateFile.approved.txt +++ b/src/GitVersionCore.Tests/Approved/vb/GitVersionInformationGeneratorTests.ShouldCreateFile.approved.txt @@ -38,6 +38,7 @@ NotInheritable Class GitVersionInformation Public Shared NuGetVersion As String = "1.2.3-unstable0004" Public Shared NuGetPreReleaseTagV2 As String = "unstable0004" Public Shared NuGetPreReleaseTag As String = "unstable0004" + Public Shared VersionSourceSha As String = "versionSourceSha" Public Shared CommitsSinceVersionSource As String = "5" Public Shared CommitsSinceVersionSourcePadded As String = "0005" Public Shared CommitDate As String = "2014-03-06" diff --git a/src/GitVersionCore.Tests/AssemblyInfoFileUpdaterTests.cs b/src/GitVersionCore.Tests/AssemblyInfoFileUpdaterTests.cs index 14b65df11a..b6a1a63e29 100644 --- a/src/GitVersionCore.Tests/AssemblyInfoFileUpdaterTests.cs +++ b/src/GitVersionCore.Tests/AssemblyInfoFileUpdaterTests.cs @@ -486,7 +486,7 @@ private static void VerifyAssemblyInfoFile( var fileSystem = Substitute.For(); var version = new SemanticVersion { - BuildMetaData = new SemanticVersionBuildMetaData(3, "foo", "hash", "shortHash", DateTimeOffset.Now), + BuildMetaData = new SemanticVersionBuildMetaData("versionSourceHash", 3, "foo", "hash", "shortHash", DateTimeOffset.Now), Major = 2, Minor = 3, Patch = 1 diff --git a/src/GitVersionCore.Tests/CommitDateTests.cs b/src/GitVersionCore.Tests/CommitDateTests.cs index 0f6c51d800..648b9c85e9 100644 --- a/src/GitVersionCore.Tests/CommitDateTests.cs +++ b/src/GitVersionCore.Tests/CommitDateTests.cs @@ -21,7 +21,7 @@ public void CommitDateFormatTest(string format, string expectedOutcome) var formatValues = new SemanticVersionFormatValues( new SemanticVersion { - BuildMetaData = new SemanticVersionBuildMetaData(0, "master", "3139d4eeb044f46057693473eacc2655b3b27e7d", "3139d4eeb", new DateTimeOffset(date, TimeSpan.Zero)), // assume time zone is UTC + BuildMetaData = new SemanticVersionBuildMetaData("950d2f830f5a2af12a6779a48d20dcbb02351f25", 0, "master", "3139d4eeb044f46057693473eacc2655b3b27e7d", "3139d4eeb", new DateTimeOffset(date, TimeSpan.Zero)), // assume time zone is UTC }, new EffectiveConfiguration( diff --git a/src/GitVersionCore.Tests/ExecuteCoreTests.cs b/src/GitVersionCore.Tests/ExecuteCoreTests.cs index 997a2f9119..c097a35f4b 100644 --- a/src/GitVersionCore.Tests/ExecuteCoreTests.cs +++ b/src/GitVersionCore.Tests/ExecuteCoreTests.cs @@ -36,7 +36,7 @@ public void CacheKeySameAfterReNormalizing() var cacheKey2 = GitVersionCacheKeyFactory.Create(fileSystem, gitPreparer, null); cacheKey2.Value.ShouldBe(cacheKey1.Value); - }); + }); } [Test] @@ -51,8 +51,8 @@ public void CacheFileExistsOnDisk() PreReleaseLabel: test PreReleaseNumber: 19 WeightedPreReleaseNumber: 19 -BuildMetaData: -BuildMetaDataPadded: +BuildMetaData: +BuildMetaDataPadded: FullBuildMetaData: Branch.feature/test.Sha.dd2a29aff0c948e1bdf3dabbe13e1576e70d5f9f MajorMinorPatch: 4.10.3 SemVer: 4.10.3-test.19 @@ -69,6 +69,7 @@ public void CacheFileExistsOnDisk() NuGetVersion: 4.10.3-test0019 NuGetPreReleaseTagV2: test0019 NuGetPreReleaseTag: test0019 +VersionSourceSha: 4.10.2 CommitsSinceVersionSource: 19 CommitsSinceVersionSourcePadded: 0019 CommitDate: 2015-11-10 @@ -98,8 +99,8 @@ public void CacheFileExistsOnDiskWhenOverrideConfigIsSpecifiedVersionShouldBeDyn PreReleaseTagWithDash: -test.19 PreReleaseLabel: test PreReleaseNumber: 19 -BuildMetaData: -BuildMetaDataPadded: +BuildMetaData: +BuildMetaDataPadded: FullBuildMetaData: Branch.feature/test.Sha.dd2a29aff0c948e1bdf3dabbe13e1576e70d5f9f MajorMinorPatch: 4.10.3 SemVer: 4.10.3-test.19 @@ -163,8 +164,8 @@ public void ConfigChangeInvalidatesCache() PreReleaseLabel: test PreReleaseNumber: 19 WeightedPreReleaseNumber: 19 -BuildMetaData: -BuildMetaDataPadded: +BuildMetaData: +BuildMetaDataPadded: FullBuildMetaData: Branch.feature/test.Sha.dd2a29aff0c948e1bdf3dabbe13e1576e70d5f9f MajorMinorPatch: 4.10.3 SemVer: 4.10.3-test.19 @@ -181,6 +182,7 @@ public void ConfigChangeInvalidatesCache() NuGetVersion: 4.10.3-test0019 NuGetPreReleaseTagV2: test0019 NuGetPreReleaseTag: test0019 +VersionSourceSha: 4.10.2 CommitsSinceVersionSource: 19 CommitsSinceVersionSourcePadded: 0019 CommitDate: 2015-11-10 @@ -214,8 +216,8 @@ public void NoCacheBypassesCache() PreReleaseLabel: test PreReleaseNumber: 19 WeightedPreReleaseNumber: 19 -BuildMetaData: -BuildMetaDataPadded: +BuildMetaData: +BuildMetaDataPadded: FullBuildMetaData: Branch.feature/test.Sha.dd2a29aff0c948e1bdf3dabbe13e1576e70d5f9f MajorMinorPatch: 4.10.3 SemVer: 4.10.3-test.19 @@ -232,6 +234,7 @@ public void NoCacheBypassesCache() NuGetVersion: 4.10.3-test0019 NuGetPreReleaseTagV2: test0019 NuGetPreReleaseTag: test0019 +VersionSourceSha: 4.10.2 CommitsSinceVersionSource: 19 CommitsSinceVersionSourcePadded: 0019 CommitDate: 2015-11-10 diff --git a/src/GitVersionCore.Tests/GitVersionInformationGeneratorTests.cs b/src/GitVersionCore.Tests/GitVersionInformationGeneratorTests.cs index 90a592932b..18829445c3 100644 --- a/src/GitVersionCore.Tests/GitVersionInformationGeneratorTests.cs +++ b/src/GitVersionCore.Tests/GitVersionInformationGeneratorTests.cs @@ -34,7 +34,7 @@ public void ShouldCreateFile(string fileExtension) Minor = 2, Patch = 3, PreReleaseTag = "unstable4", - BuildMetaData = new SemanticVersionBuildMetaData(5, + BuildMetaData = new SemanticVersionBuildMetaData("versionSourceSha", 5, "feature1", "commitSha", "commitShortSha", DateTimeOffset.Parse("2014-03-06 23:59:59Z")) }; diff --git a/src/GitVersionCore.Tests/InformationalVersionBuilderTests.cs b/src/GitVersionCore.Tests/InformationalVersionBuilderTests.cs index 23c1b87cb1..60c2338e2a 100644 --- a/src/GitVersionCore.Tests/InformationalVersionBuilderTests.cs +++ b/src/GitVersionCore.Tests/InformationalVersionBuilderTests.cs @@ -6,19 +6,19 @@ [TestFixture] public class InformationalVersionBuilderTests : TestBase { - [TestCase("feature1", "a682956dc1a2752aa24597a0f5cd939f93614509", "a682956d", 1, 2, 3, "unstable", 1, "1.2.3-unstable+1.Branch.feature1.Sha.a682956dc1a2752aa24597a0f5cd939f93614509")] - [TestCase("develop", "a682956dc1a2752aa24597a0f5cd939f93614509", "a682956d", 1, 2, 3, "alpha645", null, "1.2.3-alpha.645+Branch.develop.Sha.a682956dc1a2752aa24597a0f5cd939f93614509")] - [TestCase("develop", "a682956dc1a2752aa24597a0f5cd939f93614509", "a682956d", 1, 2, 3, "unstable645", null, "1.2.3-unstable.645+Branch.develop.Sha.a682956dc1a2752aa24597a0f5cd939f93614509")] - [TestCase("develop", "a682956dc1a2752aa24597a0f5cd939f93614509", "a682956d", 1, 2, 3, "beta645", null, "1.2.3-beta.645+Branch.develop.Sha.a682956dc1a2752aa24597a0f5cd939f93614509")] - [TestCase("hotfix-foo", "a682956dc1a2752aa24597a0f5cd939f93614509", "a682956d", 1, 2, 3, "alpha645", null, "1.2.3-alpha.645+Branch.hotfix-foo.Sha.a682956dc1a2752aa24597a0f5cd939f93614509")] - [TestCase("hotfix-foo", "a682956dc1a2752aa24597a0f5cd939f93614509", "a682956d", 1, 2, 3, "beta645", null, "1.2.3-beta.645+Branch.hotfix-foo.Sha.a682956dc1a2752aa24597a0f5cd939f93614509")] - [TestCase("hotfix-foo", "a682956dc1a2752aa24597a0f5cd939f93614509", "a682956d", 1, 2, 3, null, null, "1.2.3+Branch.hotfix-foo.Sha.a682956dc1a2752aa24597a0f5cd939f93614509")] - [TestCase("master", "a682956dc1a2752aa24597a0f5cd939f93614509", "a682956d", 1, 2, 3, null, null, "1.2.3+Branch.master.Sha.a682956dc1a2752aa24597a0f5cd939f93614509")] - [TestCase("myPullRequest", "a682956dc1a2752aa24597a0f5cd939f93614509", "a682956d", 1, 2, 3, "unstable3", null, "1.2.3-unstable.3+Branch.myPullRequest.Sha.a682956dc1a2752aa24597a0f5cd939f93614509")] - [TestCase("release-1.2", "a682956dc1a2752aa24597a0f5cd939f93614509", "a682956d", 1, 2, 0, "beta2", null, "1.2.0-beta.2+Branch.release-1.2.Sha.a682956dc1a2752aa24597a0f5cd939f93614509")] - [TestCase("release-1.2", "a682956dc1a2752aa24597a0f5cd939f93614509", "a682956d", 1, 2, 0, "alpha2", null, "1.2.0-alpha.2+Branch.release-1.2.Sha.a682956dc1a2752aa24597a0f5cd939f93614509")] + [TestCase("feature1", "a682956dc1a2752aa24597a0f5cd939f93614509", "a682956d", 1, 2, 3, "unstable", "1c6609bcf", 1, "1.2.3-unstable+1.Branch.feature1.Sha.a682956dc1a2752aa24597a0f5cd939f93614509")] + [TestCase("develop", "a682956dc1a2752aa24597a0f5cd939f93614509", "a682956d", 1, 2, 3, "alpha645", null, null, "1.2.3-alpha.645+Branch.develop.Sha.a682956dc1a2752aa24597a0f5cd939f93614509")] + [TestCase("develop", "a682956dc1a2752aa24597a0f5cd939f93614509", "a682956d", 1, 2, 3, "unstable645", null, null, "1.2.3-unstable.645+Branch.develop.Sha.a682956dc1a2752aa24597a0f5cd939f93614509")] + [TestCase("develop", "a682956dc1a2752aa24597a0f5cd939f93614509", "a682956d", 1, 2, 3, "beta645", null, null, "1.2.3-beta.645+Branch.develop.Sha.a682956dc1a2752aa24597a0f5cd939f93614509")] + [TestCase("hotfix-foo", "a682956dc1a2752aa24597a0f5cd939f93614509", "a682956d", 1, 2, 3, "alpha645", null, null, "1.2.3-alpha.645+Branch.hotfix-foo.Sha.a682956dc1a2752aa24597a0f5cd939f93614509")] + [TestCase("hotfix-foo", "a682956dc1a2752aa24597a0f5cd939f93614509", "a682956d", 1, 2, 3, "beta645", null, null, "1.2.3-beta.645+Branch.hotfix-foo.Sha.a682956dc1a2752aa24597a0f5cd939f93614509")] + [TestCase("hotfix-foo", "a682956dc1a2752aa24597a0f5cd939f93614509", "a682956d", 1, 2, 3, null, null, null, "1.2.3+Branch.hotfix-foo.Sha.a682956dc1a2752aa24597a0f5cd939f93614509")] + [TestCase("master", "a682956dc1a2752aa24597a0f5cd939f93614509", "a682956d", 1, 2, 3, null, null, null, "1.2.3+Branch.master.Sha.a682956dc1a2752aa24597a0f5cd939f93614509")] + [TestCase("myPullRequest", "a682956dc1a2752aa24597a0f5cd939f93614509", "a682956d", 1, 2, 3, "unstable3", null, null, "1.2.3-unstable.3+Branch.myPullRequest.Sha.a682956dc1a2752aa24597a0f5cd939f93614509")] + [TestCase("release-1.2", "a682956dc1a2752aa24597a0f5cd939f93614509", "a682956d", 1, 2, 0, "beta2", null, null, "1.2.0-beta.2+Branch.release-1.2.Sha.a682956dc1a2752aa24597a0f5cd939f93614509")] + [TestCase("release-1.2", "a682956dc1a2752aa24597a0f5cd939f93614509", "a682956d", 1, 2, 0, "alpha2", null, null, "1.2.0-alpha.2+Branch.release-1.2.Sha.a682956dc1a2752aa24597a0f5cd939f93614509")] public void ValidateInformationalVersionBuilder(string branchName, string sha, string shortSha, int major, int minor, int patch, - string tag, int? suffix, string versionString) + string tag, string versionSourceSha, int? commitsSinceTag, string versionString) { var semanticVersion = new SemanticVersion { @@ -26,11 +26,11 @@ public void ValidateInformationalVersionBuilder(string branchName, string sha, s Minor = minor, Patch = patch, PreReleaseTag = tag, - BuildMetaData = new SemanticVersionBuildMetaData(suffix, branchName, sha, shortSha, DateTimeOffset.MinValue), + BuildMetaData = new SemanticVersionBuildMetaData(versionSourceSha, commitsSinceTag, branchName, sha, shortSha, DateTimeOffset.MinValue), }; var informationalVersion = semanticVersion.ToString("i"); Assert.AreEqual(versionString, informationalVersion); } -} \ No newline at end of file +} diff --git a/src/GitVersionCore.Tests/IntegrationTests/DevelopScenarios.cs b/src/GitVersionCore.Tests/IntegrationTests/DevelopScenarios.cs index 3c5f675697..ef3384c9ac 100644 --- a/src/GitVersionCore.Tests/IntegrationTests/DevelopScenarios.cs +++ b/src/GitVersionCore.Tests/IntegrationTests/DevelopScenarios.cs @@ -222,4 +222,81 @@ public void TagOnHotfixShouldNotAffectDevelop() fixture.AssertFullSemver("1.3.0-alpha.2"); } } + + [Test] + public void CommitsSinceVersionSourceShouldNotGoDownUponGitFlowReleaseFinish() + { + var config = new Config + { + VersioningMode = VersioningMode.ContinuousDeployment + }; + + using (var fixture = new EmptyRepositoryFixture()) + { + fixture.MakeACommit(); + fixture.ApplyTag("1.1.0"); + fixture.BranchTo("develop"); + fixture.MakeACommit("commit in develop - 1"); + fixture.AssertFullSemver("1.2.0-alpha.1"); + fixture.BranchTo("release/1.2.0"); + fixture.AssertFullSemver("1.2.0-beta.1+0"); + fixture.Checkout("develop"); + fixture.MakeACommit("commit in develop - 2"); + fixture.MakeACommit("commit in develop - 3"); + fixture.MakeACommit("commit in develop - 4"); + fixture.MakeACommit("commit in develop - 5"); + fixture.AssertFullSemver("1.3.0-alpha.4"); + fixture.Checkout("release/1.2.0"); + fixture.MakeACommit("commit in release/1.2.0 - 1"); + fixture.MakeACommit("commit in release/1.2.0 - 2"); + fixture.MakeACommit("commit in release/1.2.0 - 3"); + fixture.AssertFullSemver("1.2.0-beta.1+3"); + fixture.Checkout("master"); + fixture.MergeNoFF("release/1.2.0"); + fixture.ApplyTag("1.2.0"); + fixture.Checkout("develop"); + fixture.MergeNoFF("release/1.2.0"); + fixture.MakeACommit("commit in develop - 6"); + fixture.AssertFullSemver("1.3.0-alpha.9"); + fixture.SequenceDiagram.Destroy("release/1.2.0"); + fixture.Repository.Branches.Remove("release/1.2.0"); + + var expectedFullSemVer = "1.3.0-alpha.9"; + fixture.AssertFullSemver(config, expectedFullSemVer); + } + } + + [Test] + public void CommitsSinceVersionSourceShouldNotGoDownUponMergingFeatureOnlyToDevelop() + { + var config = new Config + { + VersioningMode = VersioningMode.ContinuousDeployment + }; + + using (var fixture = new EmptyRepositoryFixture()) + { + fixture.MakeACommit("commit in master - 1"); + fixture.ApplyTag("1.1.0"); + fixture.BranchTo("develop"); + fixture.MakeACommit("commit in develop - 1"); + fixture.AssertFullSemver("1.2.0-alpha.1"); + fixture.BranchTo("release/1.2.0"); + fixture.MakeACommit("commit in release - 1"); + fixture.MakeACommit("commit in release - 2"); + fixture.MakeACommit("commit in release - 3"); + fixture.AssertFullSemver("1.2.0-beta.1+3"); + fixture.ApplyTag("1.2.0"); + fixture.Checkout("develop"); + fixture.MakeACommit("commit in develop - 2"); + fixture.AssertFullSemver("1.3.0-alpha.1"); + fixture.MergeNoFF("release/1.2.0"); + fixture.AssertFullSemver("1.3.0-alpha.5"); + fixture.SequenceDiagram.Destroy("release/1.2.0"); + fixture.Repository.Branches.Remove("release/1.2.0"); + + var expectedFullSemVer = "1.3.0-alpha.5"; + fixture.AssertFullSemver(config, expectedFullSemVer); + } + } } diff --git a/src/GitVersionCore.Tests/IntegrationTests/ReleaseBranchScenarios.cs b/src/GitVersionCore.Tests/IntegrationTests/ReleaseBranchScenarios.cs index 8143f63e7a..f91938e670 100644 --- a/src/GitVersionCore.Tests/IntegrationTests/ReleaseBranchScenarios.cs +++ b/src/GitVersionCore.Tests/IntegrationTests/ReleaseBranchScenarios.cs @@ -51,7 +51,7 @@ public void NoMergeBacksToDevelopInCaseThereAreChangesInReleaseBranch() fixture.Repository.MakeACommit(); fixture.Repository.Branches.Remove("release/1.0.0"); - fixture.AssertFullSemver("1.1.0-alpha.2"); + fixture.AssertFullSemver("1.1.0-alpha.3"); } } @@ -394,13 +394,13 @@ public void CommitOnDevelop_AfterReleaseBranchMergeToDevelop_ShouldNotResetCount // Make new commit on develop fixture.Checkout("develop"); - // Checkout to release (no new commits) + // Checkout to release (no new commits) fixture.Checkout("release-2.0.0"); fixture.AssertFullSemver(config, "2.0.0-beta.3"); fixture.Checkout("develop"); fixture.Repository.MakeACommit("develop after merge"); - // Checkout to release (no new commits) + // Checkout to release (no new commits) fixture.Checkout("release-2.0.0"); fixture.AssertFullSemver(config, "2.0.0-beta.3"); @@ -413,7 +413,7 @@ public void CommitOnDevelop_AfterReleaseBranchMergeToDevelop_ShouldNotResetCount fixture.Checkout("develop"); fixture.Repository.MergeNoFF("release-2.0.0", Generate.SignatureNow()); - // Checkout to release (no new commits) + // Checkout to release (no new commits) fixture.Checkout("release-2.0.0"); fixture.AssertFullSemver(config, "2.0.0-beta.5"); } @@ -538,7 +538,7 @@ public void FeatureFromReleaseBranch_ShouldNotResetCount() Commands.Checkout(fixture.Repository, "feature/xxx"); fixture.Repository.MakeACommit("feature 3"); - // Checkout to release (no new commits) + // Checkout to release (no new commits) Commands.Checkout(fixture.Repository, "release-2.0.0"); fixture.AssertFullSemver(config, "2.0.0-beta.11"); diff --git a/src/GitVersionCore.Tests/JsonVersionBuilderTests.cs b/src/GitVersionCore.Tests/JsonVersionBuilderTests.cs index 0f5bd9976b..c478511c0f 100644 --- a/src/GitVersionCore.Tests/JsonVersionBuilderTests.cs +++ b/src/GitVersionCore.Tests/JsonVersionBuilderTests.cs @@ -24,7 +24,7 @@ public void Json() Minor = 2, Patch = 0, PreReleaseTag = "unstable4", - BuildMetaData = new SemanticVersionBuildMetaData(5, "feature1", "commitSha", "commitShortSha", DateTimeOffset.Parse("2014-03-06 23:59:59Z")) + BuildMetaData = new SemanticVersionBuildMetaData("versionSourceSha", 5, "feature1", "commitSha", "commitShortSha", DateTimeOffset.Parse("2014-03-06 23:59:59Z")) }; var config = new TestEffectiveConfiguration(); diff --git a/src/GitVersionCore.Tests/TestableVersionVariables.cs b/src/GitVersionCore.Tests/TestableVersionVariables.cs index b1cb388c65..5d1837cb87 100644 --- a/src/GitVersionCore.Tests/TestableVersionVariables.cs +++ b/src/GitVersionCore.Tests/TestableVersionVariables.cs @@ -1,4 +1,4 @@ -namespace GitVersionCore.Tests +namespace GitVersionCore.Tests { using GitVersion; @@ -13,13 +13,13 @@ public TestableVersionVariables( string preReleaseTagWithDash = "", string preReleaseLabel = "", string preReleaseNumber = "", string weightedPreReleaseNumber = "", string informationalVersion = "", string commitDate = "", string nugetVersion = "", string nugetVersionV2 = "", string nugetPreReleaseTag = "", - string nugetPreReleaseTagV2 = "", string commitsSinceVersionSource = "", + string nugetPreReleaseTagV2 = "", string versionSourceSha = "", string commitsSinceVersionSource = "", string commitsSinceVersionSourcePadded = "") : base( major, minor, patch, buildMetaData, buildMetaDataPadded, fullBuildMetaData, branchName, sha, shortSha, majorMinorPatch, semVer, legacySemVer, legacySemVerPadded, fullSemVer, assemblySemVer, assemblySemFileVer, preReleaseTag, weightedPreReleaseNumber, preReleaseTagWithDash, preReleaseLabel, preReleaseNumber, informationalVersion, commitDate, nugetVersion, nugetVersionV2, - nugetPreReleaseTag, nugetPreReleaseTagV2, commitsSinceVersionSource, commitsSinceVersionSourcePadded) + nugetPreReleaseTag, nugetPreReleaseTagV2, versionSourceSha, commitsSinceVersionSource, commitsSinceVersionSourcePadded) { } } diff --git a/src/GitVersionCore.Tests/VariableProviderTests.cs b/src/GitVersionCore.Tests/VariableProviderTests.cs index a5eb1ea1a5..64e1c25185 100644 --- a/src/GitVersionCore.Tests/VariableProviderTests.cs +++ b/src/GitVersionCore.Tests/VariableProviderTests.cs @@ -6,7 +6,7 @@ [TestFixture] public class VariableProviderTests : TestBase -{ +{ [SetUp] public void Setup() @@ -28,6 +28,7 @@ public void ProvidesVariablesInContinuousDeliveryModeForPreRelease() BuildMetaData = "5.Branch.develop" }; + semVer.BuildMetaData.VersionSourceSha = "versionSourceSha"; semVer.BuildMetaData.Sha = "commitSha"; semVer.BuildMetaData.ShortSha = "commitShortSha"; semVer.BuildMetaData.CommitDate = DateTimeOffset.Parse("2014-03-06 23:59:59Z"); @@ -54,6 +55,7 @@ public void ProvidesVariablesInContinuousDeliveryModeForPreReleaseWithPadding() BuildMetaData = "5.Branch.develop" }; + semVer.BuildMetaData.VersionSourceSha = "versionSourceSha"; semVer.BuildMetaData.Sha = "commitSha"; semVer.BuildMetaData.ShortSha = "commitShortSha"; semVer.BuildMetaData.CommitDate = DateTimeOffset.Parse("2014-03-06 23:59:59Z"); @@ -80,6 +82,7 @@ public void ProvidesVariablesInContinuousDeploymentModeForPreRelease() BuildMetaData = "5.Branch.develop" }; + semVer.BuildMetaData.VersionSourceSha = "versionSourceSha"; semVer.BuildMetaData.Sha = "commitSha"; semVer.BuildMetaData.ShortSha = "commitShortSha"; semVer.BuildMetaData.CommitDate = DateTimeOffset.Parse("2014-03-06 23:59:59Z"); @@ -104,6 +107,7 @@ public void ProvidesVariablesInContinuousDeliveryModeForStable() BuildMetaData = "5.Branch.develop" }; + semVer.BuildMetaData.VersionSourceSha = "versionSourceSha"; semVer.BuildMetaData.Sha = "commitSha"; semVer.BuildMetaData.ShortSha = "commitShortSha"; semVer.BuildMetaData.CommitDate = DateTimeOffset.Parse("2014-03-06 23:59:59Z"); @@ -128,6 +132,7 @@ public void ProvidesVariablesInContinuousDeploymentModeForStable() BuildMetaData = "5.Branch.develop" }; + semVer.BuildMetaData.VersionSourceSha = "versionSourceSha"; semVer.BuildMetaData.Sha = "commitSha"; semVer.BuildMetaData.ShortSha = "commitShortSha"; semVer.BuildMetaData.CommitDate = DateTimeOffset.Parse("2014-03-06 23:59:59Z"); @@ -151,6 +156,7 @@ public void ProvidesVariablesInContinuousDeploymentModeForStableWhenCurrentCommi Patch = 3, BuildMetaData = { + VersionSourceSha = "versionSourceSha", CommitsSinceTag = 5, CommitsSinceVersionSource = 5, Sha = "commitSha", @@ -210,4 +216,4 @@ public void ProvidesVariablesInContinuousDeploymentModeWithTagSetToUseBranchName vars.FullSemVer.ShouldBe("1.2.3-feature.5"); } -} \ No newline at end of file +} diff --git a/src/GitVersionCore.Tests/VersionCalculation/NextVersionCalculatorTests.cs b/src/GitVersionCore.Tests/VersionCalculation/NextVersionCalculatorTests.cs index ffdcd5308b..987aee52e6 100644 --- a/src/GitVersionCore.Tests/VersionCalculation/NextVersionCalculatorTests.cs +++ b/src/GitVersionCore.Tests/VersionCalculation/NextVersionCalculatorTests.cs @@ -15,7 +15,7 @@ public class NextVersionCalculatorTests : TestBase public void ShouldIncrementVersionBasedOnConfig() { var baseCalculator = new TestBaseVersionCalculator(true, new SemanticVersion(1), new MockCommit()); - var semanticVersionBuildMetaData = new SemanticVersionBuildMetaData(1, "master", "b1a34edbd80e141f7cc046c074f109be7d022074", "b1a34e", DateTimeOffset.Now); + var semanticVersionBuildMetaData = new SemanticVersionBuildMetaData("ef7d0d7e1e700f1c7c9fa01ea6791bb778a5c37c", 1, "master", "b1a34edbd80e141f7cc046c074f109be7d022074", "b1a34e", DateTimeOffset.Now); var sut = new NextVersionCalculator(baseCalculator, new TestMetaDataCalculator(semanticVersionBuildMetaData)); var config = new Config(); var context = new GitVersionContextBuilder().WithConfig(config).Build(); @@ -29,7 +29,7 @@ public void ShouldIncrementVersionBasedOnConfig() public void DoesNotIncrementWhenBaseVersionSaysNotTo() { var baseCalculator = new TestBaseVersionCalculator(false, new SemanticVersion(1), new MockCommit()); - var semanticVersionBuildMetaData = new SemanticVersionBuildMetaData(1, "master", "b1a34edbd80e141f7cc046c074f109be7d022074", "b1a34e", DateTimeOffset.Now); + var semanticVersionBuildMetaData = new SemanticVersionBuildMetaData("ef7d0d7e1e700f1c7c9fa01ea6791bb778a5c37c", 1, "master", "b1a34edbd80e141f7cc046c074f109be7d022074", "b1a34e", DateTimeOffset.Now); var sut = new NextVersionCalculator(baseCalculator, new TestMetaDataCalculator(semanticVersionBuildMetaData)); var config = new Config(); var context = new GitVersionContextBuilder().WithConfig(config).Build(); @@ -43,7 +43,7 @@ public void DoesNotIncrementWhenBaseVersionSaysNotTo() public void AppliesBranchPreReleaseTag() { var baseCalculator = new TestBaseVersionCalculator(false, new SemanticVersion(1), new MockCommit()); - var semanticVersionBuildMetaData = new SemanticVersionBuildMetaData(2, "develop", "b1a34edbd80e141f7cc046c074f109be7d022074", "b1a34e", DateTimeOffset.Now); + var semanticVersionBuildMetaData = new SemanticVersionBuildMetaData("ef7d0d7e1e700f1c7c9fa01ea6791bb778a5c37c", 2, "develop", "b1a34edbd80e141f7cc046c074f109be7d022074", "b1a34e", DateTimeOffset.Now); var sut = new NextVersionCalculator(baseCalculator, new TestMetaDataCalculator(semanticVersionBuildMetaData)); var context = new GitVersionContextBuilder() .WithDevelopBranch() diff --git a/src/GitVersionCore.Tests/VersionSourceTests.cs b/src/GitVersionCore.Tests/VersionSourceTests.cs new file mode 100644 index 0000000000..abccc25c93 --- /dev/null +++ b/src/GitVersionCore.Tests/VersionSourceTests.cs @@ -0,0 +1,78 @@ +namespace GitVersionCore.Tests +{ + using GitTools.Testing; + using GitVersion; + using GitVersion.VersionCalculation; + using LibGit2Sharp; + using NUnit.Framework; + using Shouldly; + + [TestFixture] + public class VersionSourceTests : TestBase + { + [Test] + public void VersionSourceSha() + { + var config = new Config().ApplyDefaults(); + + using (var fixture = new EmptyRepositoryFixture()) + { + var initialCommit = fixture.Repository.MakeACommit(); + Commands.Checkout(fixture.Repository, fixture.Repository.CreateBranch("develop")); + _ = fixture.Repository.MakeACommit(); + var featureBranch = fixture.Repository.CreateBranch("feature/foo"); + Commands.Checkout(fixture.Repository, featureBranch); + _ = fixture.Repository.MakeACommit(); + + var context = new GitVersionContext(fixture.Repository, fixture.Repository.Head, config); + var nextVersionCalculator = new NextVersionCalculator(); + var version = nextVersionCalculator.FindVersion(context); + + version.BuildMetaData.VersionSourceSha.ShouldBe(initialCommit.Sha); + version.BuildMetaData.CommitsSinceVersionSource.ShouldBe(2); + } + } + + [Test] + public void VersionSourceShaOneCommit() + { + var config = new Config().ApplyDefaults(); + + using (var fixture = new EmptyRepositoryFixture()) + { + var initialCommit = fixture.Repository.MakeACommit(); + + var context = new GitVersionContext(fixture.Repository, fixture.Repository.Head, config); + var nextVersionCalculator = new NextVersionCalculator(); + var version = nextVersionCalculator.FindVersion(context); + + version.BuildMetaData.VersionSourceSha.ShouldBe(initialCommit.Sha); + version.BuildMetaData.CommitsSinceVersionSource.ShouldBe(0); + } + } + + [Test] + public void VersionSourceShaUsingTag() + { + var config = new Config().ApplyDefaults(); + + using (var fixture = new EmptyRepositoryFixture()) + { + _ = fixture.Repository.MakeACommit(); + Commands.Checkout(fixture.Repository, fixture.Repository.CreateBranch("develop")); + var secondCommit = fixture.Repository.MakeACommit(); + _ = fixture.Repository.Tags.Add("1.0", secondCommit); + var featureBranch = fixture.Repository.CreateBranch("feature/foo"); + Commands.Checkout(fixture.Repository, featureBranch); + _ = fixture.Repository.MakeACommit(); + + var context = new GitVersionContext(fixture.Repository, fixture.Repository.Head, config); + var nextVersionCalculator = new NextVersionCalculator(); + var version = nextVersionCalculator.FindVersion(context); + + version.BuildMetaData.VersionSourceSha.ShouldBe(secondCommit.Sha); + version.BuildMetaData.CommitsSinceVersionSource.ShouldBe(1); + } + } + } +} diff --git a/src/GitVersionCore.Tests/WixFileTests.cs b/src/GitVersionCore.Tests/WixFileTests.cs index 6140d15bc4..8a48a060b6 100644 --- a/src/GitVersionCore.Tests/WixFileTests.cs +++ b/src/GitVersionCore.Tests/WixFileTests.cs @@ -32,6 +32,7 @@ public void UpdateWixVersionFile() BuildMetaData = "5.Branch.develop" }; + semVer.BuildMetaData.VersionSourceSha = "versionSourceSha"; semVer.BuildMetaData.Sha = "commitSha"; semVer.BuildMetaData.ShortSha = "commitShortSha"; semVer.BuildMetaData.CommitDate = DateTimeOffset.Parse("2019-02-20 23:59:59Z"); @@ -46,7 +47,7 @@ public void UpdateWixVersionFile() { wixVersionFileUpdater.Update(); } - + fileSystem.ReadAllText(WixVersionFileUpdater.GetWixVersionFileName()). ShouldMatchApproved(c => c.SubFolder(Path.Combine("Approved"))); } diff --git a/src/GitVersionCore/BuildServers/MyGet.cs b/src/GitVersionCore/BuildServers/MyGet.cs index fe7a6b9453..e6a68d0866 100644 --- a/src/GitVersionCore/BuildServers/MyGet.cs +++ b/src/GitVersionCore/BuildServers/MyGet.cs @@ -10,7 +10,7 @@ public override bool CanApplyToCurrentContext() var buildRunner = Environment.GetEnvironmentVariable("BuildRunner"); return !string.IsNullOrEmpty(buildRunner) - && buildRunner.Equals("MyGet", StringComparerUtils.IngoreCaseComparison); + && buildRunner.Equals("MyGet", StringComparerUtils.IgnoreCaseComparison); } public override string[] GenerateSetParameterMessage(string name, string value) @@ -20,7 +20,7 @@ public override string[] GenerateSetParameterMessage(string name, string value) string.Format("##myget[setParameter name='GitVersion.{0}' value='{1}']", name, ServiceMessageEscapeHelper.EscapeValue(value)) }; - if (string.Equals(name, "LegacySemVerPadded", StringComparerUtils.IngoreCaseComparison)) + if (string.Equals(name, "LegacySemVerPadded", StringComparerUtils.IgnoreCaseComparison)) { messages.Add(string.Format("##myget[buildNumber '{0}']", ServiceMessageEscapeHelper.EscapeValue(value))); } diff --git a/src/GitVersionCore/GitPreparer.cs b/src/GitVersionCore/GitPreparer.cs index 4e17ed644e..be02be7773 100644 --- a/src/GitVersionCore/GitPreparer.cs +++ b/src/GitVersionCore/GitPreparer.cs @@ -78,14 +78,14 @@ private void CleanupDuplicateOrigin() var repo = new Repository(GetDotGitDirectory()); // check that we have a remote that matches defaultRemoteName if not take the first remote - if (!repo.Network.Remotes.Any(remote => remote.Name.Equals(defaultRemoteName, StringComparerUtils.IngoreCaseComparison))) + if (!repo.Network.Remotes.Any(remote => remote.Name.Equals(defaultRemoteName, StringComparerUtils.IgnoreCaseComparison))) { remoteToKeep = repo.Network.Remotes.First().Name; } var duplicateRepos = repo.Network .Remotes - .Where(remote => !remote.Name.Equals(remoteToKeep, StringComparerUtils.IngoreCaseComparison)) + .Where(remote => !remote.Name.Equals(remoteToKeep, StringComparerUtils.IgnoreCaseComparison)) .Select(remote => remote.Name); // remove all remotes that are considered duplicates diff --git a/src/GitVersionCore/Helpers/FileSystem.cs b/src/GitVersionCore/Helpers/FileSystem.cs index 551ba0c0f8..0e7a2e8410 100644 --- a/src/GitVersionCore/Helpers/FileSystem.cs +++ b/src/GitVersionCore/Helpers/FileSystem.cs @@ -87,7 +87,7 @@ public bool PathsEqual(string path, string otherPath) { var comparison = runningOnMono ? StringComparerUtils.CaseSensitiveComparison - : StringComparerUtils.IngoreCaseComparison; + : StringComparerUtils.IgnoreCaseComparison; return string.Equals( Path.GetFullPath(path).TrimEnd('\\').TrimEnd('/'), diff --git a/src/GitVersionCore/OutputVariables/VariableProvider.cs b/src/GitVersionCore/OutputVariables/VariableProvider.cs index ac19373912..6025d308e3 100644 --- a/src/GitVersionCore/OutputVariables/VariableProvider.cs +++ b/src/GitVersionCore/OutputVariables/VariableProvider.cs @@ -79,6 +79,7 @@ public static VersionVariables GetVariablesFor(SemanticVersion semanticVersion, semverFormatValues.NuGetVersionV2, semverFormatValues.NuGetPreReleaseTag, semverFormatValues.NuGetPreReleaseTagV2, + semverFormatValues.VersionSourceSha, semverFormatValues.CommitsSinceVersionSource, semverFormatValues.CommitsSinceVersionSourcePadded); diff --git a/src/GitVersionCore/OutputVariables/VersionVariables.cs b/src/GitVersionCore/OutputVariables/VersionVariables.cs index 52fa6a7c5f..d00eb2920c 100644 --- a/src/GitVersionCore/OutputVariables/VersionVariables.cs +++ b/src/GitVersionCore/OutputVariables/VersionVariables.cs @@ -39,6 +39,7 @@ public VersionVariables(string major, string nugetVersionV2, string nugetPreReleaseTag, string nugetPreReleaseTagV2, + string versionSourceSha, string commitsSinceVersionSource, string commitsSinceVersionSourcePadded) { @@ -69,6 +70,7 @@ public VersionVariables(string major, NuGetVersionV2 = nugetVersionV2; NuGetPreReleaseTag = nugetPreReleaseTag; NuGetPreReleaseTagV2 = nugetPreReleaseTagV2; + VersionSourceSha = versionSourceSha; CommitsSinceVersionSource = commitsSinceVersionSource; CommitsSinceVersionSourcePadded = commitsSinceVersionSourcePadded; } @@ -99,6 +101,7 @@ public VersionVariables(string major, public string NuGetVersion { get; private set; } public string NuGetPreReleaseTagV2 { get; private set; } public string NuGetPreReleaseTag { get; private set; } + public string VersionSourceSha { get; private set; } public string CommitsSinceVersionSource { get; private set; } public string CommitsSinceVersionSourcePadded { get; private set; } diff --git a/src/GitVersionCore/SemanticVersionBuildMetaData.cs b/src/GitVersionCore/SemanticVersionBuildMetaData.cs index 58f1ef4a5f..ee5b3f96f9 100644 --- a/src/GitVersionCore/SemanticVersionBuildMetaData.cs +++ b/src/GitVersionCore/SemanticVersionBuildMetaData.cs @@ -18,13 +18,14 @@ public class SemanticVersionBuildMetaData : IFormattable, IEquatable new + .Select(v => new Versions { IncrementedVersion = MaybeIncrement(context, v), Version = v }) .ToList(); + FixTheBaseVersionSourceOfMergeMessageStrategyIfReleaseBranchWasMergedAndDeleted + (context, baseVersions); var maxVersion = baseVersions.Aggregate((v1, v2) => v1.IncrementedVersion > v2.IncrementedVersion ? v1 : v2); var matchingVersionsOnceIncremented = baseVersions .Where(b => b.Version.BaseVersionSource != null && b.IncrementedVersion == maxVersion.IncrementedVersion) @@ -92,5 +96,46 @@ public static SemanticVersion MaybeIncrement(GitVersionContext context, BaseVers return version.SemanticVersion; } + + private void FixTheBaseVersionSourceOfMergeMessageStrategyIfReleaseBranchWasMergedAndDeleted( + GitVersionContext context, List baseVersions) + { + if (!ReleaseBranchExistsInRepo(context)) + { + foreach (var baseVersion in baseVersions) + { + if (baseVersion.Version.Source.Contains( + MergeMessageBaseVersionStrategy.MergeMessageStrategyPrefix) + && baseVersion.Version.Source.Contains("Merge branch") + && baseVersion.Version.Source.Contains("release")) + { + var parents = baseVersion.Version.BaseVersionSource.Parents.ToList(); + baseVersion.Version = new BaseVersion( + context, + baseVersion.Version.Source, + baseVersion.Version.ShouldIncrement, + baseVersion.Version.SemanticVersion, + context.Repository.ObjectDatabase.FindMergeBase(parents[0], parents[1]), + baseVersion.Version.BranchNameOverride); + } + } + } + } + + private bool ReleaseBranchExistsInRepo(GitVersionContext context) + { + var releaseBranchConfig = context.FullConfiguration.Branches + .Where(b => b.Value.IsReleaseBranch == true) + .ToList(); + var releaseBranches = context.Repository.Branches + .Where(b => releaseBranchConfig.Any(c => Regex.IsMatch(b.FriendlyName, c.Value.Regex))); + return releaseBranches.Any(); + } + + private class Versions + { + public SemanticVersion IncrementedVersion { get; set; } + public BaseVersion Version { get; set; } + } } -} \ No newline at end of file +} diff --git a/src/GitVersionCore/VersionCalculation/BaseVersionCalculators/MergeMessageBaseVersionStrategy.cs b/src/GitVersionCore/VersionCalculation/BaseVersionCalculators/MergeMessageBaseVersionStrategy.cs index dae854251b..3b2d4f228f 100644 --- a/src/GitVersionCore/VersionCalculation/BaseVersionCalculators/MergeMessageBaseVersionStrategy.cs +++ b/src/GitVersionCore/VersionCalculation/BaseVersionCalculators/MergeMessageBaseVersionStrategy.cs @@ -26,7 +26,7 @@ public override IEnumerable GetVersions(GitVersionContext context) var shouldIncrement = !context.Configuration.PreventIncrementForMergedBranchVersion; return new[] { - new BaseVersion(context, $"Merge message '{c.Message.Trim()}'", shouldIncrement, mergeMessage.Version, c, null) + new BaseVersion(context, $"{MergeMessageStrategyPrefix} '{c.Message.Trim()}'", shouldIncrement, mergeMessage.Version, c, null) }; } return Enumerable.Empty(); @@ -34,6 +34,8 @@ public override IEnumerable GetVersions(GitVersionContext context) return baseVersions; } + public static readonly string MergeMessageStrategyPrefix = "Merge message"; + static bool TryParse(Commit mergeCommit, GitVersionContext context, out MergeMessage mergeMessage) { mergeMessage = Inner(mergeCommit, context); diff --git a/src/GitVersionCore/VersionCalculation/DevelopVersionStrategy.cs b/src/GitVersionCore/VersionCalculation/DevelopVersionStrategy.cs index 57ee1edf56..ce89c30f0b 100644 --- a/src/GitVersionCore/VersionCalculation/DevelopVersionStrategy.cs +++ b/src/GitVersionCore/VersionCalculation/DevelopVersionStrategy.cs @@ -80,7 +80,6 @@ private IEnumerable ReleaseBranchBaseVersions(GitVersionContext con IEnumerable GetReleaseVersion(GitVersionContext context, Branch releaseBranch) { var tagPrefixRegex = context.Configuration.GitTagPrefix; - var repository = context.Repository; // Find the commit where the child branch was created. var baseSource = context.RepositoryMetadataProvider.FindMergeBase(releaseBranch, context.CurrentBranch); diff --git a/src/GitVersionCore/VersionCalculation/MetaDataCalculator.cs b/src/GitVersionCore/VersionCalculation/MetaDataCalculator.cs index 7e112a30ea..6610234732 100644 --- a/src/GitVersionCore/VersionCalculation/MetaDataCalculator.cs +++ b/src/GitVersionCore/VersionCalculation/MetaDataCalculator.cs @@ -1,4 +1,4 @@ -namespace GitVersion.VersionCalculation +namespace GitVersion.VersionCalculation { using System.Linq; using LibGit2Sharp; @@ -16,10 +16,11 @@ public SemanticVersionBuildMetaData Create(Commit baseVersionSource, GitVersionC var commitLog = context.Repository.Commits.QueryBy(qf); var commitsSinceTag = commitLog.Count(); - Logger.WriteInfo(string.Format("{0} commits found between {1} and {2}", commitsSinceTag, baseVersionSource.Sha, context.CurrentCommit.Sha)); + Logger.WriteInfo($"{commitsSinceTag} commits found between {baseVersionSource.Sha} and {context.CurrentCommit.Sha}"); var shortSha = context.Repository.ObjectDatabase.ShortenObjectId(context.CurrentCommit); return new SemanticVersionBuildMetaData( + baseVersionSource.Sha, commitsSinceTag, context.CurrentBranch.FriendlyName, context.CurrentCommit.Sha, @@ -27,4 +28,4 @@ public SemanticVersionBuildMetaData Create(Commit baseVersionSource, GitVersionC context.CurrentCommit.When()); } } -} \ No newline at end of file +} diff --git a/src/GitVersionTask/GetVersion.cs b/src/GitVersionTask/GetVersion.cs index 31e4d6211b..f041a77120 100644 --- a/src/GitVersionTask/GetVersion.cs +++ b/src/GitVersionTask/GetVersion.cs @@ -101,6 +101,9 @@ public GetVersion() [Output] public string CommitDate { get; set; } + [Output] + public string VersionSourceSha { get; set; } + [Output] public string CommitsSinceVersionSource { get; set; }