| 111 | } |
| 112 | |
| 113 | func (c *httpLockClient) Unlock(ref *git.Ref, remote, id string, force bool) (*unlockResponse, int, error) { |
| 114 | e := c.Endpoints.Endpoint("upload", remote) |
| 115 | suffix := fmt.Sprintf("locks/%s/unlock", id) |
| 116 | req, err := c.NewRequest("POST", e, suffix, &unlockRequest{ |
| 117 | Force: force, |
| 118 | Ref: &lockRef{Name: ref.Refspec()}, |
| 119 | }) |
| 120 | if err != nil { |
| 121 | return nil, 0, err |
| 122 | } |
| 123 | |
| 124 | req = c.Client.LogRequest(req, "lfs.locks.unlock") |
| 125 | res, err := c.DoAPIRequestWithAuth(remote, req) |
| 126 | if err != nil { |
| 127 | if res != nil { |
| 128 | return nil, res.StatusCode, err |
| 129 | } |
| 130 | return nil, 0, err |
| 131 | } |
| 132 | |
| 133 | unlockRes := &unlockResponse{} |
| 134 | err = lfshttp.DecodeJSON(res, unlockRes) |
| 135 | if err != nil { |
| 136 | return nil, res.StatusCode, err |
| 137 | } |
| 138 | if unlockRes.Lock == nil && len(unlockRes.Message) == 0 { |
| 139 | return nil, res.StatusCode, errors.New(tr.Tr.Get("invalid server response")) |
| 140 | } |
| 141 | return unlockRes, res.StatusCode, nil |
| 142 | } |
| 143 | |
| 144 | // Filter represents a single qualifier to apply against a set of locks. |
| 145 | type lockFilter struct { |