...
1 package git
2
3 import (
4 "bytes"
5 "fmt"
6 "os/exec"
7
8 "github.com/cli/safeexec"
9 )
10
11 func Exec(args ...string) (stdOut, stdErr bytes.Buffer, err error) {
12 path, err := path()
13 if err != nil {
14 err = fmt.Errorf("could not find git executable in PATH. error: %w", err)
15 return
16 }
17 return run(path, nil, args...)
18 }
19
20 func path() (string, error) {
21 return safeexec.LookPath("git")
22 }
23
24 func run(path string, env []string, args ...string) (stdOut, stdErr bytes.Buffer, err error) {
25 cmd := exec.Command(path, args...)
26 cmd.Stdout = &stdOut
27 cmd.Stderr = &stdErr
28 if env != nil {
29 cmd.Env = env
30 }
31 err = cmd.Run()
32 if err != nil {
33 err = fmt.Errorf("failed to run git: %s. error: %w", stdErr.String(), err)
34 return
35 }
36 return
37 }
38
View as plain text