Index: go/src/infra/tools/cipd/apps/cipd/main.go |
diff --git a/go/src/infra/tools/cipd/apps/cipd/main.go b/go/src/infra/tools/cipd/apps/cipd/main.go |
index 35c5636ecc5d17a54e9fa40f72c62ebed572c884..8854e1956f2863242e0dbccd3e0cb1fd5ba49090 100644 |
--- a/go/src/infra/tools/cipd/apps/cipd/main.go |
+++ b/go/src/infra/tools/cipd/apps/cipd/main.go |
@@ -424,6 +424,54 @@ func ensurePackages(root string, desiredStateFile string, serviceOpts ServiceOpt |
} |
//////////////////////////////////////////////////////////////////////////////// |
+// 'resolve' subcommand. |
+ |
+var cmdResolve = &subcommands.Command{ |
+ UsageLine: "resolve [options]", |
+ ShortDesc: "returns concrete package instance ID given a version", |
+ LongDesc: "Returns concrete package instance ID given a version.", |
+ CommandRun: func() subcommands.CommandRun { |
+ c := &resolveRun{} |
+ c.Flags.StringVar(&c.packageName, "name", "<name>", "package name") |
+ c.Flags.StringVar(&c.version, "version", "<version>", "package version to resolve") |
+ c.ServiceOptions.registerFlags(&c.Flags) |
+ c.JSONOutputOptions.registerFlags(&c.Flags) |
+ return c |
+ }, |
+} |
+ |
+type resolveRun struct { |
+ subcommands.CommandRunBase |
+ ServiceOptions |
+ JSONOutputOptions |
+ |
+ packageName string |
+ version string |
+} |
+ |
+func (c *resolveRun) Run(a subcommands.Application, args []string) int { |
+ if !checkCommandLine(args, c.GetFlags(), 0) { |
+ return 1 |
+ } |
+ pin, err := resolveVersion(c.packageName, c.version, c.ServiceOptions) |
+ err = c.writeJSONOutput(&pin, err) |
+ if err != nil { |
+ reportError("%s", err) |
+ return 1 |
+ } |
+ logging.Infof("Instance: %s", pin) |
+ return 0 |
+} |
+ |
+func resolveVersion(packageName, version string, serviceOpts ServiceOptions) (common.Pin, error) { |
+ client, err := serviceOpts.makeCipdClient() |
+ if err != nil { |
+ return common.Pin{}, err |
+ } |
+ return client.ResolveVersion(packageName, version) |
nodir
2015/05/21 18:15:06
It seems functions like this in this file are call
Vadim Sh.
2015/05/21 18:19:39
They are not all like this. buildInstanceFile and
|
+} |
+ |
+//////////////////////////////////////////////////////////////////////////////// |
// 'acl-list' subcommand. |
var cmdListACL = &subcommands.Command{ |
@@ -707,7 +755,7 @@ var cmdFetch = &subcommands.Command{ |
CommandRun: func() subcommands.CommandRun { |
c := &fetchRun{} |
c.Flags.StringVar(&c.packageName, "name", "<name>", "package name") |
- c.Flags.StringVar(&c.instanceID, "instance-id", "<instance id>", "package instance ID to fetch") |
+ c.Flags.StringVar(&c.version, "version", "<version>", "package version to fetch") |
c.Flags.StringVar(&c.outputPath, "out", "<path>", "path to a file to write fetch to") |
c.ServiceOptions.registerFlags(&c.Flags) |
return c |
@@ -719,7 +767,7 @@ type fetchRun struct { |
ServiceOptions |
packageName string |
- instanceID string |
+ version string |
outputPath string |
} |
@@ -727,8 +775,7 @@ func (c *fetchRun) Run(a subcommands.Application, args []string) int { |
if !checkCommandLine(args, c.GetFlags(), 0) { |
return 1 |
} |
- pin := common.Pin{PackageName: c.packageName, InstanceID: c.instanceID} |
- err := fetchInstanceFile(pin, c.outputPath, c.ServiceOptions) |
+ err := fetchInstanceFile(c.packageName, c.version, c.outputPath, c.ServiceOptions) |
if err != nil { |
reportError("Error while fetching the package: %s", err) |
return 1 |
@@ -736,7 +783,16 @@ func (c *fetchRun) Run(a subcommands.Application, args []string) int { |
return 0 |
} |
-func fetchInstanceFile(pin common.Pin, instanceFile string, serviceOpts ServiceOptions) error { |
+func fetchInstanceFile(packageName, version, instanceFile string, serviceOpts ServiceOptions) error { |
+ client, err := serviceOpts.makeCipdClient() |
+ if err != nil { |
+ return err |
+ } |
+ pin, err := client.ResolveVersion(packageName, version) |
+ if err != nil { |
+ return err |
+ } |
+ |
out, err := os.OpenFile(instanceFile, os.O_CREATE|os.O_WRONLY, 0666) |
if err != nil { |
return err |
@@ -749,10 +805,6 @@ func fetchInstanceFile(pin common.Pin, instanceFile string, serviceOpts ServiceO |
} |
}() |
- client, err := serviceOpts.makeCipdClient() |
- if err != nil { |
- return err |
- } |
err = client.FetchInstance(pin, out) |
if err != nil { |
return err |
@@ -902,6 +954,7 @@ var application = &subcommands.DefaultApplication{ |
// High level commands. |
cmdCreate, |
cmdEnsure, |
+ cmdResolve, |
// Authentication related commands. |
auth.SubcommandInfo("auth-info"), |