cloudflare/pint

Public

mirrored from https://github.com/cloudflare/pintAvailable

CodeCommitsIssuesPull requestsActionsInsightsSecurity
v0.81.0

Branches

Tags

  • No tags available.
0Branches0Tags
Go to file
Add file
Code

Clone

HTTPS

Download ZIP

internal/git/git.go

51lines · modecode

1package git
2
3import (
4 "bytes"
5 "context"
6 "errors"
7 "log/slog"
8 "os/exec"
9 "strings"
10)
11
12type CommandRunner func(args ...string) ([]byte, error)
13
14func RunGit(args ...string) (content []byte, err error) {
15 slog.LogAttrs(context.Background(), slog.LevelDebug, "Running git command", slog.Any("args", args))
16 cmd := exec.Command("git", args...)
17 var stdout, stderr bytes.Buffer
18 cmd.Stdout = &stdout
19 cmd.Stderr = &stderr
20 if err = cmd.Run(); err != nil {
21 if stderr.Len() > 0 {
22 return nil, errors.New(stderr.String())
23 }
24 return nil, err
25 }
26 return stdout.Bytes(), nil
27}
28
29func HeadCommit(cmd CommandRunner) (string, error) {
30 commit, err := cmd("rev-parse", "--verify", "HEAD")
31 if err != nil {
32 return "", err
33 }
34 return strings.Trim(string(commit), "\n"), nil
35}
36
37func CurrentBranch(cmd CommandRunner) (string, error) {
38 commit, err := cmd("rev-parse", "--abbrev-ref", "HEAD")
39 if err != nil {
40 return "", err
41 }
42 return strings.Trim(string(commit), "\n"), nil
43}
44
45func CommitMessage(cmd CommandRunner, sha string) (string, error) {
46 msg, err := cmd("show", "-s", "--format=%B", sha)
47 if err != nil {
48 return "", err
49 }
50 return string(msg), err
51}
52