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:
parent
d9394234b9
commit
bd7704a5f0
1 changed files with 5 additions and 1 deletions
|
@ -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))
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue