From f8a69a8ca1a4a6a682c900633cacb2ef8c061762 Mon Sep 17 00:00:00 2001 From: Jason Hall Date: Sun, 25 Oct 2020 13:00:51 -0400 Subject: [PATCH] Report errors to clients --- pkg/run/run.go | 13 ++++++++++--- pkg/serve/error.go | 3 +-- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/pkg/run/run.go b/pkg/run/run.go index fc3e0dc..aa21b5f 100644 --- a/pkg/run/run.go +++ b/pkg/run/run.go @@ -1,13 +1,20 @@ package run import ( + "bytes" + "fmt" "io" "os/exec" ) func Do(stdout io.Writer, command string) error { + var out bytes.Buffer cmd := exec.Command("/bin/sh", "-c", command) - cmd.Stdout = stdout - cmd.Stderr = stdout - return cmd.Run() + cmd.Stdout = io.MultiWriter(stdout, &out) + cmd.Stderr = io.MultiWriter(stdout, &out) + if err := cmd.Run(); err != nil { + return fmt.Errorf("Error running %q: %s\n=====Command output=====\n%s", command, err, string(out.Bytes())) + return err + } + return nil } diff --git a/pkg/serve/error.go b/pkg/serve/error.go index 7ffe3dd..42f1975 100644 --- a/pkg/serve/error.go +++ b/pkg/serve/error.go @@ -15,7 +15,7 @@ var ( func Error(w http.ResponseWriter, err error) { code := "INTERNAL_ERROR" - httpCode := http.StatusInternalServerError + httpCode := http.StatusNotFound if terr, ok := err.(*transport.Error); ok { http.Error(w, "", terr.StatusCode) json.NewEncoder(w).Encode(terr.Errors) @@ -24,7 +24,6 @@ func Error(w http.ResponseWriter, err error) { if err == ErrNotFound { code = "MANIFEST_UNKNOWN" - httpCode = http.StatusNotFound } else if err == ErrInvalid { code = "NAME_INVALID" httpCode = http.StatusBadRequest