github.com/chelnak/go-gh@v0.0.2/internal/git/git.go (about) 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 }