diff --git a/GitVersionCore.Tests/Fixtures/EmptyRepositoryFixture.cs b/GitVersionCore.Tests/Fixtures/EmptyRepositoryFixture.cs
index 8726144b78..f57a38f3c7 100644
--- a/GitVersionCore.Tests/Fixtures/EmptyRepositoryFixture.cs
+++ b/GitVersionCore.Tests/Fixtures/EmptyRepositoryFixture.cs
@@ -1,4 +1,4 @@
-using System;
+using System.Diagnostics;
using System.Text;
using GitVersion;
using GitVersion.Helpers;
@@ -23,13 +23,13 @@ public void DumpGraph()
@"log --graph --abbrev-commit --decorate --date=relative --all",
RepositoryPath);
- Console.Write(output.ToString());
+ Trace.Write(output.ToString());
}
static IRepository CreateNewRepository(string path)
{
LibGit2Sharp.Repository.Init(path);
- Console.WriteLine("Created git repository at '{0}'", path);
+ Trace.WriteLine("Created git repository at '{0}'", path);
return new Repository(path);
}
diff --git a/GitVersionCore.Tests/GitVersionContextTests.cs b/GitVersionCore.Tests/GitVersionContextTests.cs
index 1b31db2850..3247cf506c 100644
--- a/GitVersionCore.Tests/GitVersionContextTests.cs
+++ b/GitVersionCore.Tests/GitVersionContextTests.cs
@@ -48,7 +48,6 @@ public void UsesBranchSpecificConfigOverTopLevelDefaults()
}
};
var context = new GitVersionContext(mockRepository, develop, config);
- context.Configuration.VersioningMode.ShouldBe(VersioningMode.ContinuousDeployment);
context.Configuration.Tag.ShouldBe("alpha");
}
diff --git a/GitVersionCore.Tests/GitVersionCore.Tests.csproj b/GitVersionCore.Tests/GitVersionCore.Tests.csproj
index db34a9827e..b76eadfead 100644
--- a/GitVersionCore.Tests/GitVersionCore.Tests.csproj
+++ b/GitVersionCore.Tests/GitVersionCore.Tests.csproj
@@ -81,20 +81,17 @@
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
-
@@ -113,7 +110,7 @@
-
+
diff --git a/GitVersionCore.Tests/IntegrationTests/GitFlow/DevelopScenarios.cs b/GitVersionCore.Tests/IntegrationTests/DevelopScenarios.cs
similarity index 90%
rename from GitVersionCore.Tests/IntegrationTests/GitFlow/DevelopScenarios.cs
rename to GitVersionCore.Tests/IntegrationTests/DevelopScenarios.cs
index b86c33d6cc..e865ca613d 100644
--- a/GitVersionCore.Tests/IntegrationTests/GitFlow/DevelopScenarios.cs
+++ b/GitVersionCore.Tests/IntegrationTests/DevelopScenarios.cs
@@ -57,7 +57,7 @@ public void WhenDevelopBranchedFromMaster_MinorIsIncreased()
}
[Test]
- public void MergingReleaseBranchBackIntoDevelopWithoutMergingToMaster_DoesNotBumpDevelopVersion()
+ public void MergingReleaseBranchBackIntoDevelopWithMergingToMaster_DoesBumpDevelopVersion()
{
using (var fixture = new EmptyRepositoryFixture(new Config()))
{
@@ -65,11 +65,13 @@ public void MergingReleaseBranchBackIntoDevelopWithoutMergingToMaster_DoesNotBum
fixture.Repository.CreateBranch("develop").Checkout();
fixture.Repository.MakeACommit();
fixture.Repository.CreateBranch("release-2.0.0").Checkout();
- fixture.AssertFullSemver("2.0.0-beta.1+0");
+ fixture.Repository.MakeACommit();
+ fixture.Repository.Checkout("master");
+ fixture.Repository.MergeNoFF("release-2.0.0", Constants.SignatureNow());
+
fixture.Repository.Checkout("develop");
- fixture.AssertFullSemver("1.1.0-unstable.1+1");
fixture.Repository.MergeNoFF("release-2.0.0", Constants.SignatureNow());
- fixture.AssertFullSemver("1.1.0-unstable.1+1");
+ fixture.AssertFullSemver("2.1.0-unstable.1+0");
}
}
diff --git a/GitVersionCore.Tests/IntegrationTests/GitHubFlow/GitHubFlowFeatureBranchTests.cs b/GitVersionCore.Tests/IntegrationTests/FeatureBranchTests.cs
similarity index 60%
rename from GitVersionCore.Tests/IntegrationTests/GitHubFlow/GitHubFlowFeatureBranchTests.cs
rename to GitVersionCore.Tests/IntegrationTests/FeatureBranchTests.cs
index 953ab54f59..ef4bf5d0f9 100644
--- a/GitVersionCore.Tests/IntegrationTests/GitHubFlow/GitHubFlowFeatureBranchTests.cs
+++ b/GitVersionCore.Tests/IntegrationTests/FeatureBranchTests.cs
@@ -3,10 +3,26 @@
using NUnit.Framework;
[TestFixture]
-public class GitHubFlowFeatureBranchTests
+public class FeatureBranchTests
{
[Test]
- public void ShouldNotUseNumberInFeatureBranchAsPreReleaseNumber()
+ public void ShouldNotUseNumberInFeatureBranchAsPreReleaseNumberOffDevelop()
+ {
+ using (var fixture = new EmptyRepositoryFixture(new Config()))
+ {
+ fixture.Repository.MakeATaggedCommit("1.0.0");
+ fixture.Repository.CreateBranch("develop");
+ fixture.Repository.Checkout("develop");
+ fixture.Repository.CreateBranch("feature/JIRA-123");
+ fixture.Repository.Checkout("feature/JIRA-123");
+ fixture.Repository.MakeCommits(5);
+
+ fixture.AssertFullSemver("1.1.0-JIRA-123.1+5");
+ }
+ }
+
+ [Test]
+ public void ShouldNotUseNumberInFeatureBranchAsPreReleaseNumberOffMaster()
{
using (var fixture = new EmptyRepositoryFixture(new Config()))
{
diff --git a/GitVersionCore.Tests/IntegrationTests/GitFlow/GitFlowFeatureBranchTests.cs b/GitVersionCore.Tests/IntegrationTests/GitFlow/GitFlowFeatureBranchTests.cs
deleted file mode 100644
index ac13fa8d9a..0000000000
--- a/GitVersionCore.Tests/IntegrationTests/GitFlow/GitFlowFeatureBranchTests.cs
+++ /dev/null
@@ -1,23 +0,0 @@
-using GitVersion;
-using LibGit2Sharp;
-using NUnit.Framework;
-
-[TestFixture]
-public class GitFlowFeatureBranchTests
-{
- [Test]
- public void ShouldNotUseNumberInFeatureBranchAsPreReleaseNumber()
- {
- using (var fixture = new EmptyRepositoryFixture(new Config()))
- {
- fixture.Repository.MakeATaggedCommit("1.0.0");
- fixture.Repository.CreateBranch("develop");
- fixture.Repository.Checkout("develop");
- fixture.Repository.CreateBranch("feature/JIRA-123");
- fixture.Repository.Checkout("feature/JIRA-123");
- fixture.Repository.MakeCommits(5);
-
- fixture.AssertFullSemver("1.1.0-JIRA-123.1+5");
- }
- }
-}
\ No newline at end of file
diff --git a/GitVersionCore.Tests/IntegrationTests/GitFlow/GitFlowSupportBranchScenarios.cs b/GitVersionCore.Tests/IntegrationTests/GitFlow/GitFlowSupportBranchScenarios.cs
deleted file mode 100644
index 4d7878e681..0000000000
--- a/GitVersionCore.Tests/IntegrationTests/GitFlow/GitFlowSupportBranchScenarios.cs
+++ /dev/null
@@ -1,49 +0,0 @@
-using LibGit2Sharp;
-using NUnit.Framework;
-
-[TestFixture]
-public class GitFlowSupportBranchScenarios
-{
- [Test]
- public void SupportIsCalculatedCorrectly()
- {
- using (var fixture = new BaseGitFlowRepositoryFixture("1.1.0"))
- {
- // Create 2.0.0 release
- fixture.Repository.CreateBranch("release-2.0.0").Checkout();
- fixture.Repository.MakeCommits(2);
-
- // Merge into develop and master
- fixture.Repository.Checkout("master");
- fixture.Repository.MergeNoFF("release-2.0.0");
- fixture.Repository.ApplyTag("2.0.0");
- fixture.Repository.Checkout("develop");
- fixture.Repository.MergeNoFF("release-2.0.0");
- fixture.AssertFullSemver("2.1.0-unstable.1+1");
-
- // Now lets support 1.x release
- fixture.Repository.Checkout("1.1.0");
- fixture.Repository.CreateBranch("support/1.0.0").Checkout();
- fixture.AssertFullSemver("1.1.0");
-
- // Create release branch from support branch
- fixture.Repository.CreateBranch("release/1.2.0").Checkout();
- fixture.Repository.MakeACommit();
- fixture.AssertFullSemver("1.2.0-beta.1+1");
-
- // Create 1.2.0 release
- fixture.Repository.Checkout("support/1.0.0");
- fixture.Repository.MergeNoFF("release/1.2.0");
- fixture.AssertFullSemver("1.2.0");
- fixture.Repository.ApplyTag("1.2.0");
-
- // Create 1.2.1 hotfix
- fixture.Repository.CreateBranch("hotfix/1.2.1").Checkout();
- fixture.Repository.MakeACommit();
- fixture.AssertFullSemver("1.2.1-beta.1+3"); // TODO This should be +1
- fixture.Repository.Checkout("support/1.0.0");
- fixture.Repository.MergeNoFF("hotfix/1.2.1");
- fixture.AssertFullSemver("1.2.1");
- }
- }
-}
\ No newline at end of file
diff --git a/GitVersionCore.Tests/IntegrationTests/GitHubFlow/ReleaseBranchTests.cs b/GitVersionCore.Tests/IntegrationTests/GitHubFlow/ReleaseBranchTests.cs
deleted file mode 100644
index 4626bca28d..0000000000
--- a/GitVersionCore.Tests/IntegrationTests/GitHubFlow/ReleaseBranchTests.cs
+++ /dev/null
@@ -1,117 +0,0 @@
-using GitVersion;
-using LibGit2Sharp;
-using NUnit.Framework;
-
-[TestFixture]
-public class ReleaseBranchTests
-{
- [Test]
- public void CanTakeVersionFromReleaseBranch()
- {
- using (var fixture = new EmptyRepositoryFixture(new Config()))
- {
- fixture.Repository.MakeATaggedCommit("1.0.3");
- fixture.Repository.MakeCommits(5);
- fixture.Repository.CreateBranch("release-2.0.0");
- fixture.Repository.Checkout("release-2.0.0");
-
- fixture.AssertFullSemver("2.0.0-beta.1+0");
- fixture.Repository.MakeCommits(2);
- fixture.AssertFullSemver("2.0.0-beta.1+2");
- }
- }
-
- [Test]
- public void CanTakeVersionFromReleaseBranchWithTagOverriden()
- {
- var config = new Config();
- config.Branches["release[/-]"].Tag = "rc";
- using (var fixture = new EmptyRepositoryFixture(config))
- {
- fixture.Repository.MakeATaggedCommit("1.0.3");
- fixture.Repository.MakeCommits(5);
- fixture.Repository.CreateBranch("release-2.0.0");
- fixture.Repository.Checkout("release-2.0.0");
-
- fixture.AssertFullSemver("2.0.0-rc.1+0");
- fixture.Repository.MakeCommits(2);
- fixture.AssertFullSemver("2.0.0-rc.1+2");
- }
- }
-
- [Test]
- public void WhenReleaseBranchIsMergedIntoMasterVersionIsTakenWithIt()
- {
- using (var fixture = new EmptyRepositoryFixture(new Config()))
- {
- fixture.Repository.MakeATaggedCommit("1.0.3");
- fixture.Repository.MakeCommits(1);
- fixture.Repository.CreateBranch("release-2.0.0");
- fixture.Repository.Checkout("release-2.0.0");
- fixture.Repository.MakeCommits(4);
- fixture.Repository.Checkout("master");
- fixture.Repository.MergeNoFF("release-2.0.0", Constants.SignatureNow());
-
- fixture.AssertFullSemver("2.0.0+0");
- }
- }
- [Test]
- public void WhenReleaseBranchIsMergedIntoMasterHighestVersionIsTakenWithIt()
- {
- using (var fixture = new EmptyRepositoryFixture(new Config()))
- {
- fixture.Repository.MakeATaggedCommit("1.0.3");
- fixture.Repository.MakeCommits(1);
-
- fixture.Repository.CreateBranch("release-2.0.0");
- fixture.Repository.Checkout("release-2.0.0");
- fixture.Repository.MakeCommits(4);
- fixture.Repository.Checkout("master");
- fixture.Repository.MergeNoFF("release-2.0.0", Constants.SignatureNow());
-
- fixture.Repository.CreateBranch("release-1.0.0");
- fixture.Repository.Checkout("release-1.0.0");
- fixture.Repository.MakeCommits(4);
- fixture.Repository.Checkout("master");
- fixture.Repository.MergeNoFF("release-1.0.0", Constants.SignatureNow());
-
- fixture.AssertFullSemver("2.0.0+5");
- }
- }
-
- [Test]
- public void WhenMergingReleaseBackToDevShouldNotResetBetaVersion()
- {
- using (var fixture = new EmptyRepositoryFixture(new Config()))
- {
- const string TaggedVersion = "1.0.3";
- fixture.Repository.MakeATaggedCommit(TaggedVersion);
- fixture.Repository.CreateBranch("develop");
- fixture.Repository.Checkout("develop");
-
- fixture.Repository.MakeCommits(1);
-
- fixture.Repository.CreateBranch("release-2.0.0");
- fixture.Repository.Checkout("release-2.0.0");
- fixture.Repository.MakeCommits(1);
-
- fixture.AssertFullSemver("2.0.0-beta.1+1");
-
- //tag it to bump to beta 2
- fixture.Repository.ApplyTag("2.0.0-beta1");
-
- fixture.Repository.MakeCommits(1);
-
- fixture.AssertFullSemver("2.0.0-beta.2+0");
-
- //merge down to develop
- fixture.Repository.Checkout("develop");
- fixture.Repository.MergeNoFF("release-2.0.0", Constants.SignatureNow());
-
- //but keep working on the release
- fixture.Repository.Checkout("release-2.0.0");
-
- fixture.AssertFullSemver("2.0.0-beta.2+0");
- }
- }
-}
\ No newline at end of file
diff --git a/GitVersionCore.Tests/IntegrationTests/GitHubFlow/MasterTests.cs b/GitVersionCore.Tests/IntegrationTests/MasterTests.cs
similarity index 98%
rename from GitVersionCore.Tests/IntegrationTests/GitHubFlow/MasterTests.cs
rename to GitVersionCore.Tests/IntegrationTests/MasterTests.cs
index 994e515cbb..f7d25c5058 100644
--- a/GitVersionCore.Tests/IntegrationTests/GitHubFlow/MasterTests.cs
+++ b/GitVersionCore.Tests/IntegrationTests/MasterTests.cs
@@ -56,7 +56,7 @@ public void GivenARepositoryWithTagAndNextVersionInConfig_VersionShouldMatchVers
[Test]
public void GivenARepositoryWithTagAndANextVersionTxtFileAndNoCommits_VersionShouldBeTag()
{
- const string ExpectedNextVersion = "1.1.0";
+ const string ExpectedNextVersion = "1.1.0";
using (var fixture = new EmptyRepositoryFixture(new Config { NextVersion = ExpectedNextVersion }))
{
const string TaggedVersion = "1.0.3";
diff --git a/GitVersionCore.Tests/IntegrationTests/GitFlow/MetaDataByCommitScenarios.cs b/GitVersionCore.Tests/IntegrationTests/MetaDataByCommitScenarios.cs
similarity index 100%
rename from GitVersionCore.Tests/IntegrationTests/GitFlow/MetaDataByCommitScenarios.cs
rename to GitVersionCore.Tests/IntegrationTests/MetaDataByCommitScenarios.cs
diff --git a/GitVersionCore.Tests/IntegrationTests/GitHubFlow/OtherBranchTests.cs b/GitVersionCore.Tests/IntegrationTests/OtherBranchTests.cs
similarity index 90%
rename from GitVersionCore.Tests/IntegrationTests/GitHubFlow/OtherBranchTests.cs
rename to GitVersionCore.Tests/IntegrationTests/OtherBranchTests.cs
index 11b3893fea..1e3a545c29 100644
--- a/GitVersionCore.Tests/IntegrationTests/GitHubFlow/OtherBranchTests.cs
+++ b/GitVersionCore.Tests/IntegrationTests/OtherBranchTests.cs
@@ -16,7 +16,7 @@ public void CanTakeVersionFromReleaseBranch()
fixture.Repository.CreateBranch("alpha-2.0.0");
fixture.Repository.Checkout("alpha-2.0.0");
- fixture.AssertFullSemver("2.0.0-alpha.1+5");
+ fixture.AssertFullSemver("2.0.0-alpha.1+0");
}
}
}
\ No newline at end of file
diff --git a/GitVersionCore.Tests/IntegrationTests/GitFlow/PatchScenarios.cs b/GitVersionCore.Tests/IntegrationTests/PatchScenarios.cs
similarity index 74%
rename from GitVersionCore.Tests/IntegrationTests/GitFlow/PatchScenarios.cs
rename to GitVersionCore.Tests/IntegrationTests/PatchScenarios.cs
index cf6189d8c1..ab9c7219c2 100644
--- a/GitVersionCore.Tests/IntegrationTests/GitFlow/PatchScenarios.cs
+++ b/GitVersionCore.Tests/IntegrationTests/PatchScenarios.cs
@@ -17,26 +17,26 @@ public void PatchLatestReleaseExample()
fixture.Repository.MakeACommit();
fixture.AssertFullSemver("1.2.1-beta.1+1");
fixture.Repository.ApplyTag("1.2.1-beta.1");
- fixture.AssertFullSemver("1.2.1-beta.1+0");
+ fixture.AssertFullSemver("1.2.1-beta.1+1");
fixture.Repository.MakeACommit();
- fixture.AssertFullSemver("1.2.1-beta.2+1");
+ fixture.AssertFullSemver("1.2.1-beta.2+2");
// Merge hotfix branch to master
fixture.Repository.Checkout("master");
fixture.Repository.MergeNoFF("hotfix-1.2.1", Constants.SignatureNow());
- fixture.AssertFullSemver("1.2.1");
+ fixture.AssertFullSemver("1.2.1+0");
fixture.Repository.ApplyTag("1.2.1");
- fixture.AssertFullSemver("1.2.1");
+ fixture.AssertFullSemver("1.2.1+0");
// Verify develop version
fixture.Repository.Checkout("develop");
- fixture.AssertFullSemver("1.3.0-unstable.0+0");
+ fixture.AssertFullSemver("1.3.0-unstable.1+1");
fixture.Repository.MergeNoFF("hotfix-1.2.1", Constants.SignatureNow());
- fixture.AssertFullSemver("1.3.0-unstable.1+1");
+ fixture.AssertFullSemver("1.3.0-unstable.1+0");
}
}
@@ -50,22 +50,23 @@ public void PatchOlderReleaseExample()
r.MakeATaggedCommit("1.2.0");
}))
{
+ var targetCommit = ((Commit) fixture.Repository.Tags.Single(t => t.Name == "1.1.0").Target);
// create hotfix branch
- fixture.Repository.CreateBranch("hotfix-1.1.1", (Commit) fixture.Repository.Tags.Single(t => t.Name == "1.1.0").Target).Checkout();
+ fixture.Repository.CreateBranch("hotfix-1.1.1", targetCommit).Checkout();
fixture.AssertFullSemver("1.1.1-beta.1+0");
fixture.Repository.MakeACommit();
fixture.AssertFullSemver("1.1.1-beta.1+1");
// Merge hotfix branch to support
- fixture.Repository.CreateBranch("support-1.2", (Commit) fixture.Repository.Tags.Single(t => t.Name == "1.1.0").Target).Checkout();
- fixture.AssertFullSemver("1.1.0");
+ fixture.Repository.CreateBranch("support-1.1", (Commit) fixture.Repository.Tags.Single(t => t.Name == "1.1.0").Target).Checkout();
+ fixture.AssertFullSemver("1.1.0+0");
fixture.Repository.MergeNoFF("hotfix-1.1.1", Constants.SignatureNow());
- fixture.AssertFullSemver("1.1.1");
+ fixture.AssertFullSemver("1.1.1+0");
fixture.Repository.ApplyTag("1.1.1");
- fixture.AssertFullSemver("1.1.1");
+ fixture.AssertFullSemver("1.1.1+0");
// Verify develop version
fixture.Repository.Checkout("develop");
diff --git a/GitVersionCore.Tests/IntegrationTests/PullRequestScenarios.cs b/GitVersionCore.Tests/IntegrationTests/PullRequestScenarios.cs
index d6eceedd69..37fb557385 100644
--- a/GitVersionCore.Tests/IntegrationTests/PullRequestScenarios.cs
+++ b/GitVersionCore.Tests/IntegrationTests/PullRequestScenarios.cs
@@ -91,9 +91,8 @@ public void CanCalculatePullRequestChangesInheritingConfigFromRemoteRepo()
fixture.Repository.Checkout("pull/2/merge");
// If we delete the branch, it is effectively the same as remote PR
fixture.Repository.Branches.Remove("feature/Foo");
-
- fixture.DumpGraph();
- fixture.AssertFullSemver("0.2.0-PullRequest.1+3");
+
+ fixture.AssertFullSemver("0.2.0-PullRequest.2+3");
}
}
}
\ No newline at end of file
diff --git a/GitVersionCore.Tests/IntegrationTests/GitFlow/ReleaseBranchTests.cs b/GitVersionCore.Tests/IntegrationTests/ReleaseBranchTests.cs
similarity index 59%
rename from GitVersionCore.Tests/IntegrationTests/GitFlow/ReleaseBranchTests.cs
rename to GitVersionCore.Tests/IntegrationTests/ReleaseBranchTests.cs
index dd7812fa08..58d32c5dde 100644
--- a/GitVersionCore.Tests/IntegrationTests/GitFlow/ReleaseBranchTests.cs
+++ b/GitVersionCore.Tests/IntegrationTests/ReleaseBranchTests.cs
@@ -11,7 +11,6 @@ public void CanTakeVersionFromReleaseBranch()
using (var fixture = new EmptyRepositoryFixture(new Config()))
{
fixture.Repository.MakeATaggedCommit("1.0.3");
- fixture.Repository.CreateBranch("develop");
fixture.Repository.MakeCommits(5);
fixture.Repository.CreateBranch("release-2.0.0");
fixture.Repository.Checkout("release-2.0.0");
@@ -30,7 +29,6 @@ public void CanTakeVersionFromReleaseBranchWithTagOverriden()
using (var fixture = new EmptyRepositoryFixture(config))
{
fixture.Repository.MakeATaggedCommit("1.0.3");
- fixture.Repository.CreateBranch("develop");
fixture.Repository.MakeCommits(5);
fixture.Repository.CreateBranch("release-2.0.0");
fixture.Repository.Checkout("release-2.0.0");
@@ -59,13 +57,14 @@ public void CanHandleReleaseBranchWithStability()
}
[Test]
- public void WhenReleaseBranchIsMergedIntoMasterVersionIsTakenWithIt()
+ public void WhenReleaseBranch_OffDevelop_IsMergedIntoMasterAndDevelop_VersionIsTakenWithIt()
{
using (var fixture = new EmptyRepositoryFixture(new Config()))
{
fixture.Repository.MakeATaggedCommit("1.0.3");
fixture.Repository.CreateBranch("develop");
fixture.Repository.MakeCommits(1);
+
fixture.Repository.CreateBranch("release-2.0.0");
fixture.Repository.Checkout("release-2.0.0");
fixture.Repository.MakeCommits(4);
@@ -79,7 +78,24 @@ public void WhenReleaseBranchIsMergedIntoMasterVersionIsTakenWithIt()
}
[Test]
- public void WhenReleaseBranchIsMergedIntoMasterHighestVersionIsTakenWithIt()
+ public void WhenReleaseBranch_OffMaster_IsMergedIntoMaster_VersionIsTakenWithIt()
+ {
+ using (var fixture = new EmptyRepositoryFixture(new Config()))
+ {
+ fixture.Repository.MakeATaggedCommit("1.0.3");
+ fixture.Repository.MakeCommits(1);
+ fixture.Repository.CreateBranch("release-2.0.0");
+ fixture.Repository.Checkout("release-2.0.0");
+ fixture.Repository.MakeCommits(4);
+ fixture.Repository.Checkout("master");
+ fixture.Repository.MergeNoFF("release-2.0.0", Constants.SignatureNow());
+
+ fixture.AssertFullSemver("2.0.0+0");
+ }
+ }
+
+ [Test]
+ public void WhenReleaseBranchIsMergedIntoDevelopHighestVersionIsTakenWithIt()
{
using (var fixture = new EmptyRepositoryFixture(new Config()))
{
@@ -90,9 +106,31 @@ public void WhenReleaseBranchIsMergedIntoMasterHighestVersionIsTakenWithIt()
fixture.Repository.CreateBranch("release-2.0.0");
fixture.Repository.Checkout("release-2.0.0");
fixture.Repository.MakeCommits(4);
- fixture.Repository.Checkout("master");
+ fixture.Repository.Checkout("develop");
fixture.Repository.MergeNoFF("release-2.0.0", Constants.SignatureNow());
+
+ fixture.Repository.CreateBranch("release-1.0.0");
+ fixture.Repository.Checkout("release-1.0.0");
+ fixture.Repository.MakeCommits(4);
fixture.Repository.Checkout("develop");
+ fixture.Repository.MergeNoFF("release-1.0.0", Constants.SignatureNow());
+
+ fixture.AssertFullSemver("2.1.0-unstable.1+5");
+ }
+ }
+
+ [Test]
+ public void WhenReleaseBranchIsMergedIntoMasterHighestVersionIsTakenWithIt()
+ {
+ using (var fixture = new EmptyRepositoryFixture(new Config()))
+ {
+ fixture.Repository.MakeATaggedCommit("1.0.3");
+ fixture.Repository.MakeCommits(1);
+
+ fixture.Repository.CreateBranch("release-2.0.0");
+ fixture.Repository.Checkout("release-2.0.0");
+ fixture.Repository.MakeCommits(4);
+ fixture.Repository.Checkout("master");
fixture.Repository.MergeNoFF("release-2.0.0", Constants.SignatureNow());
fixture.Repository.CreateBranch("release-1.0.0");
@@ -100,10 +138,44 @@ public void WhenReleaseBranchIsMergedIntoMasterHighestVersionIsTakenWithIt()
fixture.Repository.MakeCommits(4);
fixture.Repository.Checkout("master");
fixture.Repository.MergeNoFF("release-1.0.0", Constants.SignatureNow());
+
+ fixture.AssertFullSemver("2.0.0+5");
+ }
+ }
+
+ [Test]
+ public void WhenMergingReleaseBackToDevShouldNotResetBetaVersion()
+ {
+ using (var fixture = new EmptyRepositoryFixture(new Config()))
+ {
+ const string TaggedVersion = "1.0.3";
+ fixture.Repository.MakeATaggedCommit(TaggedVersion);
+ fixture.Repository.CreateBranch("develop");
fixture.Repository.Checkout("develop");
- fixture.Repository.MergeNoFF("release-1.0.0", Constants.SignatureNow());
- fixture.AssertFullSemver("2.0.0-unstable.1+5");
+ fixture.Repository.MakeCommits(1);
+
+ fixture.Repository.CreateBranch("release-2.0.0");
+ fixture.Repository.Checkout("release-2.0.0");
+ fixture.Repository.MakeCommits(1);
+
+ fixture.AssertFullSemver("2.0.0-beta.1+1");
+
+ //tag it to bump to beta 2
+ fixture.Repository.ApplyTag("2.0.0-beta1");
+
+ fixture.Repository.MakeCommits(1);
+
+ fixture.AssertFullSemver("2.0.0-beta.2+2");
+
+ //merge down to develop
+ fixture.Repository.Checkout("develop");
+ fixture.Repository.MergeNoFF("release-2.0.0", Constants.SignatureNow());
+
+ //but keep working on the release
+ fixture.Repository.Checkout("release-2.0.0");
+
+ fixture.AssertFullSemver("2.0.0-beta.2+3");
}
}
}
\ No newline at end of file
diff --git a/GitVersionCore.Tests/IntegrationTests/GitHubFlow/GitHubFlowSupportBranchScenarios.cs b/GitVersionCore.Tests/IntegrationTests/SupportBranchScenarios.cs
similarity index 96%
rename from GitVersionCore.Tests/IntegrationTests/GitHubFlow/GitHubFlowSupportBranchScenarios.cs
rename to GitVersionCore.Tests/IntegrationTests/SupportBranchScenarios.cs
index ee6e4cabd7..af8fab6f65 100644
--- a/GitVersionCore.Tests/IntegrationTests/GitHubFlow/GitHubFlowSupportBranchScenarios.cs
+++ b/GitVersionCore.Tests/IntegrationTests/SupportBranchScenarios.cs
@@ -3,7 +3,7 @@
using NUnit.Framework;
[TestFixture]
-public class GitHubFlowSupportBranchScenarios
+public class SupportBranchScenarios
{
[Test]
public void SupportIsCalculatedCorrectly()
@@ -69,7 +69,7 @@ public void WhenSupportIsBranchedAndTaggedFromAnotherSupportEnsureNewMinorIsUsed
fixture.Repository.MakeACommit();
fixture.Repository.MakeACommit();
- fixture.AssertFullSemver("1.3.1+0");
+ fixture.AssertFullSemver("1.3.0+2");
}
}
}
\ No newline at end of file
diff --git a/GitVersionCore.Tests/IntegrationTests/GitFlow/SwitchingToGitFlowScenarios.cs b/GitVersionCore.Tests/IntegrationTests/SwitchingToGitFlowScenarios.cs
similarity index 100%
rename from GitVersionCore.Tests/IntegrationTests/GitFlow/SwitchingToGitFlowScenarios.cs
rename to GitVersionCore.Tests/IntegrationTests/SwitchingToGitFlowScenarios.cs
diff --git a/GitVersionCore.Tests/IntegrationTests/GitFlow/WikiScenarios.cs b/GitVersionCore.Tests/IntegrationTests/WikiScenarios.cs
similarity index 100%
rename from GitVersionCore.Tests/IntegrationTests/GitFlow/WikiScenarios.cs
rename to GitVersionCore.Tests/IntegrationTests/WikiScenarios.cs
diff --git a/GitVersionCore.Tests/Mocks/MockBranch.cs b/GitVersionCore.Tests/Mocks/MockBranch.cs
index f4a2865d6f..11d08e158b 100644
--- a/GitVersionCore.Tests/Mocks/MockBranch.cs
+++ b/GitVersionCore.Tests/Mocks/MockBranch.cs
@@ -26,6 +26,8 @@ public MockBranch()
public override string Name { get { return name; } }
public override ICommitLog Commits { get { return commits; } }
public override Commit Tip { get { return commits.First(); } }
+ public override bool IsTracking { get { return true; } }
+
public override string CanonicalName
{
get { return canonicalName; }
diff --git a/GitVersionCore.Tests/TestEffectiveConfiguration.cs b/GitVersionCore.Tests/TestEffectiveConfiguration.cs
index e0bb2704a4..a1470e8ac8 100644
--- a/GitVersionCore.Tests/TestEffectiveConfiguration.cs
+++ b/GitVersionCore.Tests/TestEffectiveConfiguration.cs
@@ -10,8 +10,9 @@ public TestEffectiveConfiguration(
string gitTagPrefix = "v",
string tag = "",
string nextVersion = null,
- string branchPrefixToTrim = "") :
- base(assemblyVersioningScheme, versioningMode, gitTagPrefix, tag, nextVersion, IncrementStrategy.Patch, branchPrefixToTrim)
+ string branchPrefixToTrim = "",
+ bool preventIncrementForMergedBranchVersion = false) :
+ base(assemblyVersioningScheme, versioningMode, gitTagPrefix, tag, nextVersion, IncrementStrategy.Patch, branchPrefixToTrim, preventIncrementForMergedBranchVersion)
{
}
}
diff --git a/GitVersionCore.Tests/VersionCalculation/NewNextVersionCalculatorTests.cs b/GitVersionCore.Tests/VersionCalculation/NewNextVersionCalculatorTests.cs
index dc61b7a4e1..8fda45ef48 100644
--- a/GitVersionCore.Tests/VersionCalculation/NewNextVersionCalculatorTests.cs
+++ b/GitVersionCore.Tests/VersionCalculation/NewNextVersionCalculatorTests.cs
@@ -15,15 +15,11 @@ public void ShouldIncrementVersionBasedOnConfig()
var semanticVersionBuildMetaData = new SemanticVersionBuildMetaData(1, "master", "b1a34e", DateTimeOffset.Now);
var sut = new NewNextVersionCalculator(baseCalculator, new TestMetaDataCalculator(semanticVersionBuildMetaData));
var config = new Config();
- config.Branches.Add("master", new BranchConfig
- {
- Increment = IncrementStrategy.Major
- });
var context = new GitVersionContextBuilder().WithConfig(config).Build();
var version = sut.FindVersion(context);
- version.ToString().ShouldBe("2.0.0");
+ version.ToString().ShouldBe("1.0.1");
}
[Test]
@@ -33,10 +29,6 @@ public void DoesNotIncrementWhenBaseVersionSaysNotTo()
var semanticVersionBuildMetaData = new SemanticVersionBuildMetaData(1, "master", "b1a34e", DateTimeOffset.Now);
var sut = new NewNextVersionCalculator(baseCalculator, new TestMetaDataCalculator(semanticVersionBuildMetaData));
var config = new Config();
- config.Branches.Add("master", new BranchConfig
- {
- Increment = IncrementStrategy.Major
- });
var context = new GitVersionContextBuilder().WithConfig(config).Build();
var version = sut.FindVersion(context);
diff --git a/GitVersionCore.Tests/VersionCalculation/Strategies/VersionInBranchBaseVersionStrategyTests.cs b/GitVersionCore.Tests/VersionCalculation/Strategies/VersionInBranchBaseVersionStrategyTests.cs
index 9900c795a5..ea8430d013 100644
--- a/GitVersionCore.Tests/VersionCalculation/Strategies/VersionInBranchBaseVersionStrategyTests.cs
+++ b/GitVersionCore.Tests/VersionCalculation/Strategies/VersionInBranchBaseVersionStrategyTests.cs
@@ -1,6 +1,8 @@
namespace GitVersionCore.Tests.VersionCalculation.Strategies
{
+ using GitVersion;
using GitVersion.VersionCalculation.BaseVersionCalculators;
+ using LibGit2Sharp;
using NUnit.Framework;
using Shouldly;
@@ -16,19 +18,20 @@ public class VersionInBranchBaseVersionStrategyTests
[TestCase("custom/JIRA-123", null)]
public void CanTakeVersionFromBranchName(string branchName, string expectedBaseVersion)
{
- var context = new GitVersionContextBuilder()
- .WithBranch(branchName)
- .AddCommit()
- .Build();
+ var configuration = new Config();
+ using (var fixture = new EmptyRepositoryFixture(configuration))
+ {
+ fixture.Repository.MakeACommit();
+ var branch = fixture.Repository.CreateBranch(branchName);
+ var sut = new VersionInBranchBaseVersionStrategy();
- var sut = new VersionInBranchBaseVersionStrategy();
+ var baseVersion = sut.GetVersion(new GitVersionContext(fixture.Repository, branch, configuration));
- var baseVersion = sut.GetVersion(context);
-
- if (expectedBaseVersion == null)
- baseVersion.ShouldBe(null);
- else
- baseVersion.SemanticVersion.ToString().ShouldBe(expectedBaseVersion);
+ if (expectedBaseVersion == null)
+ baseVersion.ShouldBe(null);
+ else
+ baseVersion.SemanticVersion.ToString().ShouldBe(expectedBaseVersion);
+ }
}
}
}
diff --git a/GitVersionCore/Configuration/BranchConfig.cs b/GitVersionCore/Configuration/BranchConfig.cs
index b24942d096..a5717eb979 100644
--- a/GitVersionCore/Configuration/BranchConfig.cs
+++ b/GitVersionCore/Configuration/BranchConfig.cs
@@ -26,5 +26,8 @@ public BranchConfig(BranchConfig branchConfiguration)
[YamlMember(Alias = "increment")]
public IncrementStrategy? Increment { get; set; }
+
+ [YamlMember(Alias = "preventIncrementOfMergedBranchVersion")]
+ public bool? PreventIncrementOfMergedBranchVersion { get; set; }
}
}
diff --git a/GitVersionCore/Configuration/Config.cs b/GitVersionCore/Configuration/Config.cs
index 6a1767fed0..16db0f0c6f 100644
--- a/GitVersionCore/Configuration/Config.cs
+++ b/GitVersionCore/Configuration/Config.cs
@@ -18,6 +18,7 @@ public Config()
{
Tag = string.Empty,
Increment = IncrementStrategy.Patch,
+ PreventIncrementOfMergedBranchVersion = true
};
Branches["release[/-]"] = new BranchConfig { Tag = "beta" };
Branches["feature[/-]"] = new BranchConfig
@@ -26,6 +27,12 @@ public Config()
Tag = "useBranchName"
};
Branches["hotfix[/-]"] = new BranchConfig { Tag = "beta" };
+ Branches["support[/-]"] = new BranchConfig
+ {
+ Tag = string.Empty,
+ Increment = IncrementStrategy.Patch,
+ PreventIncrementOfMergedBranchVersion = true
+ };
Branches["develop"] = new BranchConfig
{
Tag = "unstable",
diff --git a/GitVersionCore/EffectiveConfiguration.cs b/GitVersionCore/EffectiveConfiguration.cs
index 0c8a66c3ae..b7dd6cd946 100644
--- a/GitVersionCore/EffectiveConfiguration.cs
+++ b/GitVersionCore/EffectiveConfiguration.cs
@@ -5,7 +5,12 @@
///
public class EffectiveConfiguration
{
- public EffectiveConfiguration(AssemblyVersioningScheme assemblyVersioningScheme, VersioningMode versioningMode, string gitTagPrefix, string tag, string nextVersion, IncrementStrategy increment, string branchPrefixToTrim)
+ public EffectiveConfiguration(
+ AssemblyVersioningScheme assemblyVersioningScheme,
+ VersioningMode versioningMode, string gitTagPrefix,
+ string tag, string nextVersion, IncrementStrategy increment,
+ string branchPrefixToTrim,
+ bool preventIncrementForMergedBranchVersion)
{
AssemblyVersioningScheme = assemblyVersioningScheme;
VersioningMode = versioningMode;
@@ -14,6 +19,7 @@ public EffectiveConfiguration(AssemblyVersioningScheme assemblyVersioningScheme,
NextVersion = nextVersion;
Increment = increment;
BranchPrefixToTrim = branchPrefixToTrim;
+ PreventIncrementForMergedBranchVersion = preventIncrementForMergedBranchVersion;
}
public VersioningMode VersioningMode { get; private set; }
@@ -35,5 +41,7 @@ public EffectiveConfiguration(AssemblyVersioningScheme assemblyVersioningScheme,
public IncrementStrategy Increment { get; private set; }
public string BranchPrefixToTrim { get; private set; }
+
+ public bool PreventIncrementForMergedBranchVersion { get; private set; }
}
}
\ No newline at end of file
diff --git a/GitVersionCore/GitVersionContext.cs b/GitVersionCore/GitVersionContext.cs
index 25b6891ece..63831f17a0 100644
--- a/GitVersionCore/GitVersionContext.cs
+++ b/GitVersionCore/GitVersionContext.cs
@@ -11,7 +11,6 @@
///
public class GitVersionContext
{
- readonly bool IsContextForTrackedBranchesOnly;
readonly Config configuration;
public GitVersionContext(IRepository repository, Config configuration, bool isForTrackingBranchOnly = true)
@@ -19,20 +18,21 @@ public GitVersionContext(IRepository repository, Config configuration, bool isFo
{
}
- public GitVersionContext(IRepository repository, Branch currentBranch, Config configuration, bool isForTrackingBranchOnly = true)
+ public GitVersionContext(IRepository repository, Branch currentBranch, Config configuration, bool isForTrackingBranch = true)
{
Repository = repository;
this.configuration = configuration;
- IsContextForTrackedBranchesOnly = isForTrackingBranchOnly;
+ OnlyEvaluateTrackedBranches = isForTrackingBranch;
if (currentBranch == null)
throw new InvalidOperationException("Need a branch to operate on");
CurrentCommit = currentBranch.Tip;
+ IsCurrentCommitTagged = repository.Tags.Any(t => t.Target == CurrentCommit);
- if (repository != null && currentBranch.IsDetachedHead())
+ if (currentBranch.IsDetachedHead())
{
- CurrentBranch = GetBranchesContainingCommit(CurrentCommit.Sha).OnlyOrDefault() ?? currentBranch;
+ CurrentBranch = CurrentCommit.GetBranchesContainingCommit(repository, OnlyEvaluateTrackedBranches).OnlyOrDefault() ?? currentBranch;
}
else
{
@@ -42,42 +42,12 @@ public GitVersionContext(IRepository repository, Branch currentBranch, Config co
CalculateEffectiveConfiguration();
}
+ public bool OnlyEvaluateTrackedBranches { get; private set; }
public EffectiveConfiguration Configuration { get; private set; }
public IRepository Repository { get; private set; }
public Branch CurrentBranch { get; private set; }
public Commit CurrentCommit { get; private set; }
-
- IEnumerable GetBranchesContainingCommit(string commitSha)
- {
- var directBranchHasBeenFound = false;
- foreach (var branch in Repository.Branches)
- {
- if (branch.Tip.Sha != commitSha || (IsContextForTrackedBranchesOnly && !branch.IsTracking))
- {
- continue;
- }
-
- directBranchHasBeenFound = true;
- yield return branch;
- }
-
- if (directBranchHasBeenFound)
- {
- yield break;
- }
-
- foreach (var branch in Repository.Branches)
- {
- var commits = Repository.Commits.QueryBy(new CommitFilter { Since = branch }).Where(c => c.Sha == commitSha);
-
- if (!commits.Any())
- {
- continue;
- }
-
- yield return branch;
- }
- }
+ public bool IsCurrentCommitTagged { get; private set; }
void CalculateEffectiveConfiguration()
{
@@ -89,14 +59,15 @@ void CalculateEffectiveConfiguration()
var tag = currentBranchConfig.Value.Tag ?? "useBranchName";
var nextVersion = configuration.NextVersion;
var incrementStrategy = currentBranchConfig.Value.Increment ?? IncrementStrategy.Patch;
+ var preventIncrementForMergedBranchVersion = currentBranchConfig.Value.PreventIncrementOfMergedBranchVersion ?? false;
var assemblyVersioningScheme = configuration.AssemblyVersioningScheme;
var gitTagPrefix = configuration.TagPrefix;
- Configuration = new EffectiveConfiguration(assemblyVersioningScheme, versioningMode, gitTagPrefix, tag, nextVersion, incrementStrategy, currentBranchConfig.Key);
+ Configuration = new EffectiveConfiguration(assemblyVersioningScheme, versioningMode, gitTagPrefix, tag, nextVersion, incrementStrategy, currentBranchConfig.Key, preventIncrementForMergedBranchVersion);
}
KeyValuePair GetBranchConfiguration(Branch currentBranch)
{
- var matchingBranches = configuration.Branches.Where(b => Regex.IsMatch("^" + currentBranch.Name, b.Key)).ToArray();
+ var matchingBranches = configuration.Branches.Where(b => Regex.IsMatch(currentBranch.Name, "^" + b.Key, RegexOptions.IgnoreCase)).ToArray();
if (matchingBranches.Length == 0)
{
@@ -121,6 +92,7 @@ KeyValuePair GetBranchConfiguration(Branch currentBranch)
KeyValuePair InheritBranchConfiguration(Branch currentBranch, KeyValuePair keyValuePair, BranchConfig branchConfiguration)
{
+ Logger.WriteInfo("Attempting to inherit branch configuration from parent branch");
var excludedBranches = new Branch[0];
// Check if we are a merge commit. If so likely we are a pull request
var parentCount = CurrentCommit.Parents.Count();
@@ -141,9 +113,11 @@ KeyValuePair InheritBranchConfiguration(Branch currentBran
{
currentBranch = Repository.Branches.SingleOrDefault(b => !b.IsRemote && b.Tip == parents[0]) ?? currentBranch;
}
+
+ Logger.WriteInfo("HEAD is merge commit, this is likely a pull request using " + currentBranch.Name + " as base");
}
- var branchPoint = currentBranch.FindCommitBranchWasBranchedFrom(Repository, excludedBranches);
+ var branchPoint = currentBranch.FindCommitBranchWasBranchedFrom(Repository, OnlyEvaluateTrackedBranches, excludedBranches);
List possibleParents;
if (branchPoint.Sha == CurrentCommit.Sha)
@@ -162,6 +136,8 @@ KeyValuePair InheritBranchConfiguration(Branch currentBran
.ToList();
}
+ Logger.WriteInfo("Found possible parent branches: " + string.Join(", ", possibleParents.Select(p => p.Name)));
+
// If it comes down to master and something, master is always first so we pick other branch
if (possibleParents.Count == 2 && possibleParents.Any(p => p.Name == "master"))
{
@@ -178,7 +154,10 @@ KeyValuePair InheritBranchConfiguration(Branch currentBran
});
}
- throw new Exception("Failed to inherit Increment branch configuration");
+ if (possibleParents.Count == 0)
+ throw new Exception("Failed to inherit Increment branch configuration, no branches found");
+
+ throw new Exception("Failed to inherit Increment branch configuration, ended up with: " + string.Join(", ", possibleParents.Select(p => p.Name)));
}
static IEnumerable ListBranchesContaininingCommit(IRepository repo, string commitSha, Branch[] excludedBranches)
diff --git a/GitVersionCore/LibGitExtensions.cs b/GitVersionCore/LibGitExtensions.cs
index ec87573844..ebe289f8e4 100644
--- a/GitVersionCore/LibGitExtensions.cs
+++ b/GitVersionCore/LibGitExtensions.cs
@@ -24,10 +24,44 @@ public static Branch FindBranch(this IRepository repository, string branchName)
return repository.Branches.FirstOrDefault(x => x.Name == "origin/" + branchName);
}
- public static Commit FindCommitBranchWasBranchedFrom(this Branch branch, IRepository repository, params Branch[] excludedBranches)
+ public static Commit FindCommitBranchWasBranchedFrom(this Branch branch, IRepository repository, bool onlyTrackedBranches, params Branch[] excludedBranches)
{
+ var currentBranches = branch.Tip.GetBranchesContainingCommit(repository, onlyTrackedBranches).ToList();
var tips = repository.Branches.Except(excludedBranches).Where(b => b != branch && !b.IsRemote).Select(b => b.Tip).ToList();
- return branch.Commits.FirstOrDefault(c => tips.Contains(c) || c.Parents.Count() > 1) ?? branch.Tip;
+ var branchPoint = branch.Commits.FirstOrDefault(c => tips.Contains(c) || c.GetBranchesContainingCommit(repository, onlyTrackedBranches).Count() > currentBranches.Count);
+ return branchPoint ?? branch.Tip;
+ }
+
+ public static IEnumerable GetBranchesContainingCommit(this Commit commit, IRepository repository, bool onlyTrackedBranches)
+ {
+ var directBranchHasBeenFound = false;
+ foreach (var branch in repository.Branches)
+ {
+ if (branch.Tip.Sha != commit.Sha || (onlyTrackedBranches && !branch.IsTracking))
+ {
+ continue;
+ }
+
+ directBranchHasBeenFound = true;
+ yield return branch;
+ }
+
+ if (directBranchHasBeenFound)
+ {
+ yield break;
+ }
+
+ foreach (var branch in repository.Branches)
+ {
+ var commits = repository.Commits.QueryBy(new CommitFilter { Since = branch }).Where(c => c.Sha == commit.Sha);
+
+ if (!commits.Any())
+ {
+ continue;
+ }
+
+ yield return branch;
+ }
}
public static IEnumerable TagsByDate(this IRepository repository, Commit commit)
diff --git a/GitVersionCore/VersionCalculation/BaseVersionCalculators/ConfigNextVersionBaseVersionStrategy.cs b/GitVersionCore/VersionCalculation/BaseVersionCalculators/ConfigNextVersionBaseVersionStrategy.cs
index d2d971e3e6..8c5c99da2e 100644
--- a/GitVersionCore/VersionCalculation/BaseVersionCalculators/ConfigNextVersionBaseVersionStrategy.cs
+++ b/GitVersionCore/VersionCalculation/BaseVersionCalculators/ConfigNextVersionBaseVersionStrategy.cs
@@ -4,7 +4,7 @@ public class ConfigNextVersionBaseVersionStrategy : BaseVersionStrategy
{
public override BaseVersion GetVersion(GitVersionContext context)
{
- if (string.IsNullOrEmpty(context.Configuration.NextVersion))
+ if (string.IsNullOrEmpty(context.Configuration.NextVersion) || context.IsCurrentCommitTagged)
return null;
var semanticVersion = SemanticVersion.Parse(context.Configuration.NextVersion, context.Configuration.GitTagPrefix);
return new BaseVersion("NextVersion in GitVersionConfig.yaml", false, true, semanticVersion, null, null);
diff --git a/GitVersionCore/VersionCalculation/BaseVersionCalculators/MergeMessageBaseVersionStrategy.cs b/GitVersionCore/VersionCalculation/BaseVersionCalculators/MergeMessageBaseVersionStrategy.cs
index 3cc422f936..39e74e1f87 100644
--- a/GitVersionCore/VersionCalculation/BaseVersionCalculators/MergeMessageBaseVersionStrategy.cs
+++ b/GitVersionCore/VersionCalculation/BaseVersionCalculators/MergeMessageBaseVersionStrategy.cs
@@ -14,10 +14,13 @@ public override BaseVersion GetVersion(GitVersionContext context)
SemanticVersion semanticVersion;
// TODO when this approach works, inline the other class into here
if (MergeMessageParser.TryParse(c, context.Configuration, out semanticVersion))
+ {
+ var shouldIncrement = !context.Configuration.PreventIncrementForMergedBranchVersion;
return new[]
{
- new BaseVersion(string.Format("Merge message '{0}'", c.Message.Trim()), false, true, semanticVersion, c, null)
+ new BaseVersion(string.Format("Merge message '{0}'", c.Message.Trim()), shouldIncrement, true, semanticVersion, c, null)
};
+ }
return Enumerable.Empty();
})
.ToArray();
diff --git a/GitVersionCore/VersionCalculation/BaseVersionCalculators/VersionInBranchBaseVersionStrategy.cs b/GitVersionCore/VersionCalculation/BaseVersionCalculators/VersionInBranchBaseVersionStrategy.cs
index f2d0bfe2d1..5cbf22cc83 100644
--- a/GitVersionCore/VersionCalculation/BaseVersionCalculators/VersionInBranchBaseVersionStrategy.cs
+++ b/GitVersionCore/VersionCalculation/BaseVersionCalculators/VersionInBranchBaseVersionStrategy.cs
@@ -9,7 +9,7 @@ public override BaseVersion GetVersion(GitVersionContext context)
var versionInBranch = GetVersionInBranch(context);
if (versionInBranch != null)
{
- var commitBranchWasBranchedFrom = context.CurrentBranch.FindCommitBranchWasBranchedFrom(context.Repository);
+ var commitBranchWasBranchedFrom = context.CurrentBranch.FindCommitBranchWasBranchedFrom(context.Repository, context.OnlyEvaluateTrackedBranches);
var branchNameOverride = context.CurrentBranch.Name.RegexReplace("[-/]" + versionInBranch.Item1, string.Empty);
return new BaseVersion("Version in branch name", false, true, versionInBranch.Item2, commitBranchWasBranchedFrom, branchNameOverride);
}
diff --git a/GitVersionCore/VersionCalculation/NewNextVersionCalculator.cs b/GitVersionCore/VersionCalculation/NewNextVersionCalculator.cs
index 6d9c40f5c9..81cd7d135f 100644
--- a/GitVersionCore/VersionCalculation/NewNextVersionCalculator.cs
+++ b/GitVersionCore/VersionCalculation/NewNextVersionCalculator.cs
@@ -8,15 +8,17 @@ public class NewNextVersionCalculator
{
IBaseVersionCalculator baseVersionFinder;
IMetaDataCalculator metaDataCalculator;
+ LastTagBaseVersionStrategy lastTagBaseVersionStrategy;
public NewNextVersionCalculator(IBaseVersionCalculator baseVersionCalculator = null, IMetaDataCalculator metaDataCalculator = null)
{
this.metaDataCalculator = metaDataCalculator ?? new MetaDataCalculator();
+ lastTagBaseVersionStrategy = new LastTagBaseVersionStrategy();
baseVersionFinder = baseVersionCalculator ??
new BaseVersionCalculator(
new FallbackBaseVersionStrategy(),
new ConfigNextVersionBaseVersionStrategy(),
- new LastTagBaseVersionStrategy(),
+ lastTagBaseVersionStrategy,
new MergeMessageBaseVersionStrategy(),
new VersionInBranchBaseVersionStrategy());
}
@@ -37,7 +39,17 @@ public SemanticVersion FindVersion(GitVersionContext context)
var name = baseVersion.BranchNameOverride ?? context.CurrentBranch.Name;
tagToUse = name.RegexReplace(context.Configuration.BranchPrefixToTrim, string.Empty, RegexOptions.IgnoreCase);
}
- baseVersion.SemanticVersion.PreReleaseTag = new SemanticVersionPreReleaseTag(tagToUse, 1);
+ int? number = 1;
+ var lastTag = lastTagBaseVersionStrategy.GetVersion(context);
+ if (lastTag != null &&
+ !context.IsCurrentCommitTagged &&
+ MajorMinorPatchEqual(lastTag.SemanticVersion, baseVersion.SemanticVersion) &&
+ lastTag.SemanticVersion.PreReleaseTag.HasTag())
+ {
+ number = lastTag.SemanticVersion.PreReleaseTag.Number + 1;
+ }
+
+ baseVersion.SemanticVersion.PreReleaseTag = new SemanticVersionPreReleaseTag(tagToUse, number);
}
baseVersion.SemanticVersion.BuildMetaData = metaDataCalculator.Create(baseVersion.BaseVersionSource, context);
@@ -45,6 +57,13 @@ public SemanticVersion FindVersion(GitVersionContext context)
return baseVersion.SemanticVersion;
}
+ static bool MajorMinorPatchEqual(SemanticVersion lastTag, SemanticVersion baseVersion)
+ {
+ return lastTag.Major == baseVersion.Major &&
+ lastTag.Minor == baseVersion.Minor &&
+ lastTag.Patch == baseVersion.Patch;
+ }
+
static void IncrementVersion(GitVersionContext context, BaseVersion baseVersion)
{
if (!baseVersion.SemanticVersion.PreReleaseTag.HasTag())
@@ -57,9 +76,12 @@ static void IncrementVersion(GitVersionContext context, BaseVersion baseVersion)
case IncrementStrategy.Major:
Logger.WriteInfo("Incrementing Major Version");
baseVersion.SemanticVersion.Major++;
+ baseVersion.SemanticVersion.Minor = 0;
+ baseVersion.SemanticVersion.Patch = 0;
break;
case IncrementStrategy.Minor:
baseVersion.SemanticVersion.Minor++;
+ baseVersion.SemanticVersion.Patch = 0;
Logger.WriteInfo("Incrementing Minor Version");
break;
case IncrementStrategy.Patch:
diff --git a/GitVersionTask.Tests/GitFlow/GitFlowVersionFinderTests.cs b/GitVersionTask.Tests/GitFlow/GitFlowVersionFinderTests.cs
index c36a91aac9..7512a99248 100644
--- a/GitVersionTask.Tests/GitFlow/GitFlowVersionFinderTests.cs
+++ b/GitVersionTask.Tests/GitFlow/GitFlowVersionFinderTests.cs
@@ -1,5 +1,4 @@
-using System.IO;
-using GitVersion;
+using GitVersion;
using LibGit2Sharp;
using NUnit.Framework;
using ObjectApproval;
@@ -23,64 +22,6 @@ public void RequiresALocalMasterBranch()
}
}
- [Test, Ignore("Need a way to enforce this check")]
- public void RequiresALocalDevelopBranch()
- {
- var repoPath = Clone(ASBMTestRepoWorkingDirPath);
- using (var repo = new Repository(repoPath))
- {
- repo.Branches["feature/one"].ForceCheckout();
-
- repo.Branches.Remove("develop");
-
- var finder = new GitVersionFinder();
-
- Assert.Throws(() => finder.FindVersion(new GitVersionContext(repo, new Config())));
- }
- }
-
- [Test]
- public void AHotfixBranchIsRequiredToBranchOffOfMasterBranch()
- {
- var repoPath = Clone(ASBMTestRepoWorkingDirPath);
- using (var repo = new Repository(repoPath))
- {
- const string branchName = "hotfix/1.0.2";
-
- // Create a new unborn hotfix branch sharing no history with "master"
- repo.Refs.UpdateTarget(repo.Refs.Head.CanonicalName, "refs/heads/" + branchName);
-
- AddOneCommitToHead(repo, "hotfix");
-
- var feature = repo.Branches[branchName];
-
- var finder = new GitVersionFinder();
-
- Assert.Throws(() => finder.FindVersion(new GitVersionContext(repo, feature, new Config())));
- }
- }
-
- [Test]
- public void APullRequestBranchIsRequiredToBranchOffOfDevelopBranch()
- {
- var repoPath = Clone(ASBMTestRepoWorkingDirPath);
- using (var repo = new Repository(repoPath))
- {
- const string branchName = "pull/1735/merge";
-
- // Create a new unborn pull request branch sharing no history with "develop"
- repo.Refs.UpdateTarget(repo.Refs.Head.CanonicalName, "refs/heads/" + branchName);
-
- AddOneCommitToHead(repo, "code");
-
- var pull = repo.Branches[branchName];
-
- var finder = new GitVersionFinder();
-
- Assert.Throws(() => finder.FindVersion(new GitVersionContext(repo, pull, new Config())));
- }
- }
-
[Test]
public void AFeatureBranchDoesNotRequireASpecificPrefix()
{
@@ -122,30 +63,4 @@ public void AFeatureBranchPrefixIsNotIncludedInTag()
ObjectApprover.VerifyWithJson(versionAndBranch, Scrubbers.GuidAndDateScrubber);
}
}
-
- [Test]
- public void AReleaseBranchIsRequiredToBranchOffOfDevelopBranch()
- {
- var repoPath = Clone(ASBMTestRepoWorkingDirPath);
- using (var repo = new Repository(repoPath))
- {
- const string branchName = "release/1.2.0";
-
- // Create a new unborn release branch sharing no history with "develop"
- repo.Refs.UpdateTarget(repo.Refs.Head.CanonicalName, "refs/heads/" + branchName);
-
- var path = Path.Combine(repo.Info.WorkingDirectory, "README");
- File.AppendAllText(path, "Release\n");
-
- repo.Stage(path);
- var sign = SignatureBuilder.SignatureNow();
- repo.Commit("release unborn", sign, sign);
-
- var feature = repo.Branches[branchName];
-
- var finder = new GitVersionFinder();
-
- Assert.Throws(() => finder.FindVersion(new GitVersionContext(repo, feature, new Config())));
- }
- }
}
\ No newline at end of file
diff --git a/GitVersionTask.Tests/GitFlow/GitVersionFinderTests.AFeatureBranchDoesNotRequireASpecificPrefix.approved.txt b/GitVersionTask.Tests/GitFlow/GitVersionFinderTests.AFeatureBranchDoesNotRequireASpecificPrefix.approved.txt
index 838ceacca0..31e0f9e5d3 100644
--- a/GitVersionTask.Tests/GitFlow/GitVersionFinderTests.AFeatureBranchDoesNotRequireASpecificPrefix.approved.txt
+++ b/GitVersionTask.Tests/GitFlow/GitVersionFinderTests.AFeatureBranchDoesNotRequireASpecificPrefix.approved.txt
@@ -1,10 +1,10 @@
{
"Major": 1,
- "Minor": 1,
- "Patch": 0,
+ "Minor": 0,
+ "Patch": 2,
"PreReleaseTag": {
"Name": "every-feature-is-welcome",
- "Number": null
+ "Number": 1
},
"BuildMetaData": {
"CommitsSinceTag": 1,
diff --git a/GitVersionTask.Tests/GitFlow/GitVersionFinderTests.AFeatureBranchPrefixIsNotIncludedInTag.approved.txt b/GitVersionTask.Tests/GitFlow/GitVersionFinderTests.AFeatureBranchPrefixIsNotIncludedInTag.approved.txt
index a7a459f70c..11a2f20b3a 100644
--- a/GitVersionTask.Tests/GitFlow/GitVersionFinderTests.AFeatureBranchPrefixIsNotIncludedInTag.approved.txt
+++ b/GitVersionTask.Tests/GitFlow/GitVersionFinderTests.AFeatureBranchPrefixIsNotIncludedInTag.approved.txt
@@ -4,7 +4,7 @@
"Patch": 0,
"PreReleaseTag": {
"Name": "ABC-1234_SomeDescription",
- "Number": null
+ "Number": 1
},
"BuildMetaData": {
"CommitsSinceTag": 1,
diff --git a/GitVersionTask.Tests/UpdateAssemblyInfoTests.cs b/GitVersionTask.Tests/UpdateAssemblyInfoTests.cs
index dd578b103f..e80fb7634f 100644
--- a/GitVersionTask.Tests/UpdateAssemblyInfoTests.cs
+++ b/GitVersionTask.Tests/UpdateAssemblyInfoTests.cs
@@ -70,7 +70,6 @@ public void StandardExecutionMode_CanDetermineTheVersionFromALocalDevelop()
public void StandardExecutionMode_CanDetermineTheVersionFromALocalFeature()
{
var repoPath = CheckoutLocal(ASBMTestRepoWorkingDirPath, "refs/heads/feature/one");
-
var task = new UpdateAssemblyInfo
{
BuildEngine = new MockBuildEngine(),