// Execute implements the Lifecycle.Execute function. // // Internally, the *http.Client is used to execute the underlying *http.Request. // If the client returned an error corresponding to a failure to make the // request, then that error will be returned immediately, and the response is // guaranteed not to be serialized. // // Once the response has been gathered from the server, it is unmarshled into // the given `into interface{}` which is identical to the one provided in the // original RequestSchema. If an error occured while decoding, then that error // is returned. // // Otherwise, the api.Response is returned, along with no error, signaling that // the request completed successfully. func (l *HttpLifecycle) Execute(req *http.Request, into interface{}) (Response, error) { resp, err := httputil.DoHttpRequestWithRedirects(req, []*http.Request{}, true) if err != nil { return nil, err } if into != nil { decoder := json.NewDecoder(resp.Body) if err = decoder.Decode(into); err != nil { return nil, err } } return WrapHttpResponse(resp), nil }
// doLegacyApiRequest runs the request to the LFS legacy API. func DoLegacyRequest(req *http.Request) (*http.Response, *ObjectResource, error) { via := make([]*http.Request, 0, 4) res, err := httputil.DoHttpRequestWithRedirects(req, via, true) if err != nil { return res, nil, err } obj := &ObjectResource{} err = httputil.DecodeResponse(res, obj) if err != nil { httputil.SetErrorResponseContext(err, res) return nil, nil, err } return res, obj, nil }
// Execute implements the Lifecycle.Execute function. // // Internally, the *http.Client is used to execute the underlying *http.Request. // If the client returned an error corresponding to a failure to make the // request, then that error will be returned immediately, and the response is // guaranteed not to be serialized. // // Once the response has been gathered from the server, it is unmarshled into // the given `into interface{}` which is identical to the one provided in the // original RequestSchema. If an error occured while decoding, then that error // is returned. // // Otherwise, the api.Response is returned, along with no error, signaling that // the request completed successfully. func (l *HttpLifecycle) Execute(req *http.Request, into interface{}) (Response, error) { resp, err := httputil.DoHttpRequestWithRedirects(req, []*http.Request{}, true) if err != nil { return nil, err } // TODO(taylor): check status >=500, handle content type, return error, // halt immediately. if into != nil { decoder := json.NewDecoder(resp.Body) if err = decoder.Decode(into); err != nil { return nil, err } } return WrapHttpResponse(resp), nil }
// DoRequest runs a request to the LFS API, without parsing the response // body. 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 DoRequest(req *http.Request, useCreds bool) (*http.Response, error) { via := make([]*http.Request, 0, 4) return httputil.DoHttpRequestWithRedirects(req, via, useCreds) }