// doApiBatchRequest runs the request to the LFS batch API. If the API returns a // 401, the repo will be marked as having private access and the request will be // re-run. When the repo is marked as having private access, credentials will // be retrieved. func DoBatchRequest(cfg *config.Configuration, req *http.Request) (*http.Response, *batchResponse, error) { res, err := DoRequest(req, cfg.PrivateAccess(auth.GetOperationForRequest(req))) if err != nil { if res != nil && res.StatusCode == 401 { return res, nil, errors.NewAuthError(err) } return res, nil, err } resp := &batchResponse{} err = httputil.DecodeResponse(res, resp) if err != nil { httputil.SetErrorResponseContext(cfg, err, res) } return res, resp, err }
// Check the response from a HTTP request for problems func handleResponse(cfg *config.Configuration, res *http.Response, creds auth.Creds) error { auth.SaveCredentials(cfg, creds, res) if res.StatusCode < 400 { return nil } defer func() { io.Copy(ioutil.Discard, res.Body) res.Body.Close() }() cliErr := &ClientError{} err := DecodeResponse(res, cliErr) if err == nil { if len(cliErr.Message) == 0 { err = defaultError(res) } else { err = errors.Wrap(cliErr, "http") } } if res.StatusCode == 401 { if err == nil { err = errors.New("api: received status 401") } return errors.NewAuthError(err) } if res.StatusCode > 499 && res.StatusCode != 501 && res.StatusCode != 507 && res.StatusCode != 509 { if err == nil { err = errors.Errorf("api: received status %d", res.StatusCode) } return errors.NewFatalError(err) } return err }