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