Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(137)

Unified Diff: go/src/infra/tools/cipd/remote.go

Issue 1145423002: cipd: Client can resolve tags to instance IDs. (Closed) Base URL: https://chromium.googlesource.com/infra/infra.git@master
Patch Set: resolve subcommand Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: go/src/infra/tools/cipd/remote.go
diff --git a/go/src/infra/tools/cipd/remote.go b/go/src/infra/tools/cipd/remote.go
index 7bb25f8e8f62f5a883967f4344721fe613e1f786..cf306402dc7360110b795b2bc0bd4648aa4e7c4c 100644
--- a/go/src/infra/tools/cipd/remote.go
+++ b/go/src/infra/tools/cipd/remote.go
@@ -182,6 +182,46 @@ func (r *remoteImpl) finalizeUpload(sessionID string) (finished bool, err error)
return
}
+func (r *remoteImpl) resolveVersion(packageName, version string) (pin common.Pin, err error) {
+ if err = common.ValidatePackageName(packageName); err != nil {
+ return
+ }
+ if err = common.ValidateInstanceVersion(version); err != nil {
+ return
+ }
+ var reply struct {
+ Status string `json:"status"`
+ ErrorMessage string `json:"error_message"`
+ InstanceID string `json:"instance_id"`
+ }
+ params := url.Values{}
+ params.Add("package_name", packageName)
+ params.Add("version", version)
+ err = r.makeRequest("repo/v1/instance/resolve?"+params.Encode(), "GET", nil, &reply)
+ if err != nil {
+ return
+ }
+ switch reply.Status {
+ case "SUCCESS":
+ if common.ValidateInstanceID(reply.InstanceID) != nil {
+ err = fmt.Errorf("Backend returned invalid instance ID: %s", reply.InstanceID)
+ } else {
+ pin = common.Pin{PackageName: packageName, InstanceID: reply.InstanceID}
+ }
+ case "PACKAGE_NOT_FOUND":
+ err = fmt.Errorf("Package '%s' is not registered", packageName)
+ case "INSTANCE_NOT_FOUND":
+ err = fmt.Errorf("Package '%s' doesn't have instance with version '%s'", packageName, version)
+ case "AMBIGUOUS_VERSION":
+ err = fmt.Errorf("More than one instance of package '%s' match version '%s'", packageName, version)
+ case "ERROR":
+ err = errors.New(reply.ErrorMessage)
+ default:
+ err = fmt.Errorf("Unexpected backend response: %s", reply.Status)
+ }
+ return
+}
+
func (r *remoteImpl) registerInstance(pin common.Pin) (*registerInstanceResponse, error) {
endpoint, err := instanceEndpoint(pin)
if err != nil {
@@ -249,7 +289,7 @@ func (r *remoteImpl) fetchInstance(pin common.Pin) (*fetchInstanceResponse, erro
registeredTs: ts,
}, nil
case "PACKAGE_NOT_FOUND":
- return nil, fmt.Errorf("Package '%s' is not registered or you do not have permission to fetch it", pin.PackageName)
+ return nil, fmt.Errorf("Package '%s' is not registered", pin.PackageName)
case "INSTANCE_NOT_FOUND":
return nil, fmt.Errorf("Package '%s' doesn't have instance '%s'", pin.PackageName, pin.InstanceID)
case "ERROR":

Powered by Google App Engine
This is Rietveld 408576698