summaryrefslogtreecommitdiffstats
path: root/pkg
diff options
context:
space:
mode:
authorJesse Duffield <jessedduffield@gmail.com>2019-05-18 11:28:07 +1000
committerJesse Duffield <jessedduffield@gmail.com>2019-05-18 11:30:10 +1000
commit4a4dc676fc5d70b5ac2a367fa00f0091955bfe6f (patch)
tree408928782cfec540b8785a42c9a420b1f85fc0db /pkg
parentc61bfbdd4cd46243ef6663533e0c9db05dd1f7bd (diff)
simplify code for logging output of subprocess
Diffstat (limited to 'pkg')
-rw-r--r--pkg/gui/gui.go35
1 files changed, 5 insertions, 30 deletions
diff --git a/pkg/gui/gui.go b/pkg/gui/gui.go
index 7ff601682..e3aea23cb 100644
--- a/pkg/gui/gui.go
+++ b/pkg/gui/gui.go
@@ -4,13 +4,13 @@ import (
"bytes"
"io"
"math"
+ "os"
"sync"
// "io"
// "io/ioutil"
"io/ioutil"
- "os"
"os/exec"
"strings"
"time"
@@ -697,7 +697,6 @@ func (gui *Gui) RunWithSubprocesses() error {
} else if err == gui.Errors.ErrSwitchRepo {
continue
} else if err == gui.Errors.ErrSubProcess {
- gui.SubProcess.Stdin = os.Stdin
output, err := gui.runCommand(gui.SubProcess)
if err != nil {
return err
@@ -715,37 +714,13 @@ func (gui *Gui) RunWithSubprocesses() error {
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) {
var stdoutBuf bytes.Buffer
- stdoutIn, _ := cmd.StdoutPipe()
- stderrIn, _ := cmd.StderrPipe()
-
- stdout := io.MultiWriter(os.Stdout, &stdoutBuf)
- 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()
+ cmd.Stdout = io.MultiWriter(os.Stdout, &stdoutBuf)
+ cmd.Stderr = io.MultiWriter(os.Stderr, &stdoutBuf)
+ cmd.Stdin = os.Stdin
- if err := cmd.Wait(); err != nil {
+ if err := cmd.Run(); err != nil {
// not handling the error explicitly because usually we're going to see it
// in the output anyway
gui.Log.Error(err)