static void AssertMergeMessage(string message, string expectedVersion, List <Commit> parents, Config config = null) { var commit = new MockCommit { MessageEx = message, ParentsEx = parents }; var context = new GitVersionContextBuilder() .WithConfig(config ?? new Config()) .WithRepository(new MockRepository { Head = new MockBranch("master") { commit, new MockCommit() } }) .Build(); var sut = new MergeMessageBaseVersionStrategy(); var baseVersion = sut.GetVersions(context).SingleOrDefault(); if (expectedVersion == null) { baseVersion.ShouldBe(null); } else { baseVersion.ShouldNotBeNull(); baseVersion.SemanticVersion.ToString().ShouldBe(expectedVersion); } }
private void AssertMergeMessage(string message, string expectedVersion, IList <ICommit> parents, Config config = null) { var commit = new MockCommit { MessageEx = message, ParentsEx = parents }; var contextBuilder = new GitVersionContextBuilder() .WithConfig(config ?? new Config()) .WithRepository(new MockRepository { Head = new MockBranch("master") { commit, new MockCommit() } }); contextBuilder.Build(); var strategy = contextBuilder.ServicesProvider.GetServiceForType <IVersionStrategy, MergeMessageVersionStrategy>(); var baseVersion = strategy.GetVersions().SingleOrDefault(); if (expectedVersion == null) { baseVersion.ShouldBe(null); } else { baseVersion.ShouldNotBeNull(); baseVersion.SemanticVersion.ToString().ShouldBe(expectedVersion); } }
public void Should_throw_if_head_isnt_a_merge_commit_and_no_override_tag_is_found() { var commit = new MockCommit { MessageEx = "Not a merge commit", CommitterEx = 2.Seconds().Ago().ToSignature() }; var finder = new MasterVersionFinder(); var mockBranch = new MockBranch("master") { commit }; var mockRepository = new MockRepository { Branches = new MockBranchCollection { mockBranch, } }; var exception = Assert.Throws <WarningException>(() => { finder.FindVersion(new GitVersionContext(mockRepository, mockBranch, new Config())); }); Assert.AreEqual("The head of master should always be a merge commit if you follow gitflow. Please create one or work around this by tagging the commit with SemVer compatible Id.", exception.Message); }
public void Override_using_tag_with_a_prerelease() { var commit = new MockCommit { CommitterEx = 2.Seconds().Ago().ToSignature() }; var finder = new MasterVersionFinder(); var mockBranch = new MockBranch("master") { commit }; var mockRepository = new MockRepository { Branches = new MockBranchCollection { mockBranch }, Tags = new MockTagCollection { new MockTag { NameEx = "0.1.0-beta1", TargetEx = commit } } }; var version = finder.FindVersion(new GitVersionContext(mockRepository, mockBranch, new Config())); Assert.AreEqual(0, version.Patch, "Should set the patch version to the patch of the latest hotfix merge commit"); ObjectApprover.VerifyWithJson(version, Scrubbers.GuidScrubber); }
public void Override_using_tag_with_a_stable_release() { var commit = new MockCommit { CommitterEx = 2.Seconds().Ago().ToSignature() }; var finder = new MasterVersionFinder(); var version = finder.FindVersion( new MockRepository { Branches = new MockBranchCollection { new MockBranch("master") { commit }, }, Tags = new MockTagCollection { new MockTag { NameEx = "0.2.0", TargetEx = commit } } }, commit); Assert.AreEqual(0, version.Patch, "Should set the patch version to the patch of the latest hotfix merge commit"); ObjectApprover.VerifyWithJson(version, Scrubbers.GuidAndDateScrubber); }
public void VerifyNullGuard2() { var commit = new MockCommit(); var sut = new ShaVersionFilter(new[] { commit.Sha }); Should.Throw <ArgumentNullException>(() => sut.Exclude(null, out _)); }
public void AssertMergeMessage(string message, bool isMergeCommit, string expectedVersion) { var c = new MockCommit { MessageEx = message, ParentsEx = isMergeCommit ? new List <Commit> { null, null } : new List <Commit> { null } }; string versionPart; var parsed = MergeMessageParser.TryParse(c, out versionPart); if (expectedVersion == null) { parsed.ShouldBe(false); } else { parsed.ShouldBe(true); versionPart.ShouldBe(expectedVersion); } }
public void Override_using_tag_with_a_prerelease() { var commit = new MockCommit { CommitterEx = 2.Seconds().Ago().ToSignature() }; var finder = new MasterVersionFinder(); var version = finder.FindVersion( new MockRepository { Branches = new MockBranchCollection { new MockBranch("master") { commit }, }, Tags = new MockTagCollection { new MockTag { NameEx = "0.1.0-beta1", TargetEx = commit } } }, commit); Assert.AreEqual(0, version.Patch, "Should set the patch version to the patch of the latest hotfix merge commit"); ObjectApprover.VerifyWithJson(version, Scrubbers.GuidScrubber); }
public void Commit_on_develop_and_previous_commit_on_master_is_a_hotfix() { var commitOnDevelop = new MockCommit { CommitterEx = 1.Seconds().Ago().ToSignature() }; var finder = new DevelopVersionFinder(); var mockBranch = new MockBranch("develop") { commitOnDevelop }; var version = finder.FindVersion(new GitVersionContext { Repository = new MockRepository { Branches = new MockBranchCollection { new MockBranch("master") { new MockMergeCommit { MessageEx = "hotfix-0.1.1", CommitterEx = 2.Seconds().Ago().ToSignature() } }, mockBranch }, }, CurrentBranch = mockBranch }); Assert.AreEqual(2, version.Minor, "Minor should be master.Minor+1"); ObjectApprover.VerifyWithJson(version, Scrubbers.GuidAndDateScrubber); }
public void Hotfix_merge() { var hotfixMergeCommit = new MockCommit { MessageEx = "Merge branch 'hotfix-0.1.5'", CommitterEx = 2.Seconds().Ago().ToSignature() }; var finder = new MasterVersionFinder { Repository = new MockRepository { Branches = new MockBranchCollection { new MockBranch("master") { hotfixMergeCommit }, } }, Commit = hotfixMergeCommit }; var version = finder.FindVersion(); Assert.AreEqual(0, version.Version.Major); Assert.AreEqual(1, version.Version.Minor); Assert.AreEqual(5, version.Version.Patch, "Should set the patch version to the patch of the latest hotfix merge commit"); Assert.AreEqual(Stability.Final, version.Version.Stability); Assert.AreEqual(BranchType.Master, version.BranchType); Assert.IsNull(version.Version.PreReleasePartOne); }
public void Override_using_tag_with_a_stable_release() { var commit = new MockCommit { CommitterEx = 2.Seconds().Ago().ToSignature() }; var finder = new MasterVersionFinder(); var mockBranch = new MockBranch("master") { commit }; var mockRepository = new MockRepository { Branches = new MockBranchCollection { mockBranch, }, Tags = new MockTagCollection { new MockTag { NameEx = "0.2.0", TargetEx = commit } } }; var version = finder.FindVersion(new GitVersionContext(mockRepository, mockBranch, new Config())); Assert.AreEqual(0, version.Patch, "Should set the patch version to the patch of the latest hotfix merge commit"); ObjectApprover.VerifyWithJson(version, Scrubbers.GuidAndDateScrubber); }
[Ignore] //TODO Delete? public void Commit_on_develop_and_previous_commit_on_master_is_a_hotfix() { var commitOnDevelop = new MockCommit { CommitterEx = 1.Seconds().Ago().ToSignature() }; var finder = new DevelopVersionFinder(); var mockBranch = new MockBranch("develop") { commitOnDevelop }; var repository = new MockRepository { Branches = new MockBranchCollection { new MockBranch("master") { new MockMergeCommit { MessageEx = "hotfix-0.1.1", CommitterEx = 2.Seconds().Ago().ToSignature() } }, mockBranch }, }; var version = finder.FindVersion(new GitVersionContext(repository, mockBranch, new Config())); Assert.AreEqual(2, version.Minor, "Minor should be master.Minor+1"); ObjectApprover.VerifyWithJson(version, Scrubbers.GuidAndDateScrubber); }
public void VerifyNullGuard2() { var commit = new MockCommit(); var sut = new ShaVersionFilter(new[] { commit.Sha }); string reason; Should.Throw<ArgumentNullException>(() => sut.Exclude(null, out reason)); }
public void Feature_branch_with_2_commits() { var branchingCommit = new MockCommit { CommitterEx = 3.Seconds().Ago().ToSignature(), }; var commitOneOnFeature = new MockCommit { CommitterEx = 2.Seconds().Ago().ToSignature(), }; var commitTwoOnFeature = new MockCommit { CommitterEx = 1.Seconds().Ago().ToSignature(), }; var featureBranch = new MockBranch("featureWithNoCommits") { branchingCommit, commitOneOnFeature, commitTwoOnFeature, }; var finder = new FeatureVersionFinder { Repository = new MockRepository { Branches = new MockBranchCollection { new MockBranch("master") { new MockCommit { MessageEx = "Merge branch 'release-0.2.0'", CommitterEx = 4.Seconds().Ago().ToSignature() } }, featureBranch, new MockBranch("develop") { branchingCommit, new MockCommit { CommitterEx = 2.Seconds().Ago().ToSignature() } } } }, Commit = commitTwoOnFeature, FeatureBranch = featureBranch, FindFirstCommitOnBranchFunc = () => branchingCommit.Id }; var version = finder.FindVersion(); Assert.AreEqual(0, version.Version.Major); Assert.AreEqual(3, version.Version.Minor, "Minor should be master.Minor+1"); Assert.AreEqual(0, version.Version.Patch); Assert.AreEqual(Stability.Unstable, version.Version.Stability); Assert.AreEqual(BranchType.Feature, version.BranchType); Assert.AreEqual(branchingCommit.Prefix(), version.Version.Suffix, "Suffix should be the develop commit it was branched from"); Assert.AreEqual(0, version.Version.PreReleasePartOne, "Prerelease is always 0 for feature branches"); }
public void VerifyNullGuard() { var commit = new MockCommit(); var dummy = DateTimeOffset.UtcNow.AddSeconds(1.0); var sut = new MinDateVersionFilter(dummy); string reason; Should.Throw<ArgumentNullException>(() => sut.Exclude(null, out reason)); }
public void WhenShaMismatchShouldNotExclude() { var commit = new MockCommit(); var version = new BaseVersion("dummy", false, new SemanticVersion(1), commit, string.Empty); var sut = new ShaVersionFilter(new[] { "mismatched" }); sut.Exclude(version, out var reason).ShouldBeFalse(); reason.ShouldBeNull(); }
public void WhenShaMatchShouldExcludeWithReason() { var commit = new MockCommit(); var version = new BaseVersion("dummy", false, new SemanticVersion(1), commit, string.Empty); var sut = new ShaVersionFilter(new[] { commit.Sha }); sut.Exclude(version, out var reason).ShouldBeTrue(); reason.ShouldNotBeNullOrWhiteSpace(); }
public void WhenShaMismatchShouldNotExclude() { var commit = new MockCommit(); var version = new BaseVersion("dummy", false, new SemanticVersion(1), commit, string.Empty); var sut = new ShaVersionFilter(new[] { "mismatched" }); string reason; sut.Exclude(version, out reason).ShouldBeFalse(); reason.ShouldBeNull(); }
public void VerifyNullGuard() { var commit = new MockCommit(); var dummy = DateTimeOffset.UtcNow.AddSeconds(1.0); var sut = new MinDateVersionFilter(dummy); string reason; Should.Throw <ArgumentNullException>(() => sut.Exclude(null, out reason)); }
public void WhenCommitShouldExcludeWithReason() { var commit = new MockCommit(); //when = UtcNow var version = new BaseVersion("dummy", false, new SemanticVersion(1), commit, string.Empty); var futureDate = DateTimeOffset.UtcNow.AddYears(1); var sut = new MinDateVersionFilter(futureDate); sut.Exclude(version, out var reason).ShouldBeTrue(); reason.ShouldNotBeNullOrWhiteSpace(); }
public void WhenShaMismatchShouldNotExclude() { var commit = new MockCommit(); //when = UtcNow var version = new BaseVersion("dummy", false, new SemanticVersion(1), commit, string.Empty); var pastDate = DateTimeOffset.UtcNow.AddYears(-1); var sut = new MinDateVersionFilter(pastDate); sut.Exclude(version, out var reason).ShouldBeFalse(); reason.ShouldBeNull(); }
public void WhenShaMatchShouldExcludeWithReason() { var commit = new MockCommit(); var version = new BaseVersion("dummy", false, new SemanticVersion(1), commit, string.Empty); var sut = new ShaVersionFilter(new[] { commit.Sha }); string reason; sut.Exclude(version, out reason).ShouldBeTrue(); reason.ShouldNotBeNullOrWhiteSpace(); }
public void NewestSemVerTag_RetrieveTheHighestSemanticVersionPointingAtTheSpecifiedCommit() { var mockCommit = new MockCommit(); var repo = new MockRepository { Tags = new MockTagCollection { Tags = new List<Tag> { new MockTag { NameEx = "a", TargetEx = mockCommit, AnnotationEx = new MockTagAnnotation { TaggerEx = new Signature("a", "", 7.Seconds().Ago()) } }, new MockTag { NameEx = "9.0.0a", TargetEx = mockCommit, AnnotationEx = new MockTagAnnotation { TaggerEx = new Signature("a", "", 5.Seconds().Ago()) } }, new MockTag { NameEx = "0.1.0", TargetEx = mockCommit, AnnotationEx = new MockTagAnnotation { TaggerEx = new Signature("a", "", 1.Seconds().Ago()) } }, new MockTag { NameEx = "0.2.0", TargetEx = mockCommit, AnnotationEx = new MockTagAnnotation { TaggerEx = new Signature("a", "", 5.Seconds().Ago()) } }, } } }; var version = repo.NewestSemVerTag(mockCommit); Assert.AreEqual(0, version.Major); Assert.AreEqual(1, version.Minor); Assert.AreEqual(0, version.Patch); }
public void NewestSemVerTag_RetrieveTheHighestSemanticVersionPointingAtTheSpecifiedCommit() { var mockCommit = new MockCommit(); var repo = new MockRepository { Tags = new MockTagCollection { Tags = new List <Tag> { new MockTag { NameEx = "a", TargetEx = mockCommit, AnnotationEx = new MockTagAnnotation { TaggerEx = new Signature("a", "", 7.Seconds().Ago()) } }, new MockTag { NameEx = "9.0.0a", TargetEx = mockCommit, AnnotationEx = new MockTagAnnotation { TaggerEx = new Signature("a", "", 5.Seconds().Ago()) } }, new MockTag { NameEx = "0.1.0", TargetEx = mockCommit, AnnotationEx = new MockTagAnnotation { TaggerEx = new Signature("a", "", 1.Seconds().Ago()) } }, new MockTag { NameEx = "0.2.0", TargetEx = mockCommit, AnnotationEx = new MockTagAnnotation { TaggerEx = new Signature("a", "", 5.Seconds().Ago()) } }, } } }; var version = repo.NewestSemVerTag(mockCommit); Assert.AreEqual(0, version.Major); Assert.AreEqual(1, version.Minor); Assert.AreEqual(0, version.Patch); }
public void WhenShaMismatchShouldNotExclude() { var commit = new MockCommit(); //when = UtcNow var version = new BaseVersion("dummy", false, new SemanticVersion(1), commit, string.Empty); var pastDate = DateTimeOffset.UtcNow.AddYears(-1); var sut = new MinDateVersionFilter(pastDate); string reason; sut.Exclude(version, out reason).ShouldBeFalse(); reason.ShouldBeNull(); }
public void WhenCommitShouldExcludeWithReason() { var commit = new MockCommit(); //when = UtcNow var version = new BaseVersion("dummy", false, new SemanticVersion(1), commit, string.Empty); var futureDate = DateTimeOffset.UtcNow.AddYears(1); var sut = new MinDateVersionFilter(futureDate); string reason; sut.Exclude(version, out reason).ShouldBeTrue(); reason.ShouldNotBeNullOrWhiteSpace(); }
public void First_commit() { var branchingCommit = new MockCommit { MessageEx = "branching commit", }; var firstCommit = new MockCommit { MessageEx = "first commit on release", }; var releaseBranch = new MockBranch("release-0.5.0") { firstCommit, branchingCommit, }; var finder = new ReleaseVersionFinder { ReleaseBranch = releaseBranch, Commit = firstCommit, Repository = new MockRepository { Branches = new MockBranchCollection { new MockBranch("develop") { branchingCommit }, releaseBranch }, Tags = new MockTagCollection { new MockTag { TargetEx = branchingCommit, NameEx = "0.5.0-alpha5" } } }, }; var version = finder.FindVersion(); Assert.AreEqual(0, version.Version.Major); Assert.AreEqual(5, version.Version.Minor); Assert.AreEqual(0, version.Version.Patch); Assert.AreEqual(Stability.Alpha, version.Version.Stability); Assert.AreEqual(BranchType.Release, version.BranchType); Assert.AreEqual(5, version.Version.PreReleasePartOne, "PreReleasePartOne should be set to 5 from the tag"); Assert.AreEqual(1, version.Version.PreReleasePartTwo, "PreReleasePartTwo should be set to 1 since there is 1 commit"); }
public void First_commit() { var branchingCommit = new MockCommit { MessageEx = "branching commit", }; var firstCommit = new MockCommit { MessageEx = "first commit on hotfix", }; var hotfixBranch = new MockBranch("hotfix-0.1.3") { firstCommit, branchingCommit, }; var finder = new HotfixVersionFinder { HotfixBranch = hotfixBranch, Commit = firstCommit, Repository = new MockRepository { Branches = new MockBranchCollection { new MockBranch("master") { branchingCommit }, hotfixBranch }, Tags = new MockTagCollection { new MockTag { TargetEx = branchingCommit, NameEx = "0.1.3-beta4" } } }, }; var version = finder.FindVersion(); Assert.AreEqual(0, version.Version.Major); Assert.AreEqual(1, version.Version.Minor); Assert.AreEqual(3, version.Version.Patch); Assert.AreEqual(Stability.Beta, version.Version.Stability); Assert.AreEqual(BranchType.Hotfix, version.BranchType); Assert.AreEqual(4, version.Version.PreReleasePartOne, "PreReleasePartOne should be set to 4 from the tag"); Assert.AreEqual(1, version.Version.PreReleasePartTwo, "PreReleasePartTwo should be set to 1 since there is a commit on the branch"); }
public void Commit_on_develop_and_previous_commit_on_master_has_a_tag() { var commitOnDevelop = new MockCommit { CommitterEx = 1.Seconds().Ago().ToSignature() }; var commitOnMaster = new MockCommit { CommitterEx = 2.Seconds().Ago().ToSignature() }; var finder = new DevelopVersionFinder { Repository = new MockRepository { Branches = new MockBranchCollection { new MockBranch("master") { commitOnMaster }, new MockBranch("develop") { commitOnDevelop } }, Tags = new MockTagCollection { new MockTag { TargetEx = commitOnMaster, NameEx = "0.1.0" } } }, Commit = commitOnDevelop }; var version = finder.FindVersion(); Assert.AreEqual(0, version.Version.Major); Assert.AreEqual(2, version.Version.Minor, "Minor should be master.Minor+1"); Assert.AreEqual(0, version.Version.Patch); Assert.AreEqual(Stability.Unstable, version.Version.Stability); Assert.AreEqual(BranchType.Develop, version.BranchType); Assert.AreEqual(1, version.Version.PreReleasePartOne, "Prerelease should to the number of commits ahead of master(by date)"); }
public void No_commits() { var branchingCommit = new MockCommit { CommitterEx = 1.Seconds().Ago().ToSignature(), }; var hotfixBranch = new MockBranch("hotfix-0.1.4") { branchingCommit, }; var finder = new HotfixVersionFinder { HotfixBranch = hotfixBranch, Commit = branchingCommit, Repository = new MockRepository { Branches = new MockBranchCollection { new MockBranch("master") { branchingCommit }, hotfixBranch }, Tags = new MockTagCollection { new MockTag { TargetEx = branchingCommit, NameEx = "0.1.4-alpha5" } } }, }; var version = finder.FindVersion(); Assert.AreEqual(0, version.Version.Major); Assert.AreEqual(1, version.Version.Minor); Assert.AreEqual(4, version.Version.Patch); Assert.AreEqual(Stability.Alpha, version.Version.Stability); Assert.AreEqual(BranchType.Hotfix, version.BranchType); Assert.AreEqual(5, version.Version.PreReleasePartOne, "PreReleasePartOne should be set to 5 from the tag"); Assert.IsNull(version.Version.PreReleasePartTwo, "PreReleasePartTwo null since there is no commits"); }
[Ignore] //TODO Delete? public void Commit_on_develop_and_previous_commit_on_master_has_a_tag() { var commitOnDevelop = new MockCommit { CommitterEx = 1.Seconds().Ago().ToSignature() }; var commitOnMaster = new MockCommit { CommitterEx = 2.Seconds().Ago().ToSignature() }; var finder = new DevelopVersionFinder(); var develop = new MockBranch("develop") { commitOnDevelop }; var context = new GitVersionContext { Repository = new MockRepository { Branches = new MockBranchCollection { new MockBranch("master") { commitOnMaster }, develop }, Tags = new MockTagCollection { new MockTag { TargetEx = commitOnMaster, NameEx = "0.1.0" } } }, CurrentBranch = develop }; var version = finder.FindVersion(context); Assert.AreEqual(2, version.Minor, "Minor should be master.Minor+1"); ObjectApprover.VerifyWithJson(version, Scrubbers.GuidAndDateScrubber); }
public void Pull_branch_with_1_commit_TeamCity() { FakeTeamCityPullrequest(2); var branchingCommit = new MockCommit { MessageEx = "Merge branch 'release-0.2.0'", CommitterEx = 2.Seconds().Ago().ToSignature(), }; var commitOneOnFeature = new MockCommit { CommitterEx = 1.Seconds().Ago().ToSignature(), }; var pullBranch = new MockBranch("pull_no_2") { branchingCommit, commitOneOnFeature }; var finder = new PullVersionFinder { Repository = new MockRepository { Branches = new MockBranchCollection { pullBranch, new MockBranch("master") { branchingCommit, } } }, Commit = commitOneOnFeature, PullBranch = pullBranch, }; var version = finder.FindVersion(); Assert.AreEqual(0, version.Version.Major); Assert.AreEqual(3, version.Version.Minor, "Minor should be master.Minor+1"); Assert.AreEqual(0, version.Version.Patch); Assert.AreEqual(Stability.Unstable, version.Version.Stability); Assert.AreEqual(BranchType.PullRequest, version.BranchType); Assert.AreEqual("2", version.Version.Suffix); //in TC the branch name will be the pull request no eg 1154 Assert.AreEqual(0, version.Version.PreReleasePartOne, "Prerelease is always 0 for pull requests"); }
public void Commit_on_develop_and_previous_commit_on_master_has_a_tag() { var commitOnDevelop = new MockCommit { CommitterEx = 1.Seconds().Ago().ToSignature() }; var commitOnMaster = new MockCommit { CommitterEx = 2.Seconds().Ago().ToSignature() }; var finder = new DevelopVersionFinder(); var develop = new MockBranch("develop") { commitOnDevelop }; var context = new GitVersionContext { Repository = new MockRepository { Branches = new MockBranchCollection { new MockBranch("master") { commitOnMaster }, develop }, Tags = new MockTagCollection { new MockTag { TargetEx = commitOnMaster, NameEx = "0.1.0" } } }, CurrentBranch = develop }; var version = finder.FindVersion(context); Assert.AreEqual(2, version.Minor, "Minor should be master.Minor+1"); ObjectApprover.VerifyWithJson(version, Scrubbers.GuidAndDateScrubber); }
public void AssertMergeMessage(string message, bool isMergeCommit, string expectedVersion) { var c = new MockCommit { MessageEx = message, ParentsEx = isMergeCommit ? new List<Commit> {null, null} : new List<Commit>{ null } }; string versionPart; var parsed = MergeMessageParser.TryParse(c, out versionPart); if (expectedVersion == null) { parsed.ShouldBe(false); } else { parsed.ShouldBe(true); versionPart.ShouldBe(expectedVersion); } }
static void AssertMereMessage(string message, string expectedVersion, List <Commit> parents) { var commit = new MockCommit { MessageEx = message, ParentsEx = parents }; ShortVersion versionPart; var parsed = MergeMessageParser.TryParse(commit, out versionPart); if (expectedVersion == null) { parsed.ShouldBe(false); } else { parsed.ShouldBe(true); var versionAsString = string.Format("{0}.{1}.{2}", versionPart.Major, versionPart.Minor, versionPart.Patch); versionAsString.ShouldBe(expectedVersion); } }
public void TagsByDate_HonorChainedAnnotatedTags() { var c = new MockCommit(); var col = new MockTagCollection(); var first = new MockTag { NameEx = "first", TargetEx = c, AnnotationEx = new MockTagAnnotation { TaggerEx = new Signature("a", "", 5.Seconds().Ago()), TargetEx = c, } }; col.Add(first); col.Add(new MockTag { NameEx = "second", TargetEx = first.Annotation, AnnotationEx = new MockTagAnnotation { TaggerEx = new Signature("a", "", 2.Seconds().Ago()), TargetEx = c, } }); var repo = new MockRepository { Tags = col }; var tags = repo.TagsByDate(c); Assert.AreEqual("second", tags.First().Name); }
public void Override_using_tag_with_a_prerelease() { var commit = new MockCommit { CommitterEx = 2.Seconds().Ago().ToSignature() }; var finder = new MasterVersionFinder { Repository = new MockRepository { Branches = new MockBranchCollection { new MockBranch("master") { commit }, }, Tags = new MockTagCollection { new MockTag { NameEx = "0.1.0-beta1", TargetEx = commit } } }, Commit = commit }; var version = finder.FindVersion(); Assert.AreEqual(0, version.Version.Major); Assert.AreEqual(1, version.Version.Minor); Assert.AreEqual(0, version.Version.Patch, "Should set the patch version to the patch of the latest hotfix merge commit"); Assert.AreEqual(Stability.Beta, version.Version.Stability); Assert.AreEqual(BranchType.Master, version.BranchType); Assert.AreEqual(1, version.Version.PreReleasePartOne); }
public void Second_commit() { var branchingCommit = new MockCommit { MessageEx = "branchingCommit" }; var secondCommit = new MockCommit { MessageEx = "secondCommit" }; var hotfixBranch = new MockBranch("hotfix-0.1.3") { secondCommit, new MockCommit { MessageEx = "firstCommit" }, branchingCommit, }; var finder = new HotfixVersionFinder { HotfixBranch = hotfixBranch, Commit = secondCommit, Repository = new MockRepository { Branches = new MockBranchCollection { new MockBranch("master") { branchingCommit }, hotfixBranch }, Tags = new MockTagCollection { new MockTag { TargetEx = branchingCommit, NameEx = "0.1.3-alpha5" } } }, }; var version = finder.FindVersion(); Assert.AreEqual(0, version.Version.Major); Assert.AreEqual(1, version.Version.Minor); Assert.AreEqual(3, version.Version.Patch); Assert.AreEqual(Stability.Alpha, version.Version.Stability); Assert.AreEqual(BranchType.Hotfix, version.BranchType); Assert.AreEqual(5, version.Version.PreReleasePartOne, "PreReleasePartOne should be 5 from the tag"); Assert.AreEqual(2, version.Version.PreReleasePartTwo, "PreReleasePartTwo should be set to 2 since there is 2 commits on the branch"); }
public void Multiple_minor_versions_on_master() { var commitOneOnDevelop = new MockCommit { CommitterEx = 1.Seconds().Ago().ToSignature() }; var commitTwoOnDevelop = new MockCommit { CommitterEx = 1.Seconds().Ago().ToSignature() }; var commitOneOnMaster = new MockCommit { CommitterEx = 4.Seconds().Ago().ToSignature(), }; var commitTwoOnMaster = new MockCommit { CommitterEx = 3.Seconds().Ago().ToSignature(), }; var commitThreeOnMaster = new MockCommit { CommitterEx = 2.Seconds().Ago().ToSignature(), }; var finder = new DevelopVersionFinder { Repository = new MockRepository { Branches = new MockBranchCollection { new MockBranch("master") { commitThreeOnMaster, commitTwoOnMaster, commitOneOnMaster, }, new MockBranch("develop") { commitTwoOnDevelop, commitOneOnDevelop } }, Tags = new MockTagCollection { new MockTag { TargetEx = commitOneOnMaster, NameEx = "0.2.0" }, new MockTag { TargetEx = commitTwoOnMaster, NameEx = "0.3.0" }, new MockTag { TargetEx = commitThreeOnMaster, NameEx = "0.3.3" } } }, Commit = commitTwoOnDevelop }; var version = finder.FindVersion(); Assert.AreEqual(0, version.Version.Major); Assert.AreEqual(4, version.Version.Minor, "Minor should be master.Minor+1"); Assert.AreEqual(0, version.Version.Patch); Assert.AreEqual(Stability.Unstable, version.Version.Stability); Assert.AreEqual(BranchType.Develop, version.BranchType); Assert.AreEqual(2, version.Version.PreReleasePartOne, "Prerelease should to the number of commits ahead of master(by date)"); }
public void Release_merge() { var commit = new MockCommit { CommitterEx = 2.Seconds().Ago().ToSignature(), MessageEx = "Merge branch 'release-0.2.0'" }; var finder = new MasterVersionFinder { Repository = new MockRepository { Branches = new MockBranchCollection { new MockBranch("master") { commit }, }, }, Commit = commit }; var version = finder.FindVersion(); Assert.AreEqual(0, version.Version.Major); Assert.AreEqual(2, version.Version.Minor); Assert.AreEqual(0, version.Version.Patch, "Should set the patch version to 0"); Assert.AreEqual(Stability.Final, version.Version.Stability); Assert.AreEqual(BranchType.Master, version.BranchType); Assert.IsNull(version.Version.PreReleasePartOne); }
public void Feature_branch_with_no_commit() { //this scenario should redirect to the develop finder since there is no diff btw this branch and the develop branch var branchingCommit = new MockCommit { CommitterEx = 1.Seconds().Ago().ToSignature(), }; var featureBranch = new MockBranch("featureWithNoCommits") { branchingCommit }; var finder = new FeatureVersionFinder { Repository = new MockRepository { Branches = new MockBranchCollection { new MockBranch("master") { new MockCommit { MessageEx = "Merge branch 'release-0.2.0'", CommitterEx = 3.Seconds().Ago().ToSignature() } }, featureBranch, new MockBranch("develop") { branchingCommit, new MockCommit { CommitterEx = 2.Seconds().Ago().ToSignature() } } } }, Commit = branchingCommit, FeatureBranch = featureBranch, FindFirstCommitOnBranchFunc = () => branchingCommit.Id }; var version = finder.FindVersion(); Assert.AreEqual(0, version.Version.Major); Assert.AreEqual(3, version.Version.Minor, "Minor should be master.Minor+1"); Assert.AreEqual(0, version.Version.Patch); Assert.AreEqual(Stability.Unstable, version.Version.Stability); Assert.AreEqual(BranchType.Feature, version.BranchType); Assert.AreEqual(null, version.Version.Suffix); Assert.AreEqual(2, version.Version.PreReleasePartOne, "Should be the number of commits ahead of master"); }
static void AssertMergeMessage(string message, string expectedVersion, List<Commit> parents) { var commit = new MockCommit { MessageEx = message, ParentsEx = parents }; var context = new GitVersionContextBuilder() .WithRepository(new MockRepository { Head = new MockBranch("master") { commit, new MockCommit() } }) .Build(); var sut = new MergeMessageBaseVersionStrategy(); var baseVersion = sut.GetVersions(context).SingleOrDefault(); if (expectedVersion == null) { baseVersion.ShouldBe(null); } else { baseVersion.SemanticVersion.ToString().ShouldBe(expectedVersion); } }
public void Override_stage_using_tag() { var branchingCommit = new MockCommit { MessageEx = "branching commit", }; var firstCommit = new MockCommit { MessageEx = "first commit on release", }; var releaseBranch = new MockBranch("release-0.4.0") { firstCommit, branchingCommit, }; var finder = new ReleaseVersionFinder { ReleaseBranch = releaseBranch, Commit = firstCommit, Repository = new MockRepository { Branches = new MockBranchCollection { new MockBranch("develop") { branchingCommit }, releaseBranch }, Tags = new MockTagCollection { new MockTag { TargetEx = branchingCommit, NameEx = "0.4.0-RC4" } } }, }; var version = finder.FindVersion(); //tag: 0.4.0-RC1 => Assert.AreEqual(0, version.Version.Major); Assert.AreEqual(4, version.Version.Minor); Assert.AreEqual(0, version.Version.Patch); Assert.AreEqual(Stability.ReleaseCandidate, version.Version.Stability); Assert.AreEqual(BranchType.Release, version.BranchType); Assert.AreEqual(4, version.Version.PreReleasePartOne); }
public void Should_throw_if_head_isnt_a_merge_commit_and_no_override_tag_is_found() { var commit = new MockCommit { MessageEx = "Not a merge commit", CommitterEx = 2.Seconds().Ago().ToSignature() }; var finder = new MasterVersionFinder(); var mockBranch = new MockBranch("master") { commit }; var mockRepository = new MockRepository { Branches = new MockBranchCollection { mockBranch, } }; var exception = Assert.Throws<WarningException>(() => { finder.FindVersion(new GitVersionContext(mockRepository, mockBranch, new Config())); }); Assert.AreEqual("The head of master should always be a merge commit if you follow gitflow. Please create one or work around this by tagging the commit with SemVer compatible Id.", exception.Message); }