From af01eeb67edc8f57ded1e446419d830d6cf15be0 Mon Sep 17 00:00:00 2001 From: Michelle Noorali Date: Tue, 29 Mar 2016 14:54:59 -0600 Subject: [PATCH] ref(client): return cleaner errors --- cmd/helm/repository.go | 1 - pkg/client/client.go | 30 +++++++++++++++++++++++------- 2 files changed, 23 insertions(+), 8 deletions(-) diff --git a/cmd/helm/repository.go b/cmd/helm/repository.go index 9ff75eb07..549a39f46 100644 --- a/cmd/helm/repository.go +++ b/cmd/helm/repository.go @@ -83,7 +83,6 @@ func addRepo(c *cli.Context) error { payload, _ := json.Marshal(repo.Repo{URL: repoURL, Name: name}) msg := "" if _, err := NewClient(c).Post(chartRepoPath, payload, &msg); err != nil { - //TODO: Return more specific errors to the user return err } format.Info(name + " has been added to your chart repositories!") diff --git a/pkg/client/client.go b/pkg/client/client.go index 0ddfc0782..5bd593060 100644 --- a/pkg/client/client.go +++ b/pkg/client/client.go @@ -27,6 +27,7 @@ import ( "strings" "time" + "github.com/kubernetes/helm/pkg/httputil" "github.com/kubernetes/helm/pkg/version" ) @@ -221,16 +222,31 @@ func (r *Response) Success() bool { // HTTPError creates a new HTTPError from response func (r *Response) HTTPError() error { + contentType := r.Header.Get("Content-Type") + defer r.Body.Close() body, err := ioutil.ReadAll(r.Body) - if err != nil { - return err - } - return &HTTPError{ - StatusCode: r.StatusCode, - Message: string(body), - URL: r.Request.URL, + + if contentType == "application/json" { + httpErr := httputil.Error{} + json.Unmarshal(body, &httpErr) + return &HTTPError{ + StatusCode: r.StatusCode, + Message: httpErr.Msg, + URL: r.Request.URL, + } + } else { + if err != nil { + return err + } + return &HTTPError{ + StatusCode: r.StatusCode, + Message: string(body), + URL: r.Request.URL, + } } + + return nil } // HTTPError is an error caused by an unexpected HTTP status code.