diff --git a/GitVersionCore.Tests/GitVersionCore.Tests.csproj b/GitVersionCore.Tests/GitVersionCore.Tests.csproj
index ca3f3b5244..e2151d4693 100644
--- a/GitVersionCore.Tests/GitVersionCore.Tests.csproj
+++ b/GitVersionCore.Tests/GitVersionCore.Tests.csproj
@@ -125,6 +125,7 @@
+
diff --git a/GitVersionCore.Tests/Helpers/GitTestExtensions.cs b/GitVersionCore.Tests/Helpers/GitTestExtensions.cs
index 7cfb0ceffc..a52791583d 100644
--- a/GitVersionCore.Tests/Helpers/GitTestExtensions.cs
+++ b/GitVersionCore.Tests/Helpers/GitTestExtensions.cs
@@ -11,18 +11,24 @@ public static class GitTestExtensions
{
static int pad = 1;
- public static void DumpGraph(this IRepository repository)
+ public static void DumpGraph(this IRepository repository, bool oneLine = true)
{
var output = new StringBuilder();
try
{
+ var commandLine = @"log --graph --abbrev-commit --decorate --date=relative --all --remotes=*";
+ if (oneLine)
+ {
+ commandLine += " --oneline";
+ }
+
ProcessHelper.Run(
o => output.AppendLine(o),
e => output.AppendLineFormat("ERROR: {0}", e),
null,
"git",
- @"log --graph --abbrev-commit --decorate --date=relative --all --remotes=*",
+ commandLine,
repository.Info.Path);
}
catch (FileNotFoundException exception)
diff --git a/GitVersionCore.Tests/IntegrationTests/RealWorldGitFlowScenarios.cs b/GitVersionCore.Tests/IntegrationTests/RealWorldGitFlowScenarios.cs
new file mode 100644
index 0000000000..be1ea31338
--- /dev/null
+++ b/GitVersionCore.Tests/IntegrationTests/RealWorldGitFlowScenarios.cs
@@ -0,0 +1,61 @@
+using GitVersion;
+using LibGit2Sharp;
+using NUnit.Framework;
+
+[TestFixture]
+public class RealWorldGitFlowScenarios
+{
+ [Test]
+ public void SupportForPrereleasesAndResetUnstableCounter()
+ {
+ // Note: this test checks whether the functionality explained at https://github.com/GitTools/GitVersion/issues/452 works correctly.
+
+ // This test should check the following contraints:
+ // 1) Can we have unstable versions
+ // 2) When we create a release branch, will that reset develop
+
+ var config = new Config
+ {
+ VersioningMode = VersioningMode.ContinuousDeployment
+ };
+
+ using (var fixture = new EmptyRepositoryFixture(config))
+ {
+ fixture.Repository.MakeATaggedCommit("2.1.0");
+ fixture.Repository.CreateBranch("develop").Checkout();
+ fixture.Repository.MakeACommit();
+ fixture.AssertFullSemver("2.2.0-unstable.1");
+ fixture.Repository.MakeACommit();
+ fixture.AssertFullSemver("2.2.0-unstable.2");
+
+ fixture.Repository.CreateBranch("release/2.2.0").Checkout();
+ fixture.Repository.ApplyTag("2.2.0");
+ fixture.Repository.MakeACommit();
+ fixture.AssertFullSemver("2.2.0-beta.1");
+ fixture.Repository.MakeACommit();
+ fixture.AssertFullSemver("2.2.0-beta.2");
+
+ fixture.Repository.Checkout("develop");
+ fixture.Repository.MakeACommit();
+ fixture.AssertFullSemver("2.3.0-unstable.1");
+ fixture.Repository.MakeACommit();
+ fixture.AssertFullSemver("2.3.0-unstable.2");
+
+ fixture.Repository.Checkout("master");
+ fixture.AssertFullSemver("2.1.0");
+ fixture.Repository.MergeNoFF("release/2.2.0");
+ fixture.Repository.Tags.Remove("2.2.0");
+ fixture.Repository.ApplyTag("2.2.0");
+ fixture.AssertFullSemver("2.2.0");
+
+ fixture.Repository.Checkout("develop");
+ fixture.Repository.MergeNoFF("release/2.2.0");
+ fixture.AssertFullSemver("2.3.0-unstable.3");
+ fixture.Repository.MakeACommit();
+ fixture.AssertFullSemver("2.3.0-unstable.4");
+ fixture.Repository.MakeACommit();
+
+ fixture.Repository.DumpGraph();
+ }
+ }
+}
\ No newline at end of file