Client: handle 409 HTTP code

necessary as POST /api/v1/releases returns no HTTP body for a 409 request,
eg when the target_comitish already has a release.

The underlying problem is bigger:
The Client cannot handle error responses which do not contain a valid
JSON body.
This commit is contained in:
Norwin Roosen 2018-12-04 22:57:38 +01:00
parent d9394234b9
commit bd7704a5f0

View file

@ -70,6 +70,8 @@ func (c *Client) getResponse(method, path string, header http.Header, body io.Re
return nil, errors.New("403 Forbidden") return nil, errors.New("403 Forbidden")
case 404: case 404:
return nil, errors.New("404 Not Found") return nil, errors.New("404 Not Found")
case 409:
return nil, errors.New("409 Conflict")
case 422: case 422:
return nil, fmt.Errorf("422 Unprocessable Entity: %s", string(data)) return nil, fmt.Errorf("422 Unprocessable Entity: %s", string(data))
} }
@ -77,7 +79,9 @@ func (c *Client) getResponse(method, path string, header http.Header, body io.Re
if resp.StatusCode/100 != 2 { if resp.StatusCode/100 != 2 {
errMap := make(map[string]interface{}) errMap := make(map[string]interface{})
if err = json.Unmarshal(data, &errMap); err != nil { if err = json.Unmarshal(data, &errMap); err != nil {
return nil, err // when the JSON can't be parsed, data was probably empty or a plain string,
// so we try to return a helpful error anyway
return nil, fmt.Errorf("Unknown API Error: %d %s", resp.StatusCode, string(data))
} }
return nil, errors.New(errMap["message"].(string)) return nil, errors.New(errMap["message"].(string))
} }