示例#1
0
 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);
 }
示例#2
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);
    }
示例#3
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);
    }
        public void CanInheritVersioningMode(VersioningMode mode)
        {
            var config = new Config
            {
                VersioningMode = mode
            };

            config.Reset();

            var mockBranch = new MockBranch("master")
            {
                new MockCommit {
                    CommitterEx = Generate.SignatureNow()
                }
            };
            var mockRepository = new MockRepository
            {
                Branches = new MockBranchCollection
                {
                    mockBranch
                }
            };

            var context = new GitVersionContext(mockRepository, log, mockBranch, config);

            context.Configuration.VersioningMode.ShouldBe(mode);
        }
示例#5
0
        public void CanInheritVersioningMode(VersioningMode mode)
        {
            using var fixture = new EmptyRepositoryFixture();

            var config = new ConfigurationBuilder()
                         .Add(new Config {
                VersioningMode = mode
            })
                         .Build();

            var branchName = "master";
            var mockBranch = new MockBranch(branchName)
            {
                new MockCommit {
                    CommitterEx = Generate.SignatureNow()
                }
            };
            var mockRepository = new MockRepository
            {
                Head     = mockBranch,
                Branches = new MockBranchCollection
                {
                    mockBranch
                }
            };

            var context = GetGitVersionContext(fixture.RepositoryPath, mockRepository, branchName, config);

            context.Configuration.VersioningMode.ShouldBe(mode);
        }
示例#6
0
        public void CanInheritVersioningMode(VersioningMode mode)
        {
            var config = new Config
            {
                VersioningMode = mode
            };

            ConfigurationProvider.ApplyDefaultsTo(config);

            var mockBranch = new MockBranch("master")
            {
                new MockCommit {
                    CommitterEx = Generate.SignatureNow()
                }
            };
            var mockRepository = new MockRepository
            {
                Branches = new MockBranchCollection
                {
                    mockBranch
                }
            };

            var context = new GitVersionContext(mockRepository, new NullLog(), mockBranch, config);

            context.Configuration.VersioningMode.ShouldBe(mode);
        }
 public void UsesBranchSpecificConfigOverTopLevelDefaults()
 {
     var config = new Config
     {
         VersioningMode = VersioningMode.ContinuousDelivery,
         Branches =
         {
             {
                 "develop", new BranchConfig
                 {
                     VersioningMode = VersioningMode.ContinuousDeployment,
                     Tag = "alpha"
                 }
             }
         }
     };
     ConfigurationProvider.ApplyDefaultsTo(config);
     var develop = new MockBranch("develop") { new MockCommit { CommitterEx = Constants.SignatureNow() } };
     var mockRepository = new MockRepository
     {
         Branches = new MockBranchCollection
         {
             new MockBranch("master") { new MockCommit { CommitterEx = Constants.SignatureNow() } },
             develop
         }
     };
     var context = new GitVersionContext(mockRepository, develop, config);
     context.Configuration.Tag.ShouldBe("alpha");
 }
 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 UsesFirstBranchConfigWhenMultipleMatch()
        {
            var branchConfig = new BranchConfig
            {
                VersioningMode = VersioningMode.Mainline,
                Increment      = IncrementStrategy.None,
                PreventIncrementOfMergedBranchVersion = false,
                TrackMergeTarget      = false,
                TracksReleaseBranches = false,
                IsReleaseBranch       = false,
                SourceBranches        = new List <string>()
            };
            var config = new Config
            {
                VersioningMode = VersioningMode.ContinuousDelivery,
                Branches       =
                {
                    { "release/latest", new BranchConfig(branchConfig)
                        {
                            Increment = IncrementStrategy.None, Regex = "release/latest"
                        } },
                    { "release", new BranchConfig(branchConfig)
                        {
                            Increment = IncrementStrategy.Patch, Regex = "releases?[/-]"
                        } }
                }
            };

            var releaseLatestBranch = new MockBranch("release/latest")
            {
                new MockCommit {
                    CommitterEx = Generate.SignatureNow()
                }
            };
            var releaseVersionBranch = new MockBranch("release/1.0.0")
            {
                new MockCommit {
                    CommitterEx = Generate.SignatureNow()
                }
            };

            var mockRepository = new MockRepository
            {
                Branches = new MockBranchCollection
                {
                    releaseLatestBranch,
                    releaseVersionBranch
                },
                Head = releaseLatestBranch
            };

            var latestContext = GetGitVersionContext(mockRepository, releaseLatestBranch.CanonicalName, config);

            latestContext.Configuration.Increment.ShouldBe(IncrementStrategy.None);

            mockRepository.Head = releaseVersionBranch;
            var versionContext = GetGitVersionContext(mockRepository, releaseVersionBranch.CanonicalName, config);

            versionContext.Configuration.Increment.ShouldBe(IncrementStrategy.Patch);
        }
        public void UsesBranchSpecificConfigOverTopLevelDefaults()
        {
            var config = new Config
            {
                VersioningMode = VersioningMode.ContinuousDelivery
            };

            config.Branches["develop"].VersioningMode = VersioningMode.ContinuousDeployment;
            config.Branches["develop"].Tag            = "alpha";
            var develop = new MockBranch("develop")
            {
                new MockCommit {
                    CommitterEx = SignatureBuilder.SignatureNow()
                }
            };
            var mockRepository = new MockRepository
            {
                Branches = new MockBranchCollection
                {
                    new MockBranch("master")
                    {
                        new MockCommit {
                            CommitterEx = SignatureBuilder.SignatureNow()
                        }
                    },
                    develop
                }
            };
            var context = new GitVersionContext(mockRepository, develop, config);

            context.Configuration.Tag.ShouldBe("alpha");
        }
示例#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);
    }
 public GitVersionContextBuilder AddBranch(string branchName)
 {
     var mockBranch = new MockBranch(branchName)
     {
         new MockCommit()
     };
     ((MockBranchCollection)repository.Branches).Add(mockBranch);
     ((MockRepository)repository).Head = mockBranch;
     return this;
 }
    public void Feature_branch_with_1_commit()
    {
        var branchingCommit = new MockCommit
                              {
                                  CommitterEx = 1.Seconds().Ago().ToSignature(),
                              };
        var commitOneOnFeature = new MockCommit
                                 {
                                     CommitterEx = 1.Seconds().Ago().ToSignature(),
                                 };
        var featureBranch = new MockBranch("featureWithNoCommits")
                            {
                                branchingCommit,
                                commitOneOnFeature
                            };

        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 = commitOneOnFeature,
                         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");
    }
示例#14
0
        private GitVersionContextBuilder AddBranch(string branchName)
        {
            var mockBranch = new MockBranch(branchName)
            {
                new MockCommit()
            };

            ((MockBranchCollection)repository.Branches).Add(mockBranch);
            ((MockRepository)repository).Head = mockBranch;
            return(this);
        }
        IRepository CreateRepository()
        {
            var mockBranch = new MockBranch("master") { new MockCommit { CommitterEx = Constants.SignatureNow() } };
            var mockRepository = new MockRepository
            {
                Branches = new MockBranchCollection
                {
                    mockBranch
                },
                Tags = new MockTagCollection(),
                Head = mockBranch
            };

            return mockRepository;
        }
示例#16
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");
 }
示例#17
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");
 }
示例#18
0
        public void UsesBranchSpecificConfigOverTopLevelDefaults()
        {
            using var fixture = new EmptyRepositoryFixture();

            var branchName = "develop";
            var config     = new ConfigurationBuilder()
                             .Add(new Config
            {
                VersioningMode = VersioningMode.ContinuousDelivery,
                Branches       =
                {
                    {
                        branchName, new BranchConfig
                        {
                            VersioningMode = VersioningMode.ContinuousDeployment,
                            Tag            = "alpha"
                        }
                    }
                }
            })
                             .Build();

            var develop = new MockBranch(branchName)
            {
                new MockCommit {
                    CommitterEx = Generate.SignatureNow()
                }
            };
            var mockRepository = new MockRepository
            {
                Head     = develop,
                Branches = new MockBranchCollection
                {
                    new MockBranch("master")
                    {
                        new MockCommit {
                            CommitterEx = Generate.SignatureNow()
                        }
                    },
                    develop
                }
            };

            var context = GetGitVersionContext(fixture.RepositoryPath, mockRepository, branchName, config);

            context.Configuration.Tag.ShouldBe("alpha");
        }
    public void ShouldFindMergeCommit()
    {
        var currentBranch = new MockBranch("master")
        {
            new MockCommit(),
            new MockCommit(),
            new MockMergeCommit
            {
                MessageEx = "Merge branch 'release-2.0.0'"
            }
        };
        var sut = new MergedBranchesWithVersionFinder(new GitVersionContext(null, currentBranch));

        var version = sut.GetVersion();

        version.ToString().ShouldBe("2.0.0");
    }
        private Core.Pipeline.Pipeline MockPipeline(params GroupDefinition[] groupDefinitions)
        {
            var treeBuilder = TreeBuilderTests.Construct(groupDefinitions);

            var masterBranch      = new MockBranch("master");
            var ciDefinition      = new MockBuildDefinition("1", "ci");
            var stageBranch       = new MockBranch("stage");
            var nightlyDefinition = new MockBuildDefinition("2", "nightly");

            var branches    = new[] { masterBranch, stageBranch };
            var definitions = new[] { ciDefinition, nightlyDefinition };

            var b1 = Substitute.For <IBuild>();

            b1.Id.Returns("1");
            b1.Definition.Returns(nightlyDefinition);
            b1.BranchName.Returns("stage");

            var b2 = Substitute.For <IBuild>();

            b2.Id.Returns("2");
            b2.Definition.Returns(nightlyDefinition);
            b2.BranchName.Returns("master");

            var buildProvider = Substitute.For <IBuildProvider>();

            buildProvider.FetchAllBuilds().Returns(x => b1.AsyncYield());
            buildProvider.FetchBuildsChangedSince(Arg.Any <DateTime>()).Returns(x => b2.AsyncYield());
            buildProvider.FetchExistingBuildDefinitions().Returns(x => ToAsync(definitions));

            var branchProvider = Substitute.For <IBranchProvider>();

            branchProvider.FetchExistingBranches().Returns(x => ToAsync(branches));

            var configuration = Substitute.For <IConfiguration>();

            configuration.BuildsToShow.Returns(int.MaxValue);
            var userIdentityList = Substitute.For <IUserIdentityList>();
            var pipeline         = new Core.Pipeline.Pipeline(treeBuilder, configuration, userIdentityList);

            var project = new Project(buildProvider, branchProvider, Substitute.For <IProjectConfiguration>());

            pipeline.AddProject(project);

            return(pipeline);
        }
        public void ShouldFindMergeCommit()
        {
            var currentBranch = new MockBranch("master")
            {
                new MockCommit(),
                new MockCommit(),
                new MockMergeCommit()
                {
                    MessageEx = "Merge branch 'release-2.0.0'"
                }
            };
            var sut = new MergedBranchesWithVersionFinder(new GitVersionContext(null, currentBranch));

            var version = sut.GetVersion();

            version.ToString().ShouldBe("2.0.0");
        }
示例#22
0
        public void UsesFirstBranchConfigWhenMultipleMatch()
        {
            var config = new Config
            {
                VersioningMode = VersioningMode.ContinuousDelivery,
                Branches       =
                {
                    { "release/latest", new BranchConfig {
                          Increment = IncrementStrategy.None, Regex = "release/latest", SourceBranches = new List <string>()
                      } },
                    { "release",        new BranchConfig {
                          Increment = IncrementStrategy.Patch, Regex = "releases?[/-]", SourceBranches = new List <string>()
                      } }
                }
            }.ApplyDefaults();

            var releaseLatestBranch = new MockBranch("release/latest")
            {
                new MockCommit {
                    CommitterEx = Generate.SignatureNow()
                }
            };
            var releaseVersionBranch = new MockBranch("release/1.0.0")
            {
                new MockCommit {
                    CommitterEx = Generate.SignatureNow()
                }
            };

            var mockRepository = new MockRepository
            {
                Branches = new MockBranchCollection
                {
                    releaseLatestBranch,
                    releaseVersionBranch
                }
            };

            var latestContext = new GitVersionContext(mockRepository, new NullLog(), releaseLatestBranch, config);

            latestContext.Configuration.Increment.ShouldBe(IncrementStrategy.None);

            var versionContext = new GitVersionContext(mockRepository, new NullLog(), releaseVersionBranch, config);

            versionContext.Configuration.Increment.ShouldBe(IncrementStrategy.Patch);
        }
示例#23
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");
    }
示例#24
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);
    }
示例#25
0
    public void ShouldFindMergeCommit()
    {
        var currentBranch = new MockBranch("master")
        {
            new MockCommit(),
            new MockCommit(),
            new MockMergeCommit
            {
                MessageEx = "Merge branch 'release-2.0.0'"
            }
        };
        var sut = new MergedBranchesWithVersionFinder(new GitVersionContext(null, currentBranch, new Config()));

        SemanticVersion version;

        sut.TryGetVersion(out version);

        version.ToString().ShouldBe("2.0.0");
    }
示例#26
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");
    }
示例#27
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);
    }
        public void CanInheritVersioningMode(VersioningMode mode)
        {
            var config = new Config
            {
                VersioningMode = mode
            };

            var mockBranch = new MockBranch("master") { new MockCommit { CommitterEx = SignatureBuilder.SignatureNow() } };
            var mockRepository = new MockRepository
            {
                Branches = new MockBranchCollection
                {
                    mockBranch
                }
            };

            var context = new GitVersionContext(mockRepository, mockBranch, config);
            context.Configuration.VersioningMode.ShouldBe(mode);
        }
 public void UsesBranchSpecificConfigOverTopLevelDefaults()
 {
     var config = new Config
     {
         VersioningMode = VersioningMode.ContinuousDelivery
     };
     config.Branches["develop"].VersioningMode = VersioningMode.ContinuousDeployment;
     config.Branches["develop"].Tag = "alpha";
     var develop = new MockBranch("develop") { new MockCommit { CommitterEx = SignatureBuilder.SignatureNow() } };
     var mockRepository = new MockRepository
     {
         Branches = new MockBranchCollection
         {
             new MockBranch("master") { new MockCommit { CommitterEx = SignatureBuilder.SignatureNow() } },
             develop
         }
     };
     var context = new GitVersionContext(mockRepository, develop, config);
     context.Configuration.Tag.ShouldBe("alpha");
 }
示例#30
0
        private static IRepository CreateRepository()
        {
            var mockBranch = new MockBranch("master")
            {
                new MockCommit {
                    CommitterEx = Generate.SignatureNow()
                }
            };
            var mockRepository = new MockRepository
            {
                Branches = new MockBranchCollection
                {
                    mockBranch
                },
                Tags = new MockTagCollection(),
                Head = mockBranch
            };

            return(mockRepository);
        }
示例#31
0
        public void UsesBranchSpecificConfigOverTopLevelDefaults()
        {
            var config = new Config
            {
                VersioningMode = VersioningMode.ContinuousDelivery,
                Branches       =
                {
                    {
                        "develop", new BranchConfig
                        {
                            VersioningMode = VersioningMode.ContinuousDeployment,
                            Tag            = "alpha"
                        }
                    }
                }
            };

            ConfigurationProvider.ApplyDefaultsTo(config);
            var develop = new MockBranch("develop")
            {
                new MockCommit {
                    CommitterEx = Generate.SignatureNow()
                }
            };
            var mockRepository = new MockRepository
            {
                Branches = new MockBranchCollection
                {
                    new MockBranch("master")
                    {
                        new MockCommit {
                            CommitterEx = Generate.SignatureNow()
                        }
                    },
                    develop
                }
            };
            var context = new GitVersionContext(mockRepository, new NullLog(), develop, config);

            context.Configuration.Tag.ShouldBe("alpha");
        }
示例#32
0
    public void Hotfix_merge()
    {
        var hotfixMergeCommit = new MockMergeCommit
                         {
                             MessageEx = "Merge branch 'hotfix-0.1.5'",
                             CommitterEx = 2.Seconds().Ago().ToSignature()
                         };
        var finder = new MasterVersionFinder();
        var mockBranch = new MockBranch("master")
        {
            hotfixMergeCommit
        };
        var mockRepository = new MockRepository
        {
            Branches = new MockBranchCollection
            {
                mockBranch,
            }
        };
        var version = finder.FindVersion(new GitVersionContext(mockRepository, mockBranch, new Config()));

        Assert.AreEqual(5, version.Patch, "Should set the patch version to the patch of the latest hotfix merge commit");
        ObjectApprover.VerifyWithJson(version, Scrubbers.GuidAndDateScrubber);
    }
示例#33
0
    public void Release_merge()
    {
        var commit = new MockMergeCommit
        {
            CommitterEx = 2.Seconds().Ago().ToSignature(),
            MessageEx   = "Merge branch 'release-0.2.0'"
        };
        var finder     = new MasterVersionFinder();
        var mockBranch = new MockBranch("master")
        {
            commit
        };
        var mockRepository = new MockRepository
        {
            Branches = new MockBranchCollection
            {
                mockBranch
            },
        };
        var version = finder.FindVersion(new GitVersionContext(mockRepository, mockBranch, new Config()));

        Assert.AreEqual(0, version.Patch, "Should set the patch version to 0");
        ObjectApprover.VerifyWithJson(version, Scrubbers.GuidAndDateScrubber);
    }
示例#34
0
    public void Hotfix_merge()
    {
        var hotfixMergeCommit = new MockMergeCommit
        {
            MessageEx   = "Merge branch 'hotfix-0.1.5'",
            CommitterEx = 2.Seconds().Ago().ToSignature()
        };
        var finder     = new MasterVersionFinder();
        var mockBranch = new MockBranch("master")
        {
            hotfixMergeCommit
        };
        var mockRepository = new MockRepository
        {
            Branches = new MockBranchCollection
            {
                mockBranch,
            }
        };
        var version = finder.FindVersion(new GitVersionContext(mockRepository, mockBranch, new Config()));

        Assert.AreEqual(5, version.Patch, "Should set the patch version to the patch of the latest hotfix merge commit");
        ObjectApprover.VerifyWithJson(version, Scrubbers.GuidAndDateScrubber);
    }
示例#35
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);
 }
示例#36
0
 public void Release_merge()
 {
     var commit = new MockMergeCommit
     {
         CommitterEx = 2.Seconds().Ago().ToSignature(),
         MessageEx = "Merge branch 'release-0.2.0'"
     };
     var finder = new MasterVersionFinder();
     var mockBranch = new MockBranch("master")
     {
         commit
     };
     var mockRepository = new MockRepository
     {
         Branches = new MockBranchCollection
         {
             mockBranch
         },
     };
     var version = finder.FindVersion(new GitVersionContext(mockRepository, mockBranch, new Config()));
     Assert.AreEqual(0, version.Patch, "Should set the patch version to 0");
     ObjectApprover.VerifyWithJson(version, Scrubbers.GuidAndDateScrubber);
 }
示例#37
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);
    }
    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");
    }
示例#39
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");
 }
        public void UsesFirstBranchConfigWhenMultipleMatch()
        {
            var config = new Config
            {
                VersioningMode = VersioningMode.ContinuousDelivery,
                Branches =
                {
                    { "release/latest", new BranchConfig { Increment = IncrementStrategy.None, Regex = "release/latest" } },
                    { "release", new BranchConfig { Increment = IncrementStrategy.Patch, Regex = "releases?[/-]" } }
                }
            }.ApplyDefaults();

            var releaseLatestBranch = new MockBranch("release/latest") { new MockCommit { CommitterEx = Generate.SignatureNow() } };
            var releaseVersionBranch = new MockBranch("release/1.0.0") { new MockCommit { CommitterEx = Generate.SignatureNow() } };

            var mockRepository = new MockRepository
            {
                Branches = new MockBranchCollection
                {
                    releaseLatestBranch,
                    releaseVersionBranch
                }
            };

            var latestContext = new GitVersionContext(mockRepository, releaseLatestBranch, config);
            latestContext.Configuration.Increment.ShouldBe(IncrementStrategy.None);

            var versionContext = new GitVersionContext(mockRepository, releaseVersionBranch, config);
            versionContext.Configuration.Increment.ShouldBe(IncrementStrategy.Patch);
        }