in internal/gitlabnet/lfstransfer/client.go [136:181]
func (c *Client) Batch(operation string, reqObjects []*BatchObject, ref string, reqHashAlgo string) (*BatchResponse, error) {
// FIXME: This causes tests to fail
// if ref == "" {
// return nil, errors.New("A ref must be specified.")
// }
bref := &batchRef{Name: ref}
body := batchRequest{
Operation: operation,
Objects: reqObjects,
Ref: bref,
HashAlgorithm: reqHashAlgo,
}
jsonData, err := json.Marshal(body)
if err != nil {
return nil, err
}
jsonReader := bytes.NewReader(jsonData)
req, _ := newHTTPRequest(http.MethodPost, fmt.Sprintf("%s/objects/batch", c.href), jsonReader)
req.Header.Set("Content-Type", c.header)
req.Header.Set("Authorization", c.auth)
client := newHTTPClient()
res, err := client.Do(req)
if err != nil {
return nil, err
}
// Error condition taken from example: https://pkg.go.dev/net/http#example-Get
if res.StatusCode > 399 {
return nil, fmt.Errorf("response failed with status code: %d", res.StatusCode)
}
defer func() { _ = res.Body.Close() }()
response := &BatchResponse{}
if err := gitlabnet.ParseJSON(res, response); err != nil {
return nil, err
}
return response, nil
}