package git import ( "bytes" "fmt" "os/exec" "github.com/cli/safeexec" ) func Exec(args ...string) (stdOut, stdErr bytes.Buffer, err error) { path, err := path() if err != nil { err = fmt.Errorf("could not find git executable in PATH. error: %w", err) return } return run(path, nil, args...) } func path() (string, error) { return safeexec.LookPath("git") } func run(path string, env []string, args ...string) (stdOut, stdErr bytes.Buffer, err error) { cmd := exec.Command(path, args...) cmd.Stdout = &stdOut cmd.Stderr = &stdErr if env != nil { cmd.Env = env } err = cmd.Run() if err != nil { err = fmt.Errorf("failed to run git: %s. error: %w", stdErr.String(), err) return } return }