mirror of
https://github.com/jesseduffield/lazygit.git
synced 2025-03-21 21:47:32 +02:00
simplify code for logging output of subprocess
This commit is contained in:
parent
c61bfbdd4c
commit
4a4dc676fc
@ -4,13 +4,13 @@ import (
|
|||||||
"bytes"
|
"bytes"
|
||||||
"io"
|
"io"
|
||||||
"math"
|
"math"
|
||||||
|
"os"
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
// "io"
|
// "io"
|
||||||
// "io/ioutil"
|
// "io/ioutil"
|
||||||
|
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"os"
|
|
||||||
"os/exec"
|
"os/exec"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
@ -697,7 +697,6 @@ func (gui *Gui) RunWithSubprocesses() error {
|
|||||||
} else if err == gui.Errors.ErrSwitchRepo {
|
} else if err == gui.Errors.ErrSwitchRepo {
|
||||||
continue
|
continue
|
||||||
} else if err == gui.Errors.ErrSubProcess {
|
} else if err == gui.Errors.ErrSubProcess {
|
||||||
gui.SubProcess.Stdin = os.Stdin
|
|
||||||
output, err := gui.runCommand(gui.SubProcess)
|
output, err := gui.runCommand(gui.SubProcess)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@ -715,37 +714,13 @@ func (gui *Gui) RunWithSubprocesses() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// adapted from https://blog.kowalczyk.info/article/wOYk/advanced-command-execution-in-go-with-osexec.html
|
|
||||||
func (gui *Gui) runCommand(cmd *exec.Cmd) (string, error) {
|
func (gui *Gui) runCommand(cmd *exec.Cmd) (string, error) {
|
||||||
var stdoutBuf bytes.Buffer
|
var stdoutBuf bytes.Buffer
|
||||||
stdoutIn, _ := cmd.StdoutPipe()
|
cmd.Stdout = io.MultiWriter(os.Stdout, &stdoutBuf)
|
||||||
stderrIn, _ := cmd.StderrPipe()
|
cmd.Stderr = io.MultiWriter(os.Stderr, &stdoutBuf)
|
||||||
|
cmd.Stdin = os.Stdin
|
||||||
|
|
||||||
stdout := io.MultiWriter(os.Stdout, &stdoutBuf)
|
if err := cmd.Run(); err != nil {
|
||||||
stderr := io.MultiWriter(os.Stderr, &stdoutBuf)
|
|
||||||
err := cmd.Start()
|
|
||||||
if err != nil {
|
|
||||||
return "", err
|
|
||||||
}
|
|
||||||
|
|
||||||
var wg sync.WaitGroup
|
|
||||||
wg.Add(1)
|
|
||||||
|
|
||||||
go func() {
|
|
||||||
if _, err := io.Copy(stdout, stdoutIn); err != nil {
|
|
||||||
gui.Log.Error(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
wg.Done()
|
|
||||||
}()
|
|
||||||
|
|
||||||
if _, err := io.Copy(stderr, stderrIn); err != nil {
|
|
||||||
return "", err
|
|
||||||
}
|
|
||||||
|
|
||||||
wg.Wait()
|
|
||||||
|
|
||||||
if err := cmd.Wait(); err != nil {
|
|
||||||
// not handling the error explicitly because usually we're going to see it
|
// not handling the error explicitly because usually we're going to see it
|
||||||
// in the output anyway
|
// in the output anyway
|
||||||
gui.Log.Error(err)
|
gui.Log.Error(err)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user