From 36af65042c4d9eefe3b6f0a5a55b5d5ba44d3c30 Mon Sep 17 00:00:00 2001 From: Anton Medvedev Date: Fri, 22 Apr 2022 15:49:51 +0200 Subject: [PATCH] Refactor Reduce to also output extra text --- pkg/reducer/reduce.go | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/pkg/reducer/reduce.go b/pkg/reducer/reduce.go index aeaa333..e7da3fe 100644 --- a/pkg/reducer/reduce.go +++ b/pkg/reducer/reduce.go @@ -47,23 +47,23 @@ func Reduce(object interface{}, args []string, theme Theme) { panic("unknown lang") } - var stdout, stderr bytes.Buffer cmd.Stdin = strings.NewReader(Stringify(object)) - cmd.Stdout = &stdout - cmd.Stderr = &stderr - err := cmd.Run() + output, err := cmd.CombinedOutput() if err == nil { - dec := json.NewDecoder(&stdout) + dec := json.NewDecoder(bytes.NewReader(output)) dec.UseNumber() jsonObject, err := Parse(dec) - if err == nil { - if str, ok := jsonObject.(string); ok { - fmt.Println(str) - } else { - fmt.Println(PrettyPrint(jsonObject, 1, theme)) - } + if err != nil { + fmt.Print(string(output)) + return + } + if str, ok := jsonObject.(string); ok { + fmt.Println(str) } else { - _, _ = fmt.Fprint(os.Stderr, stderr.String()) + fmt.Println(PrettyPrint(jsonObject, 1, theme)) + } + if dec.InputOffset() < int64(len(output)) { + fmt.Print(string(output[dec.InputOffset():])) } } else { exitCode := 1 @@ -71,7 +71,7 @@ func Reduce(object interface{}, args []string, theme Theme) { if ok { exitCode = status.ExitCode() } - _, _ = fmt.Fprint(os.Stderr, stderr.String()) + fmt.Print(string(output)) os.Exit(exitCode) } }