Example #1
0
        public void ConventionalCommitParser_Parse_SuccessfullyParsesMultipleLineCommit(string message, bool hasScope, bool hasBreakingToken)
        {
            // given commit message does not meet conventional commit standards
            var commit = new Mock <Commit>();

            commit.Setup(x => x.Message).Returns(message);

            // when we parse commit message
            var parser = new ConventionalCommitParser();
            var conventionalCommits = parser.Parse(new[] { commit.Object });
            ConventionalCommit conventionalCommit = conventionalCommits.FirstOrDefault();

            var trailer = conventionalCommit.Trailers.FirstOrDefault();

            // then we return a null value
            Assert.NotNull(conventionalCommit);
            Assert.NotNull(conventionalCommit.Type);
            Assert.NotNull(conventionalCommit.Subject);

            if (hasScope)
            {
                Assert.NotNull(conventionalCommit.Scope);
            }

            if (hasBreakingToken)
            {
                Assert.True(conventionalCommit.HasBreakingToken);
            }

            Assert.NotEmpty(conventionalCommit.Trailers);
            Assert.NotNull(trailer);
            Assert.NotNull(trailer.Type);
            Assert.NotNull(trailer.Subject);
        }
Example #2
0
        public void ShouldBuildAHTTPSCommitLink()
        {
            var commit = new ConventionalCommit {
                Sha = "734713bc047d87bf7eac9674765ae793478c50d3"
            };

            var linkBuilder = new AzureLinkBuilder("https://[email protected]/dosse/DosSE.ERP.Cloud/_git/ERP.git");
            var link        = linkBuilder.BuildCommitLink(commit);

            link.ShouldBe("https://[email protected]/dosse/DosSE.ERP.Cloud/_git/ERP/commit/734713bc047d87bf7eac9674765ae793478c50d3");
        }
    public void ShouldBuildAHTTPSCommitLink()
    {
        var commit = new ConventionalCommit
        {
            Sha = "734713bc047d87bf7eac9674765ae793478c50d3"
        };

        var linkBuilder = new GitlabLinkBuilder(inkscapeHTTPS);
        var link        = linkBuilder.BuildCommitLink(commit);

        link.ShouldBe("https://gitlab.com/inkscape/inkscape/-/commit/734713bc047d87bf7eac9674765ae793478c50d3");
    }
Example #4
0
    public static ConventionalCommit Parse(Commit commit)
    {
        var conventionalCommit = new ConventionalCommit
        {
            Sha = commit.Sha
        };

        var commitMessageLines = commit.Message.Split(
            new[] { "\r\n", "\r", "\n" },
            StringSplitOptions.None
            )
                                 .Select(line => line.Trim())
                                 .Where(line => !string.IsNullOrWhiteSpace(line))
                                 .ToList();

        var header = commitMessageLines.FirstOrDefault();

        if (header == null)
        {
            return(conventionalCommit);
        }

        var match = HeaderPattern.Match(header);

        if (match.Success)
        {
            conventionalCommit.Scope   = match.Groups["scope"].Value;
            conventionalCommit.Type    = match.Groups["type"].Value;
            conventionalCommit.Subject = match.Groups["subject"].Value;
        }
        else
        {
            conventionalCommit.Subject = header;
        }

        for (var i = 1; i < commitMessageLines.Count; i++)
        {
            foreach (var noteKeyword in NoteKeywords)
            {
                var line = commitMessageLines[i];
                if (line.StartsWith($"{noteKeyword}:"))
                {
                    conventionalCommit.Notes.Add(new ConventionalCommitNote
                    {
                        Title = noteKeyword,
                        Text  = line.Substring($"{noteKeyword}:".Length).TrimStart()
                    });
                }
            }
        }

        return(conventionalCommit);
    }
Example #5
0
    public void ShouldBuildAnOrgSSHCommitLink()
    {
        var commit = new ConventionalCommit
        {
            Sha = "734713bc047d87bf7eac9674765ae793478c50d3"
        };

        var linkBuilder = new BitbucketLinkBuilder(sshOrgPushUrl);
        var link        = linkBuilder.BuildCommitLink(commit);

        link.ShouldBe("https://bitbucket.org/mobiloitteinc/dotnet-codebase/commits/734713bc047d87bf7eac9674765ae793478c50d3");
    }
Example #6
0
        public void ConventionalCommitParser_Parse_FailsToParseSingleLineCommit()
        {
            // given commit message does not meet conventional commit standards
            var commit = new Mock <Commit>();

            commit.Setup(x => x.Message).Returns("This is a failure test.");

            // when we parse commit message
            var parser = new ConventionalCommitParser();
            var conventionalCommits = parser.Parse(new[] { commit.Object });
            ConventionalCommit conventionalCommit = conventionalCommits.FirstOrDefault();

            // then we return a null value
            Assert.Null(conventionalCommit);
        }
    public static string BuildCommit(ConventionalCommit commit, IChangelogLinkBuilder linkBuilder)
    {
        var sb = new StringBuilder("* ");

        if (!string.IsNullOrWhiteSpace(commit.Scope))
        {
            sb.Append($"**{commit.Scope}:** ");
        }

        sb.Append(commit.Subject);

        var commitLink = linkBuilder.BuildCommitLink(commit);

        if (!string.IsNullOrWhiteSpace(commitLink))
        {
            sb.Append($" ([{commit.Sha.Substring(0, 7)}]({commitLink}))");
        }

        return(sb.ToString());
    }
        private void AppendChangelogMessage(ConventionalCommit conventionalCommit, IDictionary <string, IDictionary <string, ICollection <string> > > changelogMessages)
        {
            if (!changelogMessages.TryGetValue(conventionalCommit.Type, out var typeCollection))
            {
                typeCollection = new Dictionary <string, ICollection <string> >();
                changelogMessages.Add(conventionalCommit.Type, typeCollection);
            }

            var scope = conventionalCommit.Scope;

            if (string.IsNullOrEmpty(scope))
            {
                scope = "_General";
            }

            if (!typeCollection.TryGetValue(scope, out var scopeCollection))
            {
                scopeCollection = new List <string>();
                typeCollection.Add(scope, scopeCollection);
            }

            scopeCollection.Add(conventionalCommit.Subject);
        }
Example #9
0
 public string BuildCommitLink(ConventionalCommit commit)
 {
     return($"https://www.github.com/{_organization}/{_repository}/commit/{commit.Sha}");
 }
 public string BuildCommitLink(ConventionalCommit commit)
 {
     return(string.Empty);
 }
 public string BuildCommitLink(ConventionalCommit commit)
 {
     return($"https://bitbucket.{_domain}/{_organization}/{_repository}/commits/{commit.Sha}");
 }