From 90fa2795ad177b9add2fe46382576993e96ece4b Mon Sep 17 00:00:00 2001 From: tjpcc Date: Sat, 16 Sep 2023 20:43:19 -0600 Subject: Initial commit Gemini repository browsing --- cmd.go | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 cmd.go (limited to 'cmd.go') diff --git a/cmd.go b/cmd.go new file mode 100644 index 0000000..fca36cb --- /dev/null +++ b/cmd.go @@ -0,0 +1,46 @@ +package syw + +import ( + "bytes" + "context" + "errors" + "os/exec" +) + +var gitbinpath string + +func findbin() string { + if gitbinpath == "" { + gitbinpath, _ = exec.LookPath("git") + if gitbinpath == "" { + panic("failed to find 'git' executable") + } + } + return gitbinpath +} + +func runCmd(ctx context.Context, args []string) (*cmdResult, error) { + cmd := exec.CommandContext(ctx, findbin(), args...) + + outbuf := &bytes.Buffer{} + cmd.Stdout = outbuf + errbuf := &bytes.Buffer{} + cmd.Stderr = errbuf + + var eerr *exec.ExitError + if err := cmd.Run(); err != nil && !errors.As(err, &eerr) { + return nil, err + } + + return &cmdResult{ + status: cmd.ProcessState.ExitCode(), + out: outbuf, + err: errbuf, + }, nil +} + +type cmdResult struct { + status int + out *bytes.Buffer + err *bytes.Buffer +} -- cgit v1.2.3