diff options
author | Paulo Gomes <pjbgf@linux.com> | 2023-09-05 18:55:40 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-09-05 18:55:40 +0100 |
commit | 51e9c9f1d9261568573a8b4bd50e8694e14839f7 (patch) | |
tree | a12dba0543219d1f123f0266b7928f210669d96c /plumbing/transport/http/common.go | |
parent | 0377d0627fa4e32a576634f441e72153807e395a (diff) | |
parent | 5ad72db3bd60351da9ab42727952654e3ad5bcb2 (diff) | |
download | go-git-51e9c9f1d9261568573a8b4bd50e8694e14839f7.tar.gz |
Merge pull request #835 from matejrisek/feature/do-not-swallow-vcs-host-errors
plumbing: Do not swallow http message coming from VCS providers
Diffstat (limited to 'plumbing/transport/http/common.go')
-rw-r--r-- | plumbing/transport/http/common.go | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/plumbing/transport/http/common.go b/plumbing/transport/http/common.go index a7cdc1e..54126fe 100644 --- a/plumbing/transport/http/common.go +++ b/plumbing/transport/http/common.go @@ -406,14 +406,28 @@ func (a *TokenAuth) String() string { // Err is a dedicated error to return errors based on status code type Err struct { Response *http.Response + Reason string } -// NewErr returns a new Err based on a http response +// NewErr returns a new Err based on a http response and closes response body +// if needed func NewErr(r *http.Response) error { if r.StatusCode >= http.StatusOK && r.StatusCode < http.StatusMultipleChoices { return nil } + var reason string + + // If a response message is present, add it to error + var messageBuffer bytes.Buffer + if r.Body != nil { + messageLength, _ := messageBuffer.ReadFrom(r.Body) + if messageLength > 0 { + reason = messageBuffer.String() + } + _ = r.Body.Close() + } + switch r.StatusCode { case http.StatusUnauthorized: return transport.ErrAuthenticationRequired @@ -423,7 +437,7 @@ func NewErr(r *http.Response) error { return transport.ErrRepositoryNotFound } - return plumbing.NewUnexpectedError(&Err{r}) + return plumbing.NewUnexpectedError(&Err{r, reason}) } // StatusCode returns the status code of the response |