コード例 #1
0
        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);
            }
        }
コード例 #2
0
        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);
            }
        }
コード例 #3
0
    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);
    }
コード例 #4
0
ファイル: MasterTests.cs プロジェクト: unic/GitVersion
 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);
 }
コード例 #5
0
ファイル: MasterTests.cs プロジェクト: hbre/GitVersion
 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);
 }
コード例 #6
0
        public void VerifyNullGuard2()
        {
            var commit = new MockCommit();
            var sut    = new ShaVersionFilter(new[] { commit.Sha });

            Should.Throw <ArgumentNullException>(() => sut.Exclude(null, out _));
        }
コード例 #7
0
    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);
        }
    }
コード例 #8
0
    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);
    }
コード例 #9
0
 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);
 }
コード例 #10
0
 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);
 }
コード例 #11
0
    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);
    }
コード例 #12
0
    [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);
    }
コード例 #13
0
        public void VerifyNullGuard2()
        {
            var commit = new MockCommit();
            var sut = new ShaVersionFilter(new[] { commit.Sha });

            string reason;
            Should.Throw<ArgumentNullException>(() => sut.Exclude(null, out reason));
        }
コード例 #14
0
 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");
 }
コード例 #15
0
        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));
        }
コード例 #16
0
        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();
        }
コード例 #17
0
        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();
        }
コード例 #18
0
        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();
        }
コード例 #19
0
        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));
        }
コード例 #20
0
        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();
        }
コード例 #21
0
        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();
        }
コード例 #22
0
        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();
        }
コード例 #23
0
    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);
    }
コード例 #24
0
    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);
    }
コード例 #25
0
        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();
        }
コード例 #26
0
        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();
        }
コード例 #27
0
 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");
 }
コード例 #28
0
 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");
 }
コード例 #29
0
    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)");
    }
コード例 #30
0
    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");
    }
コード例 #31
0
    [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);
    }
コード例 #32
0
    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");
    }
コード例 #33
0
    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);
    }
コード例 #34
0
    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);
        }
    }
コード例 #35
0
    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);
        }
    }
コード例 #36
0
    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);
    }
コード例 #37
0
 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);
 }
コード例 #38
0
 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");
 }
コード例 #39
0
    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)");
    }
コード例 #40
0
 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);
 }
コード例 #41
0
    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");
    }
コード例 #42
0
        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);
            }
        }
コード例 #43
0
 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);
 }
コード例 #44
0
ファイル: MasterTests.cs プロジェクト: unic/GitVersion
    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);
    }
コード例 #45
0
    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);
    }