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"` | |
nodir
2015/05/21 17:07:48
I wish I warned you earlier, but from my small exp
Vadim Sh.
2015/05/21 18:00:37
1) CIPD is not latency critical, thus I do not opt
| |
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) | |
nodir
2015/05/21 17:07:48
What one is supposed to do in this case? Neither a
Vadim Sh.
2015/05/21 18:00:37
The answer I was planning for is:
1) Add ACLs to t
nodir
2015/05/21 18:15:06
Acknowledged.
| |
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 |