From 80c2f74093e9dad96ec26cec4ef7869762cbbb36 Mon Sep 17 00:00:00 2001 From: Dmitry Vyukov Date: Mon, 14 Oct 2024 18:09:12 +0200 Subject: pkg/vcs: expose commit patch Add Commit.Patch with patch body. --- pkg/vcs/git.go | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) (limited to 'pkg/vcs/git.go') diff --git a/pkg/vcs/git.go b/pkg/vcs/git.go index dd1681157..7425066d2 100644 --- a/pkg/vcs/git.go +++ b/pkg/vcs/git.go @@ -242,11 +242,25 @@ func (git *git) Contains(commit string) (bool, error) { } func (git *git) Commit(com string) (*Commit, error) { - output, err := git.git("log", "--format=%H%n%s%n%ae%n%an%n%ad%n%P%n%cd%n%b", "-n", "1", com) + const patchSeparator = "---===syzkaller-patch-separator===---" + output, err := git.git("log", "--format=%H%n%s%n%ae%n%an%n%ad%n%P%n%cd%n%b"+patchSeparator, + "-n", "1", "-p", "-U0", com) if err != nil { return nil, err } - return gitParseCommit(output, nil, nil, git.ignoreCC) + pos := bytes.Index(output, []byte(patchSeparator)) + if pos == -1 { + return nil, fmt.Errorf("git log output does not contain patch separator") + } + commit, err := gitParseCommit(output[:pos], nil, nil, git.ignoreCC) + if err != nil { + return nil, err + } + commit.Patch = output[pos+len(patchSeparator):] + for len(commit.Patch) != 0 && commit.Patch[0] == '\n' { + commit.Patch = commit.Patch[1:] + } + return commit, nil } func gitParseCommit(output, user, domain []byte, ignoreCC map[string]bool) (*Commit, error) { -- cgit mrf-deployment