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  }