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); }
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"); }
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); }
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"); }
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); }
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}"); }