in internal/gitlabnet/lfstransfer/client.go [227:282]
func (c *Client) Lock(path, refname string) (*Lock, error) {
var ref *batchRef
if refname != "" {
ref = &batchRef{
Name: refname,
}
}
body := &lockRequest{
Path: path,
Ref: ref,
}
jsonData, err := json.Marshal(body)
if err != nil {
return nil, err
}
jsonReader := bytes.NewReader(jsonData)
req, err := newHTTPRequest(http.MethodPost, c.href+"/locks", jsonReader)
if err != nil {
return nil, err
}
req.Header.Set("Content-Type", "application/vnd.git-lfs+json")
req.Header.Set("Authorization", c.auth)
client := newHTTPClient()
res, err := client.Do(req)
if err != nil {
return nil, err
}
defer func() { _ = res.Body.Close() }()
switch {
case res.StatusCode >= 200 && res.StatusCode <= 299:
response := &lockResponse{}
if err := gitlabnet.ParseJSON(res, response); err != nil {
return nil, err
}
return response.Lock, nil
case res.StatusCode == http.StatusForbidden:
return nil, transfer.ErrForbidden
case res.StatusCode == http.StatusNotFound:
return nil, transfer.ErrNotFound
case res.StatusCode == http.StatusConflict:
response := &lockResponse{}
if err := gitlabnet.ParseJSON(res, response); err != nil {
return nil, err
}
return response.Lock, transfer.ErrConflict
default:
return nil, fmt.Errorf("internal error")
}
}