OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 package cipd | 5 package cipd |
6 | 6 |
7 import ( | 7 import ( |
8 "bytes" | 8 "bytes" |
9 "encoding/json" | 9 "encoding/json" |
10 "errors" | 10 "errors" |
(...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
175 case "PUBLISHED": | 175 case "PUBLISHED": |
176 finished = true | 176 finished = true |
177 case "ERROR": | 177 case "ERROR": |
178 err = errors.New(reply.ErrorMessage) | 178 err = errors.New(reply.ErrorMessage) |
179 default: | 179 default: |
180 err = fmt.Errorf("Unexpected upload session status: %s", reply.S
tatus) | 180 err = fmt.Errorf("Unexpected upload session status: %s", reply.S
tatus) |
181 } | 181 } |
182 return | 182 return |
183 } | 183 } |
184 | 184 |
| 185 func (r *remoteImpl) resolveVersion(packageName, version string) (pin common.Pin
, err error) { |
| 186 if err = common.ValidatePackageName(packageName); err != nil { |
| 187 return |
| 188 } |
| 189 if err = common.ValidateInstanceVersion(version); err != nil { |
| 190 return |
| 191 } |
| 192 var reply struct { |
| 193 Status string `json:"status"` |
| 194 ErrorMessage string `json:"error_message"` |
| 195 InstanceID string `json:"instance_id"` |
| 196 } |
| 197 params := url.Values{} |
| 198 params.Add("package_name", packageName) |
| 199 params.Add("version", version) |
| 200 err = r.makeRequest("repo/v1/instance/resolve?"+params.Encode(), "GET",
nil, &reply) |
| 201 if err != nil { |
| 202 return |
| 203 } |
| 204 switch reply.Status { |
| 205 case "SUCCESS": |
| 206 if common.ValidateInstanceID(reply.InstanceID) != nil { |
| 207 err = fmt.Errorf("Backend returned invalid instance ID:
%s", reply.InstanceID) |
| 208 } else { |
| 209 pin = common.Pin{PackageName: packageName, InstanceID: r
eply.InstanceID} |
| 210 } |
| 211 case "PACKAGE_NOT_FOUND": |
| 212 err = fmt.Errorf("Package '%s' is not registered", packageName) |
| 213 case "INSTANCE_NOT_FOUND": |
| 214 err = fmt.Errorf("Package '%s' doesn't have instance with versio
n '%s'", packageName, version) |
| 215 case "AMBIGUOUS_VERSION": |
| 216 err = fmt.Errorf("More than one instance of package '%s' match v
ersion '%s'", packageName, version) |
| 217 case "ERROR": |
| 218 err = errors.New(reply.ErrorMessage) |
| 219 default: |
| 220 err = fmt.Errorf("Unexpected backend response: %s", reply.Status
) |
| 221 } |
| 222 return |
| 223 } |
| 224 |
185 func (r *remoteImpl) registerInstance(pin common.Pin) (*registerInstanceResponse
, error) { | 225 func (r *remoteImpl) registerInstance(pin common.Pin) (*registerInstanceResponse
, error) { |
186 endpoint, err := instanceEndpoint(pin) | 226 endpoint, err := instanceEndpoint(pin) |
187 if err != nil { | 227 if err != nil { |
188 return nil, err | 228 return nil, err |
189 } | 229 } |
190 var reply struct { | 230 var reply struct { |
191 Status string `json:"status"` | 231 Status string `json:"status"` |
192 Instance packageInstanceMsg `json:"instance"` | 232 Instance packageInstanceMsg `json:"instance"` |
193 UploadSessionID string `json:"upload_session_id"` | 233 UploadSessionID string `json:"upload_session_id"` |
194 UploadURL string `json:"upload_url"` | 234 UploadURL string `json:"upload_url"` |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
242 ts, err := convertTimestamp(reply.Instance.RegisteredTs) | 282 ts, err := convertTimestamp(reply.Instance.RegisteredTs) |
243 if err != nil { | 283 if err != nil { |
244 return nil, err | 284 return nil, err |
245 } | 285 } |
246 return &fetchInstanceResponse{ | 286 return &fetchInstanceResponse{ |
247 fetchURL: reply.FetchURL, | 287 fetchURL: reply.FetchURL, |
248 registeredBy: reply.Instance.RegisteredBy, | 288 registeredBy: reply.Instance.RegisteredBy, |
249 registeredTs: ts, | 289 registeredTs: ts, |
250 }, nil | 290 }, nil |
251 case "PACKAGE_NOT_FOUND": | 291 case "PACKAGE_NOT_FOUND": |
252 » » return nil, fmt.Errorf("Package '%s' is not registered or you do
not have permission to fetch it", pin.PackageName) | 292 » » return nil, fmt.Errorf("Package '%s' is not registered", pin.Pac
kageName) |
253 case "INSTANCE_NOT_FOUND": | 293 case "INSTANCE_NOT_FOUND": |
254 return nil, fmt.Errorf("Package '%s' doesn't have instance '%s'"
, pin.PackageName, pin.InstanceID) | 294 return nil, fmt.Errorf("Package '%s' doesn't have instance '%s'"
, pin.PackageName, pin.InstanceID) |
255 case "ERROR": | 295 case "ERROR": |
256 return nil, errors.New(reply.ErrorMessage) | 296 return nil, errors.New(reply.ErrorMessage) |
257 } | 297 } |
258 return nil, fmt.Errorf("Unexpected reply status: %s", reply.Status) | 298 return nil, fmt.Errorf("Unexpected reply status: %s", reply.Status) |
259 } | 299 } |
260 | 300 |
261 func (r *remoteImpl) fetchACL(packagePath string) ([]PackageACL, error) { | 301 func (r *remoteImpl) fetchACL(packagePath string) ([]PackageACL, error) { |
262 endpoint, err := aclEndpoint(packagePath) | 302 endpoint, err := aclEndpoint(packagePath) |
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
425 | 465 |
426 // convertTimestamp coverts string with int64 timestamp in microseconds since | 466 // convertTimestamp coverts string with int64 timestamp in microseconds since |
427 // to time.Time | 467 // to time.Time |
428 func convertTimestamp(ts string) (time.Time, error) { | 468 func convertTimestamp(ts string) (time.Time, error) { |
429 i, err := strconv.ParseInt(ts, 10, 64) | 469 i, err := strconv.ParseInt(ts, 10, 64) |
430 if err != nil { | 470 if err != nil { |
431 return time.Time{}, fmt.Errorf("Unexpected timestamp value '%s'
in the server response", ts) | 471 return time.Time{}, fmt.Errorf("Unexpected timestamp value '%s'
in the server response", ts) |
432 } | 472 } |
433 return time.Unix(0, i*1000), nil | 473 return time.Unix(0, i*1000), nil |
434 } | 474 } |
OLD | NEW |