Chromium Code Reviews| 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"), |