Chromium Code Reviews| 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 // Client side of for Chrome Infra Package Deployer. | 5 // Client side of for Chrome Infra Package Deployer. |
| 6 // | 6 // |
| 7 // Subcommand starting with 'pkg-' are low level commands operating on package | 7 // Subcommand starting with 'pkg-' are low level commands operating on package |
| 8 // files on disk. | 8 // files on disk. |
| 9 package main | 9 package main |
| 10 | 10 |
| (...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 214 type commandLineError struct { | 214 type commandLineError struct { |
| 215 error | 215 error |
| 216 } | 216 } |
| 217 | 217 |
| 218 // makeCLIError returns new commandLineError. | 218 // makeCLIError returns new commandLineError. |
| 219 func makeCLIError(msg string, args ...interface{}) error { | 219 func makeCLIError(msg string, args ...interface{}) error { |
| 220 return commandLineError{fmt.Errorf(msg, args...)} | 220 return commandLineError{fmt.Errorf(msg, args...)} |
| 221 } | 221 } |
| 222 | 222 |
| 223 //////////////////////////////////////////////////////////////////////////////// | 223 //////////////////////////////////////////////////////////////////////////////// |
| 224 // ServiceOptions mixin. | 224 // ClientOptions mixin. |
| 225 | 225 |
| 226 // ServiceOptions defines command line arguments related to communication | 226 // ClientOptions defines command line arguments related to CIPD client creation. |
| 227 // with the remote service. Subcommands that interact with the network embed it. | 227 // Subcommands that need a CIPD client embed it. |
| 228 type ServiceOptions struct { | 228 type ClientOptions struct { |
| 229 authFlags authcli.Flags | 229 authFlags authcli.Flags |
| 230 serviceURL string | 230 serviceURL string |
| 231 cacheDir string | |
| 231 } | 232 } |
| 232 | 233 |
| 233 func (opts *ServiceOptions) registerFlags(f *flag.FlagSet) { | 234 const cacheDirHelp = "Directory for shared cache. CAVEAT: only one cipd process may access same cache dir simulatenously." |
|
Vadim Sh.
2016/04/08 01:42:55
"CAVEAT: only one cipd process may access same cac
| |
| 235 | |
| 236 func (opts *ClientOptions) registerFlags(f *flag.FlagSet) { | |
| 234 f.StringVar(&opts.serviceURL, "service-url", "", "URL of a backend to us e instead of the default one.") | 237 f.StringVar(&opts.serviceURL, "service-url", "", "URL of a backend to us e instead of the default one.") |
| 238 f.StringVar(&opts.cacheDir, "cache-dir", "", cacheDirHelp) | |
|
Vadim Sh.
2016/04/08 01:42:55
keep help string inline, like in the rest options
| |
| 235 opts.authFlags.Register(f, auth.Options{}) | 239 opts.authFlags.Register(f, auth.Options{}) |
| 236 } | 240 } |
| 237 | 241 |
| 238 func (opts *ServiceOptions) makeCipdClient(root string) (cipd.Client, error) { | 242 func (opts *ClientOptions) makeCipdClient(root string) (cipd.Client, error) { |
| 239 authOpts, err := opts.authFlags.Options() | 243 authOpts, err := opts.authFlags.Options() |
| 240 if err != nil { | 244 if err != nil { |
| 241 return nil, err | 245 return nil, err |
| 242 } | 246 } |
| 243 authOpts.Logger = log | 247 authOpts.Logger = log |
| 244 return cipd.NewClient(cipd.ClientOptions{ | 248 return cipd.NewClient(cipd.ClientOptions{ |
| 245 ServiceURL: opts.serviceURL, | 249 ServiceURL: opts.serviceURL, |
| 246 Root: root, | 250 Root: root, |
| 247 Logger: log, | 251 Logger: log, |
| 252 CacheDir: opts.cacheDir, | |
| 248 AuthenticatedClientFactory: func() (*http.Client, error) { | 253 AuthenticatedClientFactory: func() (*http.Client, error) { |
| 249 return auth.NewAuthenticator(auth.OptionalLogin, authOpt s).Client() | 254 return auth.NewAuthenticator(auth.OptionalLogin, authOpt s).Client() |
| 250 }, | 255 }, |
| 251 }), nil | 256 }), nil |
| 252 } | 257 } |
| 253 | 258 |
| 254 //////////////////////////////////////////////////////////////////////////////// | 259 //////////////////////////////////////////////////////////////////////////////// |
| 255 // InputOptions mixin. | 260 // InputOptions mixin. |
| 256 | 261 |
| 257 // PackageVars holds array of '-pkg-var' command line options. | 262 // PackageVars holds array of '-pkg-var' command line options. |
| (...skipping 332 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 590 var cmdCreate = &subcommands.Command{ | 595 var cmdCreate = &subcommands.Command{ |
| 591 UsageLine: "create [options]", | 596 UsageLine: "create [options]", |
| 592 ShortDesc: "builds and uploads a package instance file", | 597 ShortDesc: "builds and uploads a package instance file", |
| 593 LongDesc: "Builds and uploads a package instance file.", | 598 LongDesc: "Builds and uploads a package instance file.", |
| 594 CommandRun: func() subcommands.CommandRun { | 599 CommandRun: func() subcommands.CommandRun { |
| 595 c := &createRun{} | 600 c := &createRun{} |
| 596 c.registerBaseFlags() | 601 c.registerBaseFlags() |
| 597 c.InputOptions.registerFlags(&c.Flags) | 602 c.InputOptions.registerFlags(&c.Flags) |
| 598 c.RefsOptions.registerFlags(&c.Flags) | 603 c.RefsOptions.registerFlags(&c.Flags) |
| 599 c.TagsOptions.registerFlags(&c.Flags) | 604 c.TagsOptions.registerFlags(&c.Flags) |
| 600 » » c.ServiceOptions.registerFlags(&c.Flags) | 605 » » c.ClientOptions.registerFlags(&c.Flags) |
| 601 c.UploadOptions.registerFlags(&c.Flags) | 606 c.UploadOptions.registerFlags(&c.Flags) |
| 602 return c | 607 return c |
| 603 }, | 608 }, |
| 604 } | 609 } |
| 605 | 610 |
| 606 type createRun struct { | 611 type createRun struct { |
| 607 Subcommand | 612 Subcommand |
| 608 InputOptions | 613 InputOptions |
| 609 RefsOptions | 614 RefsOptions |
| 610 TagsOptions | 615 TagsOptions |
| 611 » ServiceOptions | 616 » ClientOptions |
| 612 UploadOptions | 617 UploadOptions |
| 613 } | 618 } |
| 614 | 619 |
| 615 func (c *createRun) Run(a subcommands.Application, args []string) int { | 620 func (c *createRun) Run(a subcommands.Application, args []string) int { |
| 616 if !c.init(args, 0, 0) { | 621 if !c.init(args, 0, 0) { |
| 617 return 1 | 622 return 1 |
| 618 } | 623 } |
| 619 » return c.done(buildAndUploadInstance(c.InputOptions, c.RefsOptions, c.Ta gsOptions, c.ServiceOptions, c.UploadOptions)) | 624 » return c.done(buildAndUploadInstance(c.InputOptions, c.RefsOptions, c.Ta gsOptions, c.ClientOptions, c.UploadOptions)) |
| 620 } | 625 } |
| 621 | 626 |
| 622 func buildAndUploadInstance(inputOpts InputOptions, refsOpts RefsOptions, | 627 func buildAndUploadInstance(inputOpts InputOptions, refsOpts RefsOptions, |
| 623 » tagsOpts TagsOptions, serviceOpts ServiceOptions, uploadOpts UploadOptio ns) (common.Pin, error) { | 628 » tagsOpts TagsOptions, clientOpts ClientOptions, uploadOpts UploadOptions ) (common.Pin, error) { |
| 624 f, err := ioutil.TempFile("", "cipd_pkg") | 629 f, err := ioutil.TempFile("", "cipd_pkg") |
| 625 if err != nil { | 630 if err != nil { |
| 626 return common.Pin{}, err | 631 return common.Pin{}, err |
| 627 } | 632 } |
| 628 defer func() { | 633 defer func() { |
| 629 f.Close() | 634 f.Close() |
| 630 os.Remove(f.Name()) | 635 os.Remove(f.Name()) |
| 631 }() | 636 }() |
| 632 err = buildInstanceFile(f.Name(), inputOpts) | 637 err = buildInstanceFile(f.Name(), inputOpts) |
| 633 if err != nil { | 638 if err != nil { |
| 634 return common.Pin{}, err | 639 return common.Pin{}, err |
| 635 } | 640 } |
| 636 » return registerInstanceFile(f.Name(), refsOpts, tagsOpts, serviceOpts, u ploadOpts) | 641 » return registerInstanceFile(f.Name(), refsOpts, tagsOpts, clientOpts, up loadOpts) |
| 637 } | 642 } |
| 638 | 643 |
| 639 //////////////////////////////////////////////////////////////////////////////// | 644 //////////////////////////////////////////////////////////////////////////////// |
| 640 // 'ensure' subcommand. | 645 // 'ensure' subcommand. |
| 641 | 646 |
| 642 var cmdEnsure = &subcommands.Command{ | 647 var cmdEnsure = &subcommands.Command{ |
| 643 UsageLine: "ensure [options]", | 648 UsageLine: "ensure [options]", |
| 644 ShortDesc: "installs, removes and updates packages in one go", | 649 ShortDesc: "installs, removes and updates packages in one go", |
| 645 LongDesc: "Installs, removes and updates packages in one go.\n\n" + | 650 LongDesc: "Installs, removes and updates packages in one go.\n\n" + |
| 646 "Supposed to be used from scripts and automation. Alternative to 'init', " + | 651 "Supposed to be used from scripts and automation. Alternative to 'init', " + |
| 647 "'install' and 'remove'. As such, it doesn't try to discover sit e root " + | 652 "'install' and 'remove'. As such, it doesn't try to discover sit e root " + |
| 648 "directory on its own.", | 653 "directory on its own.", |
| 649 CommandRun: func() subcommands.CommandRun { | 654 CommandRun: func() subcommands.CommandRun { |
| 650 c := &ensureRun{} | 655 c := &ensureRun{} |
| 651 c.registerBaseFlags() | 656 c.registerBaseFlags() |
| 652 » » c.ServiceOptions.registerFlags(&c.Flags) | 657 » » c.ClientOptions.registerFlags(&c.Flags) |
| 653 c.Flags.StringVar(&c.rootDir, "root", "<path>", "Path to an inst allation site root directory.") | 658 c.Flags.StringVar(&c.rootDir, "root", "<path>", "Path to an inst allation site root directory.") |
| 654 c.Flags.StringVar(&c.listFile, "list", "<path>", "A file with a list of '<package name> <version>' pairs.") | 659 c.Flags.StringVar(&c.listFile, "list", "<path>", "A file with a list of '<package name> <version>' pairs.") |
| 655 return c | 660 return c |
| 656 }, | 661 }, |
| 657 } | 662 } |
| 658 | 663 |
| 659 type ensureRun struct { | 664 type ensureRun struct { |
| 660 Subcommand | 665 Subcommand |
| 661 » ServiceOptions | 666 » ClientOptions |
| 662 | 667 |
| 663 rootDir string | 668 rootDir string |
| 664 listFile string | 669 listFile string |
| 665 } | 670 } |
| 666 | 671 |
| 667 func (c *ensureRun) Run(a subcommands.Application, args []string) int { | 672 func (c *ensureRun) Run(a subcommands.Application, args []string) int { |
| 668 if !c.init(args, 0, 0) { | 673 if !c.init(args, 0, 0) { |
| 669 return 1 | 674 return 1 |
| 670 } | 675 } |
| 671 » currentPins, _, err := ensurePackages(c.rootDir, c.listFile, false, c.Se rviceOptions) | 676 » currentPins, _, err := ensurePackages(c.rootDir, c.listFile, false, c.Cl ientOptions) |
| 672 return c.done(currentPins, err) | 677 return c.done(currentPins, err) |
| 673 } | 678 } |
| 674 | 679 |
| 675 func ensurePackages(root string, desiredStateFile string, dryRun bool, serviceOp ts ServiceOptions) ([]common.Pin, cipd.Actions, error) { | 680 func ensurePackages(root string, desiredStateFile string, dryRun bool, clientOpt s ClientOptions) ([]common.Pin, cipd.Actions, error) { |
| 676 f, err := os.Open(desiredStateFile) | 681 f, err := os.Open(desiredStateFile) |
| 677 if err != nil { | 682 if err != nil { |
| 678 return nil, cipd.Actions{}, err | 683 return nil, cipd.Actions{}, err |
| 679 } | 684 } |
| 680 defer f.Close() | 685 defer f.Close() |
| 681 » client, err := serviceOpts.makeCipdClient(root) | 686 » client, err := clientOpts.makeCipdClient(root) |
| 682 if err != nil { | 687 if err != nil { |
| 683 return nil, cipd.Actions{}, err | 688 return nil, cipd.Actions{}, err |
| 684 } | 689 } |
| 685 defer client.Close() | 690 defer client.Close() |
| 686 desiredState, err := client.ProcessEnsureFile(f) | 691 desiredState, err := client.ProcessEnsureFile(f) |
| 687 if err != nil { | 692 if err != nil { |
| 688 return nil, cipd.Actions{}, err | 693 return nil, cipd.Actions{}, err |
| 689 } | 694 } |
| 690 actions, err := client.EnsurePackages(desiredState, dryRun) | 695 actions, err := client.EnsurePackages(desiredState, dryRun) |
| 691 if err != nil { | 696 if err != nil { |
| (...skipping 11 matching lines...) Expand all Loading... | |
| 703 LongDesc: "Returns 0 exit code iff 'ensure' will do some actions.\n\n" + | 708 LongDesc: "Returns 0 exit code iff 'ensure' will do some actions.\n\n" + |
| 704 "Exists to be used from Puppet's Exec 'onlyif' option to trigger " + | 709 "Exists to be used from Puppet's Exec 'onlyif' option to trigger " + |
| 705 "'ensure' only if something is out of date. If puppet-check-upda tes " + | 710 "'ensure' only if something is out of date. If puppet-check-upda tes " + |
| 706 "fails with a transient error, it returns non-zero exit code (as usual), " + | 711 "fails with a transient error, it returns non-zero exit code (as usual), " + |
| 707 "so that Puppet doesn't trigger notification chain (that can res ult in " + | 712 "so that Puppet doesn't trigger notification chain (that can res ult in " + |
| 708 "service restarts). On fatal errors it returns 0 to let Puppet r un " + | 713 "service restarts). On fatal errors it returns 0 to let Puppet r un " + |
| 709 "'ensure' for real and catch an error.", | 714 "'ensure' for real and catch an error.", |
| 710 CommandRun: func() subcommands.CommandRun { | 715 CommandRun: func() subcommands.CommandRun { |
| 711 c := &checkUpdatesRun{} | 716 c := &checkUpdatesRun{} |
| 712 c.registerBaseFlags() | 717 c.registerBaseFlags() |
| 713 » » c.ServiceOptions.registerFlags(&c.Flags) | 718 » » c.ClientOptions.registerFlags(&c.Flags) |
| 714 c.Flags.StringVar(&c.rootDir, "root", "<path>", "Path to an inst allation site root directory.") | 719 c.Flags.StringVar(&c.rootDir, "root", "<path>", "Path to an inst allation site root directory.") |
| 715 c.Flags.StringVar(&c.listFile, "list", "<path>", "A file with a list of '<package name> <version>' pairs.") | 720 c.Flags.StringVar(&c.listFile, "list", "<path>", "A file with a list of '<package name> <version>' pairs.") |
| 716 return c | 721 return c |
| 717 }, | 722 }, |
| 718 } | 723 } |
| 719 | 724 |
| 720 type checkUpdatesRun struct { | 725 type checkUpdatesRun struct { |
| 721 Subcommand | 726 Subcommand |
| 722 » ServiceOptions | 727 » ClientOptions |
| 723 | 728 |
| 724 rootDir string | 729 rootDir string |
| 725 listFile string | 730 listFile string |
| 726 } | 731 } |
| 727 | 732 |
| 728 func (c *checkUpdatesRun) Run(a subcommands.Application, args []string) int { | 733 func (c *checkUpdatesRun) Run(a subcommands.Application, args []string) int { |
| 729 if !c.init(args, 0, 0) { | 734 if !c.init(args, 0, 0) { |
| 730 return 1 | 735 return 1 |
| 731 } | 736 } |
| 732 » _, actions, err := ensurePackages(c.rootDir, c.listFile, true, c.Service Options) | 737 » _, actions, err := ensurePackages(c.rootDir, c.listFile, true, c.ClientO ptions) |
| 733 if err != nil { | 738 if err != nil { |
| 734 ret := c.done(actions, err) | 739 ret := c.done(actions, err) |
| 735 if errors.IsTransient(err) { | 740 if errors.IsTransient(err) { |
| 736 return ret // fail as usual | 741 return ret // fail as usual |
| 737 } | 742 } |
| 738 return 0 // on fatal errors ask puppet to run 'ensure' for real | 743 return 0 // on fatal errors ask puppet to run 'ensure' for real |
| 739 } | 744 } |
| 740 c.done(actions, nil) | 745 c.done(actions, nil) |
| 741 if actions.Empty() { | 746 if actions.Empty() { |
| 742 return 5 // some arbitrary non-zero number, unlikely to show up on errors | 747 return 5 // some arbitrary non-zero number, unlikely to show up on errors |
| 743 } | 748 } |
| 744 return 0 | 749 return 0 |
| 745 } | 750 } |
| 746 | 751 |
| 747 //////////////////////////////////////////////////////////////////////////////// | 752 //////////////////////////////////////////////////////////////////////////////// |
| 748 // 'resolve' subcommand. | 753 // 'resolve' subcommand. |
| 749 | 754 |
| 750 var cmdResolve = &subcommands.Command{ | 755 var cmdResolve = &subcommands.Command{ |
| 751 UsageLine: "resolve <package or package prefix> [options]", | 756 UsageLine: "resolve <package or package prefix> [options]", |
| 752 ShortDesc: "returns concrete package instance ID given a version", | 757 ShortDesc: "returns concrete package instance ID given a version", |
| 753 LongDesc: "Returns concrete package instance ID given a version.", | 758 LongDesc: "Returns concrete package instance ID given a version.", |
| 754 CommandRun: func() subcommands.CommandRun { | 759 CommandRun: func() subcommands.CommandRun { |
| 755 c := &resolveRun{} | 760 c := &resolveRun{} |
| 756 c.registerBaseFlags() | 761 c.registerBaseFlags() |
| 757 » » c.ServiceOptions.registerFlags(&c.Flags) | 762 » » c.ClientOptions.registerFlags(&c.Flags) |
| 758 c.Flags.StringVar(&c.version, "version", "<version>", "Package v ersion to resolve.") | 763 c.Flags.StringVar(&c.version, "version", "<version>", "Package v ersion to resolve.") |
| 759 return c | 764 return c |
| 760 }, | 765 }, |
| 761 } | 766 } |
| 762 | 767 |
| 763 type resolveRun struct { | 768 type resolveRun struct { |
| 764 Subcommand | 769 Subcommand |
| 765 » ServiceOptions | 770 » ClientOptions |
| 766 | 771 |
| 767 version string | 772 version string |
| 768 } | 773 } |
| 769 | 774 |
| 770 func (c *resolveRun) Run(a subcommands.Application, args []string) int { | 775 func (c *resolveRun) Run(a subcommands.Application, args []string) int { |
| 771 if !c.init(args, 1, 1) { | 776 if !c.init(args, 1, 1) { |
| 772 return 1 | 777 return 1 |
| 773 } | 778 } |
| 774 » return c.doneWithPins(resolveVersion(args[0], c.version, c.ServiceOption s)) | 779 » return c.doneWithPins(resolveVersion(args[0], c.version, c.ClientOptions )) |
| 775 } | 780 } |
| 776 | 781 |
| 777 func resolveVersion(packagePrefix, version string, serviceOpts ServiceOptions) ( []pinInfo, error) { | 782 func resolveVersion(packagePrefix, version string, clientOpts ClientOptions) ([] pinInfo, error) { |
| 778 » client, err := serviceOpts.makeCipdClient("") | 783 » client, err := clientOpts.makeCipdClient("") |
| 779 if err != nil { | 784 if err != nil { |
| 780 return nil, err | 785 return nil, err |
| 781 } | 786 } |
| 782 defer client.Close() | 787 defer client.Close() |
| 783 return performBatchOperation(batchOperation{ | 788 return performBatchOperation(batchOperation{ |
| 784 client: client, | 789 client: client, |
| 785 packagePrefix: packagePrefix, | 790 packagePrefix: packagePrefix, |
| 786 callback: func(pkg string) (common.Pin, error) { | 791 callback: func(pkg string) (common.Pin, error) { |
| 787 return client.ResolveVersion(pkg, version) | 792 return client.ResolveVersion(pkg, version) |
| 788 }, | 793 }, |
| 789 }) | 794 }) |
| 790 } | 795 } |
| 791 | 796 |
| 792 //////////////////////////////////////////////////////////////////////////////// | 797 //////////////////////////////////////////////////////////////////////////////// |
| 793 // 'describe' subcommand. | 798 // 'describe' subcommand. |
| 794 | 799 |
| 795 var cmdDescribe = &subcommands.Command{ | 800 var cmdDescribe = &subcommands.Command{ |
| 796 UsageLine: "describe <package> [options]", | 801 UsageLine: "describe <package> [options]", |
| 797 ShortDesc: "returns information about a package instance given its versi on", | 802 ShortDesc: "returns information about a package instance given its versi on", |
| 798 LongDesc: "Returns information about a package instance given its versio n: " + | 803 LongDesc: "Returns information about a package instance given its versio n: " + |
| 799 "who uploaded the instance and when and a list of attached tags. ", | 804 "who uploaded the instance and when and a list of attached tags. ", |
| 800 CommandRun: func() subcommands.CommandRun { | 805 CommandRun: func() subcommands.CommandRun { |
| 801 c := &describeRun{} | 806 c := &describeRun{} |
| 802 c.registerBaseFlags() | 807 c.registerBaseFlags() |
| 803 » » c.ServiceOptions.registerFlags(&c.Flags) | 808 » » c.ClientOptions.registerFlags(&c.Flags) |
| 804 c.Flags.StringVar(&c.version, "version", "<version>", "Package v ersion to describe.") | 809 c.Flags.StringVar(&c.version, "version", "<version>", "Package v ersion to describe.") |
| 805 return c | 810 return c |
| 806 }, | 811 }, |
| 807 } | 812 } |
| 808 | 813 |
| 809 type describeRun struct { | 814 type describeRun struct { |
| 810 Subcommand | 815 Subcommand |
| 811 » ServiceOptions | 816 » ClientOptions |
| 812 | 817 |
| 813 version string | 818 version string |
| 814 } | 819 } |
| 815 | 820 |
| 816 func (c *describeRun) Run(a subcommands.Application, args []string) int { | 821 func (c *describeRun) Run(a subcommands.Application, args []string) int { |
| 817 if !c.init(args, 1, 1) { | 822 if !c.init(args, 1, 1) { |
| 818 return 1 | 823 return 1 |
| 819 } | 824 } |
| 820 » return c.done(describeInstance(args[0], c.version, c.ServiceOptions)) | 825 » return c.done(describeInstance(args[0], c.version, c.ClientOptions)) |
| 821 } | 826 } |
| 822 | 827 |
| 823 func describeInstance(pkg, version string, serviceOpts ServiceOptions) (*describ eOutput, error) { | 828 func describeInstance(pkg, version string, clientOpts ClientOptions) (*describeO utput, error) { |
| 824 » client, err := serviceOpts.makeCipdClient("") | 829 » client, err := clientOpts.makeCipdClient("") |
| 825 if err != nil { | 830 if err != nil { |
| 826 return nil, err | 831 return nil, err |
| 827 } | 832 } |
| 828 defer client.Close() | 833 defer client.Close() |
| 829 | 834 |
| 830 // Grab instance ID. | 835 // Grab instance ID. |
| 831 pin, err := client.ResolveVersion(pkg, version) | 836 pin, err := client.ResolveVersion(pkg, version) |
| 832 if err != nil { | 837 if err != nil { |
| 833 return nil, err | 838 return nil, err |
| 834 } | 839 } |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 902 // 'set-ref' subcommand. | 907 // 'set-ref' subcommand. |
| 903 | 908 |
| 904 var cmdSetRef = &subcommands.Command{ | 909 var cmdSetRef = &subcommands.Command{ |
| 905 UsageLine: "set-ref <package or package prefix> [options]", | 910 UsageLine: "set-ref <package or package prefix> [options]", |
| 906 ShortDesc: "moves a ref to point to a given version", | 911 ShortDesc: "moves a ref to point to a given version", |
| 907 LongDesc: "Moves a ref to point to a given version.", | 912 LongDesc: "Moves a ref to point to a given version.", |
| 908 CommandRun: func() subcommands.CommandRun { | 913 CommandRun: func() subcommands.CommandRun { |
| 909 c := &setRefRun{} | 914 c := &setRefRun{} |
| 910 c.registerBaseFlags() | 915 c.registerBaseFlags() |
| 911 c.RefsOptions.registerFlags(&c.Flags) | 916 c.RefsOptions.registerFlags(&c.Flags) |
| 912 » » c.ServiceOptions.registerFlags(&c.Flags) | 917 » » c.ClientOptions.registerFlags(&c.Flags) |
| 913 c.Flags.StringVar(&c.version, "version", "<version>", "Package v ersion to point the ref to.") | 918 c.Flags.StringVar(&c.version, "version", "<version>", "Package v ersion to point the ref to.") |
| 914 return c | 919 return c |
| 915 }, | 920 }, |
| 916 } | 921 } |
| 917 | 922 |
| 918 type setRefRun struct { | 923 type setRefRun struct { |
| 919 Subcommand | 924 Subcommand |
| 920 RefsOptions | 925 RefsOptions |
| 921 » ServiceOptions | 926 » ClientOptions |
| 922 | 927 |
| 923 version string | 928 version string |
| 924 } | 929 } |
| 925 | 930 |
| 926 func (c *setRefRun) Run(a subcommands.Application, args []string) int { | 931 func (c *setRefRun) Run(a subcommands.Application, args []string) int { |
| 927 if !c.init(args, 1, 1) { | 932 if !c.init(args, 1, 1) { |
| 928 return 1 | 933 return 1 |
| 929 } | 934 } |
| 930 if len(c.refs) == 0 { | 935 if len(c.refs) == 0 { |
| 931 return c.done(nil, makeCLIError("at least one -ref must be provi ded")) | 936 return c.done(nil, makeCLIError("at least one -ref must be provi ded")) |
| 932 } | 937 } |
| 933 » return c.doneWithPins(setRefOrTag(args[0], c.version, c.ServiceOptions, | 938 » return c.doneWithPins(setRefOrTag(args[0], c.version, c.ClientOptions, |
| 934 func(client cipd.Client, pin common.Pin) error { | 939 func(client cipd.Client, pin common.Pin) error { |
| 935 for _, ref := range c.refs { | 940 for _, ref := range c.refs { |
| 936 if err := client.SetRefWhenReady(ref, pin); err != nil { | 941 if err := client.SetRefWhenReady(ref, pin); err != nil { |
| 937 return err | 942 return err |
| 938 } | 943 } |
| 939 } | 944 } |
| 940 return nil | 945 return nil |
| 941 })) | 946 })) |
| 942 } | 947 } |
| 943 | 948 |
| 944 func setRefOrTag(packagePrefix, version string, serviceOpts ServiceOptions, | 949 func setRefOrTag(packagePrefix, version string, clientOpts ClientOptions, |
| 945 updatePin func(client cipd.Client, pin common.Pin) error) ([]pinInfo, er ror) { | 950 updatePin func(client cipd.Client, pin common.Pin) error) ([]pinInfo, er ror) { |
| 946 » client, err := serviceOpts.makeCipdClient("") | 951 » client, err := clientOpts.makeCipdClient("") |
| 947 if err != nil { | 952 if err != nil { |
| 948 return nil, err | 953 return nil, err |
| 949 } | 954 } |
| 950 defer client.Close() | 955 defer client.Close() |
| 951 | 956 |
| 952 // Do not touch anything if some packages do not have requested version. So | 957 // Do not touch anything if some packages do not have requested version. So |
| 953 // resolve versions first and only then move refs. | 958 // resolve versions first and only then move refs. |
| 954 pins, err := performBatchOperation(batchOperation{ | 959 pins, err := performBatchOperation(batchOperation{ |
| 955 client: client, | 960 client: client, |
| 956 packagePrefix: packagePrefix, | 961 packagePrefix: packagePrefix, |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 992 // 'set-tag' subcommand. | 997 // 'set-tag' subcommand. |
| 993 | 998 |
| 994 var cmdSetTag = &subcommands.Command{ | 999 var cmdSetTag = &subcommands.Command{ |
| 995 UsageLine: "set-tag <package or package prefix> -tag=key:value [options] ", | 1000 UsageLine: "set-tag <package or package prefix> -tag=key:value [options] ", |
| 996 ShortDesc: "tags package of a specific version", | 1001 ShortDesc: "tags package of a specific version", |
| 997 LongDesc: "Tags package of a specific version", | 1002 LongDesc: "Tags package of a specific version", |
| 998 CommandRun: func() subcommands.CommandRun { | 1003 CommandRun: func() subcommands.CommandRun { |
| 999 c := &setTagRun{} | 1004 c := &setTagRun{} |
| 1000 c.registerBaseFlags() | 1005 c.registerBaseFlags() |
| 1001 c.TagsOptions.registerFlags(&c.Flags) | 1006 c.TagsOptions.registerFlags(&c.Flags) |
| 1002 » » c.ServiceOptions.registerFlags(&c.Flags) | 1007 » » c.ClientOptions.registerFlags(&c.Flags) |
| 1003 c.Flags.StringVar(&c.version, "version", "<version>", | 1008 c.Flags.StringVar(&c.version, "version", "<version>", |
| 1004 "Package version to resolve. Could also be itself a tag or ref") | 1009 "Package version to resolve. Could also be itself a tag or ref") |
| 1005 return c | 1010 return c |
| 1006 }, | 1011 }, |
| 1007 } | 1012 } |
| 1008 | 1013 |
| 1009 type setTagRun struct { | 1014 type setTagRun struct { |
| 1010 Subcommand | 1015 Subcommand |
| 1011 TagsOptions | 1016 TagsOptions |
| 1012 » ServiceOptions | 1017 » ClientOptions |
| 1013 | 1018 |
| 1014 version string | 1019 version string |
| 1015 } | 1020 } |
| 1016 | 1021 |
| 1017 func (c *setTagRun) Run(a subcommands.Application, args []string) int { | 1022 func (c *setTagRun) Run(a subcommands.Application, args []string) int { |
| 1018 if !c.init(args, 1, 1) { | 1023 if !c.init(args, 1, 1) { |
| 1019 return 1 | 1024 return 1 |
| 1020 } | 1025 } |
| 1021 if len(c.tags) == 0 { | 1026 if len(c.tags) == 0 { |
| 1022 return c.done(nil, makeCLIError("at least one -tag must be provi ded")) | 1027 return c.done(nil, makeCLIError("at least one -tag must be provi ded")) |
| 1023 } | 1028 } |
| 1024 » return c.done(setRefOrTag(args[0], c.version, c.ServiceOptions, | 1029 » return c.done(setRefOrTag(args[0], c.version, c.ClientOptions, |
| 1025 func(client cipd.Client, pin common.Pin) error { | 1030 func(client cipd.Client, pin common.Pin) error { |
| 1026 return client.AttachTagsWhenReady(pin, c.tags) | 1031 return client.AttachTagsWhenReady(pin, c.tags) |
| 1027 })) | 1032 })) |
| 1028 } | 1033 } |
| 1029 | 1034 |
| 1030 //////////////////////////////////////////////////////////////////////////////// | 1035 //////////////////////////////////////////////////////////////////////////////// |
| 1031 // 'ls' subcommand. | 1036 // 'ls' subcommand. |
| 1032 | 1037 |
| 1033 var cmdListPackages = &subcommands.Command{ | 1038 var cmdListPackages = &subcommands.Command{ |
| 1034 UsageLine: "ls [-r] [<prefix string>]", | 1039 UsageLine: "ls [-r] [<prefix string>]", |
| 1035 ShortDesc: "lists matching packages on the server", | 1040 ShortDesc: "lists matching packages on the server", |
| 1036 LongDesc: "Queries the backend for a list of packages in the given path to " + | 1041 LongDesc: "Queries the backend for a list of packages in the given path to " + |
| 1037 "which the user has access, optionally recursively.", | 1042 "which the user has access, optionally recursively.", |
| 1038 CommandRun: func() subcommands.CommandRun { | 1043 CommandRun: func() subcommands.CommandRun { |
| 1039 c := &listPackagesRun{} | 1044 c := &listPackagesRun{} |
| 1040 c.registerBaseFlags() | 1045 c.registerBaseFlags() |
| 1041 » » c.ServiceOptions.registerFlags(&c.Flags) | 1046 » » c.ClientOptions.registerFlags(&c.Flags) |
| 1042 c.Flags.BoolVar(&c.recursive, "r", false, "Whether to list packa ges in subdirectories.") | 1047 c.Flags.BoolVar(&c.recursive, "r", false, "Whether to list packa ges in subdirectories.") |
| 1043 return c | 1048 return c |
| 1044 }, | 1049 }, |
| 1045 } | 1050 } |
| 1046 | 1051 |
| 1047 type listPackagesRun struct { | 1052 type listPackagesRun struct { |
| 1048 Subcommand | 1053 Subcommand |
| 1049 » ServiceOptions | 1054 » ClientOptions |
| 1050 | 1055 |
| 1051 recursive bool | 1056 recursive bool |
| 1052 } | 1057 } |
| 1053 | 1058 |
| 1054 func (c *listPackagesRun) Run(a subcommands.Application, args []string) int { | 1059 func (c *listPackagesRun) Run(a subcommands.Application, args []string) int { |
| 1055 if !c.init(args, 0, 1) { | 1060 if !c.init(args, 0, 1) { |
| 1056 return 1 | 1061 return 1 |
| 1057 } | 1062 } |
| 1058 path := "" | 1063 path := "" |
| 1059 if len(args) == 1 { | 1064 if len(args) == 1 { |
| 1060 path = args[0] | 1065 path = args[0] |
| 1061 } | 1066 } |
| 1062 » return c.done(listPackages(path, c.recursive, c.ServiceOptions)) | 1067 » return c.done(listPackages(path, c.recursive, c.ClientOptions)) |
| 1063 } | 1068 } |
| 1064 | 1069 |
| 1065 func listPackages(path string, recursive bool, serviceOpts ServiceOptions) ([]st ring, error) { | 1070 func listPackages(path string, recursive bool, clientOpts ClientOptions) ([]stri ng, error) { |
| 1066 » client, err := serviceOpts.makeCipdClient("") | 1071 » client, err := clientOpts.makeCipdClient("") |
| 1067 if err != nil { | 1072 if err != nil { |
| 1068 return nil, err | 1073 return nil, err |
| 1069 } | 1074 } |
| 1070 defer client.Close() | 1075 defer client.Close() |
| 1071 packages, err := client.ListPackages(path, recursive) | 1076 packages, err := client.ListPackages(path, recursive) |
| 1072 if err != nil { | 1077 if err != nil { |
| 1073 return nil, err | 1078 return nil, err |
| 1074 } | 1079 } |
| 1075 if len(packages) == 0 { | 1080 if len(packages) == 0 { |
| 1076 fmt.Println("No matching packages.") | 1081 fmt.Println("No matching packages.") |
| 1077 } else { | 1082 } else { |
| 1078 for _, p := range packages { | 1083 for _, p := range packages { |
| 1079 fmt.Println(p) | 1084 fmt.Println(p) |
| 1080 } | 1085 } |
| 1081 } | 1086 } |
| 1082 return packages, nil | 1087 return packages, nil |
| 1083 } | 1088 } |
| 1084 | 1089 |
| 1085 //////////////////////////////////////////////////////////////////////////////// | 1090 //////////////////////////////////////////////////////////////////////////////// |
| 1086 // 'search' subcommand. | 1091 // 'search' subcommand. |
| 1087 | 1092 |
| 1088 var cmdSearch = &subcommands.Command{ | 1093 var cmdSearch = &subcommands.Command{ |
| 1089 UsageLine: "search [package] -tag key:value [options]", | 1094 UsageLine: "search [package] -tag key:value [options]", |
| 1090 ShortDesc: "searches for package instances by tag", | 1095 ShortDesc: "searches for package instances by tag", |
| 1091 LongDesc: "Searches for package instances by tag, optionally constraine d by package name.", | 1096 LongDesc: "Searches for package instances by tag, optionally constraine d by package name.", |
| 1092 CommandRun: func() subcommands.CommandRun { | 1097 CommandRun: func() subcommands.CommandRun { |
| 1093 c := &searchRun{} | 1098 c := &searchRun{} |
| 1094 c.registerBaseFlags() | 1099 c.registerBaseFlags() |
| 1095 » » c.ServiceOptions.registerFlags(&c.Flags) | 1100 » » c.ClientOptions.registerFlags(&c.Flags) |
| 1096 c.TagsOptions.registerFlags(&c.Flags) | 1101 c.TagsOptions.registerFlags(&c.Flags) |
| 1097 return c | 1102 return c |
| 1098 }, | 1103 }, |
| 1099 } | 1104 } |
| 1100 | 1105 |
| 1101 type searchRun struct { | 1106 type searchRun struct { |
| 1102 Subcommand | 1107 Subcommand |
| 1103 » ServiceOptions | 1108 » ClientOptions |
| 1104 TagsOptions | 1109 TagsOptions |
| 1105 } | 1110 } |
| 1106 | 1111 |
| 1107 func (c *searchRun) Run(a subcommands.Application, args []string) int { | 1112 func (c *searchRun) Run(a subcommands.Application, args []string) int { |
| 1108 if !c.init(args, 0, 1) { | 1113 if !c.init(args, 0, 1) { |
| 1109 return 1 | 1114 return 1 |
| 1110 } | 1115 } |
| 1111 if len(c.tags) != 1 { | 1116 if len(c.tags) != 1 { |
| 1112 return c.done(nil, makeCLIError("exactly one -tag must be provid ed")) | 1117 return c.done(nil, makeCLIError("exactly one -tag must be provid ed")) |
| 1113 } | 1118 } |
| 1114 packageName := "" | 1119 packageName := "" |
| 1115 if len(args) == 1 { | 1120 if len(args) == 1 { |
| 1116 packageName = args[0] | 1121 packageName = args[0] |
| 1117 } | 1122 } |
| 1118 » return c.done(searchInstances(packageName, c.tags[0], c.ServiceOptions)) | 1123 » return c.done(searchInstances(packageName, c.tags[0], c.ClientOptions)) |
| 1119 } | 1124 } |
| 1120 | 1125 |
| 1121 func searchInstances(packageName, tag string, serviceOpts ServiceOptions) ([]com mon.Pin, error) { | 1126 func searchInstances(packageName, tag string, clientOpts ClientOptions) ([]commo n.Pin, error) { |
| 1122 » client, err := serviceOpts.makeCipdClient("") | 1127 » client, err := clientOpts.makeCipdClient("") |
| 1123 if err != nil { | 1128 if err != nil { |
| 1124 return nil, err | 1129 return nil, err |
| 1125 } | 1130 } |
| 1126 defer client.Close() | 1131 defer client.Close() |
| 1127 pins, err := client.SearchInstances(tag, packageName) | 1132 pins, err := client.SearchInstances(tag, packageName) |
| 1128 if err != nil { | 1133 if err != nil { |
| 1129 return nil, err | 1134 return nil, err |
| 1130 } | 1135 } |
| 1131 if len(pins) == 0 { | 1136 if len(pins) == 0 { |
| 1132 fmt.Println("No matching packages.") | 1137 fmt.Println("No matching packages.") |
| 1133 } else { | 1138 } else { |
| 1134 fmt.Println("Packages:") | 1139 fmt.Println("Packages:") |
| 1135 for _, pin := range pins { | 1140 for _, pin := range pins { |
| 1136 fmt.Printf(" %s\n", pin) | 1141 fmt.Printf(" %s\n", pin) |
| 1137 } | 1142 } |
| 1138 } | 1143 } |
| 1139 return pins, err | 1144 return pins, err |
| 1140 } | 1145 } |
| 1141 | 1146 |
| 1142 //////////////////////////////////////////////////////////////////////////////// | 1147 //////////////////////////////////////////////////////////////////////////////// |
| 1143 // 'acl-list' subcommand. | 1148 // 'acl-list' subcommand. |
| 1144 | 1149 |
| 1145 var cmdListACL = &subcommands.Command{ | 1150 var cmdListACL = &subcommands.Command{ |
| 1146 UsageLine: "acl-list <package subpath>", | 1151 UsageLine: "acl-list <package subpath>", |
| 1147 ShortDesc: "lists package path Access Control List", | 1152 ShortDesc: "lists package path Access Control List", |
| 1148 LongDesc: "Lists package path Access Control List.", | 1153 LongDesc: "Lists package path Access Control List.", |
| 1149 CommandRun: func() subcommands.CommandRun { | 1154 CommandRun: func() subcommands.CommandRun { |
| 1150 c := &listACLRun{} | 1155 c := &listACLRun{} |
| 1151 c.registerBaseFlags() | 1156 c.registerBaseFlags() |
| 1152 » » c.ServiceOptions.registerFlags(&c.Flags) | 1157 » » c.ClientOptions.registerFlags(&c.Flags) |
| 1153 return c | 1158 return c |
| 1154 }, | 1159 }, |
| 1155 } | 1160 } |
| 1156 | 1161 |
| 1157 type listACLRun struct { | 1162 type listACLRun struct { |
| 1158 Subcommand | 1163 Subcommand |
| 1159 » ServiceOptions | 1164 » ClientOptions |
| 1160 } | 1165 } |
| 1161 | 1166 |
| 1162 func (c *listACLRun) Run(a subcommands.Application, args []string) int { | 1167 func (c *listACLRun) Run(a subcommands.Application, args []string) int { |
| 1163 if !c.init(args, 1, 1) { | 1168 if !c.init(args, 1, 1) { |
| 1164 return 1 | 1169 return 1 |
| 1165 } | 1170 } |
| 1166 » return c.done(listACL(args[0], c.ServiceOptions)) | 1171 » return c.done(listACL(args[0], c.ClientOptions)) |
| 1167 } | 1172 } |
| 1168 | 1173 |
| 1169 func listACL(packagePath string, serviceOpts ServiceOptions) (map[string][]cipd. PackageACL, error) { | 1174 func listACL(packagePath string, clientOpts ClientOptions) (map[string][]cipd.Pa ckageACL, error) { |
| 1170 » client, err := serviceOpts.makeCipdClient("") | 1175 » client, err := clientOpts.makeCipdClient("") |
| 1171 if err != nil { | 1176 if err != nil { |
| 1172 return nil, err | 1177 return nil, err |
| 1173 } | 1178 } |
| 1174 defer client.Close() | 1179 defer client.Close() |
| 1175 acls, err := client.FetchACL(packagePath) | 1180 acls, err := client.FetchACL(packagePath) |
| 1176 if err != nil { | 1181 if err != nil { |
| 1177 return nil, err | 1182 return nil, err |
| 1178 } | 1183 } |
| 1179 | 1184 |
| 1180 // Split by role, drop empty ACLs. | 1185 // Split by role, drop empty ACLs. |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1226 return nil | 1231 return nil |
| 1227 } | 1232 } |
| 1228 | 1233 |
| 1229 var cmdEditACL = &subcommands.Command{ | 1234 var cmdEditACL = &subcommands.Command{ |
| 1230 UsageLine: "acl-edit <package subpath> [options]", | 1235 UsageLine: "acl-edit <package subpath> [options]", |
| 1231 ShortDesc: "modifies package path Access Control List", | 1236 ShortDesc: "modifies package path Access Control List", |
| 1232 LongDesc: "Modifies package path Access Control List.", | 1237 LongDesc: "Modifies package path Access Control List.", |
| 1233 CommandRun: func() subcommands.CommandRun { | 1238 CommandRun: func() subcommands.CommandRun { |
| 1234 c := &editACLRun{} | 1239 c := &editACLRun{} |
| 1235 c.registerBaseFlags() | 1240 c.registerBaseFlags() |
| 1236 » » c.ServiceOptions.registerFlags(&c.Flags) | 1241 » » c.ClientOptions.registerFlags(&c.Flags) |
| 1237 c.Flags.Var(&c.owner, "owner", "Users or groups to grant OWNER r ole.") | 1242 c.Flags.Var(&c.owner, "owner", "Users or groups to grant OWNER r ole.") |
| 1238 c.Flags.Var(&c.writer, "writer", "Users or groups to grant WRITE R role.") | 1243 c.Flags.Var(&c.writer, "writer", "Users or groups to grant WRITE R role.") |
| 1239 c.Flags.Var(&c.reader, "reader", "Users or groups to grant READE R role.") | 1244 c.Flags.Var(&c.reader, "reader", "Users or groups to grant READE R role.") |
| 1240 c.Flags.Var(&c.revoke, "revoke", "Users or groups to remove from all roles.") | 1245 c.Flags.Var(&c.revoke, "revoke", "Users or groups to remove from all roles.") |
| 1241 return c | 1246 return c |
| 1242 }, | 1247 }, |
| 1243 } | 1248 } |
| 1244 | 1249 |
| 1245 type editACLRun struct { | 1250 type editACLRun struct { |
| 1246 Subcommand | 1251 Subcommand |
| 1247 » ServiceOptions | 1252 » ClientOptions |
| 1248 | 1253 |
| 1249 owner principalsList | 1254 owner principalsList |
| 1250 writer principalsList | 1255 writer principalsList |
| 1251 reader principalsList | 1256 reader principalsList |
| 1252 revoke principalsList | 1257 revoke principalsList |
| 1253 } | 1258 } |
| 1254 | 1259 |
| 1255 func (c *editACLRun) Run(a subcommands.Application, args []string) int { | 1260 func (c *editACLRun) Run(a subcommands.Application, args []string) int { |
| 1256 if !c.init(args, 1, 1) { | 1261 if !c.init(args, 1, 1) { |
| 1257 return 1 | 1262 return 1 |
| 1258 } | 1263 } |
| 1259 » return c.done(nil, editACL(args[0], c.owner, c.writer, c.reader, c.revok e, c.ServiceOptions)) | 1264 » return c.done(nil, editACL(args[0], c.owner, c.writer, c.reader, c.revok e, c.ClientOptions)) |
| 1260 } | 1265 } |
| 1261 | 1266 |
| 1262 func editACL(packagePath string, owners, writers, readers, revoke principalsList , serviceOpts ServiceOptions) error { | 1267 func editACL(packagePath string, owners, writers, readers, revoke principalsList , clientOpts ClientOptions) error { |
| 1263 changes := []cipd.PackageACLChange{} | 1268 changes := []cipd.PackageACLChange{} |
| 1264 | 1269 |
| 1265 makeChanges := func(action cipd.PackageACLChangeAction, role string, lis t principalsList) { | 1270 makeChanges := func(action cipd.PackageACLChangeAction, role string, lis t principalsList) { |
| 1266 for _, p := range list { | 1271 for _, p := range list { |
| 1267 changes = append(changes, cipd.PackageACLChange{ | 1272 changes = append(changes, cipd.PackageACLChange{ |
| 1268 Action: action, | 1273 Action: action, |
| 1269 Role: role, | 1274 Role: role, |
| 1270 Principal: p, | 1275 Principal: p, |
| 1271 }) | 1276 }) |
| 1272 } | 1277 } |
| 1273 } | 1278 } |
| 1274 | 1279 |
| 1275 makeChanges(cipd.GrantRole, "OWNER", owners) | 1280 makeChanges(cipd.GrantRole, "OWNER", owners) |
| 1276 makeChanges(cipd.GrantRole, "WRITER", writers) | 1281 makeChanges(cipd.GrantRole, "WRITER", writers) |
| 1277 makeChanges(cipd.GrantRole, "READER", readers) | 1282 makeChanges(cipd.GrantRole, "READER", readers) |
| 1278 | 1283 |
| 1279 makeChanges(cipd.RevokeRole, "OWNER", revoke) | 1284 makeChanges(cipd.RevokeRole, "OWNER", revoke) |
| 1280 makeChanges(cipd.RevokeRole, "WRITER", revoke) | 1285 makeChanges(cipd.RevokeRole, "WRITER", revoke) |
| 1281 makeChanges(cipd.RevokeRole, "READER", revoke) | 1286 makeChanges(cipd.RevokeRole, "READER", revoke) |
| 1282 | 1287 |
| 1283 if len(changes) == 0 { | 1288 if len(changes) == 0 { |
| 1284 return nil | 1289 return nil |
| 1285 } | 1290 } |
| 1286 | 1291 |
| 1287 » client, err := serviceOpts.makeCipdClient("") | 1292 » client, err := clientOpts.makeCipdClient("") |
| 1288 if err != nil { | 1293 if err != nil { |
| 1289 return err | 1294 return err |
| 1290 } | 1295 } |
| 1291 defer client.Close() | 1296 defer client.Close() |
| 1292 err = client.ModifyACL(packagePath, changes) | 1297 err = client.ModifyACL(packagePath, changes) |
| 1293 if err != nil { | 1298 if err != nil { |
| 1294 return err | 1299 return err |
| 1295 } | 1300 } |
| 1296 fmt.Println("ACL changes applied.") | 1301 fmt.Println("ACL changes applied.") |
| 1297 return nil | 1302 return nil |
| (...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1396 //////////////////////////////////////////////////////////////////////////////// | 1401 //////////////////////////////////////////////////////////////////////////////// |
| 1397 // 'pkg-fetch' subcommand. | 1402 // 'pkg-fetch' subcommand. |
| 1398 | 1403 |
| 1399 var cmdFetch = &subcommands.Command{ | 1404 var cmdFetch = &subcommands.Command{ |
| 1400 UsageLine: "pkg-fetch <package> [options]", | 1405 UsageLine: "pkg-fetch <package> [options]", |
| 1401 ShortDesc: "fetches a package instance file from the repository", | 1406 ShortDesc: "fetches a package instance file from the repository", |
| 1402 LongDesc: "Fetches a package instance file from the repository.", | 1407 LongDesc: "Fetches a package instance file from the repository.", |
| 1403 CommandRun: func() subcommands.CommandRun { | 1408 CommandRun: func() subcommands.CommandRun { |
| 1404 c := &fetchRun{} | 1409 c := &fetchRun{} |
| 1405 c.registerBaseFlags() | 1410 c.registerBaseFlags() |
| 1406 » » c.ServiceOptions.registerFlags(&c.Flags) | 1411 » » c.ClientOptions.registerFlags(&c.Flags) |
| 1407 c.Flags.StringVar(&c.version, "version", "<version>", "Package v ersion to fetch.") | 1412 c.Flags.StringVar(&c.version, "version", "<version>", "Package v ersion to fetch.") |
| 1408 c.Flags.StringVar(&c.outputPath, "out", "<path>", "Path to a fil e to write fetch to.") | 1413 c.Flags.StringVar(&c.outputPath, "out", "<path>", "Path to a fil e to write fetch to.") |
| 1409 return c | 1414 return c |
| 1410 }, | 1415 }, |
| 1411 } | 1416 } |
| 1412 | 1417 |
| 1413 type fetchRun struct { | 1418 type fetchRun struct { |
| 1414 Subcommand | 1419 Subcommand |
| 1415 » ServiceOptions | 1420 » ClientOptions |
| 1416 | 1421 |
| 1417 version string | 1422 version string |
| 1418 outputPath string | 1423 outputPath string |
| 1419 } | 1424 } |
| 1420 | 1425 |
| 1421 func (c *fetchRun) Run(a subcommands.Application, args []string) int { | 1426 func (c *fetchRun) Run(a subcommands.Application, args []string) int { |
| 1422 if !c.init(args, 1, 1) { | 1427 if !c.init(args, 1, 1) { |
| 1423 return 1 | 1428 return 1 |
| 1424 } | 1429 } |
| 1425 » return c.done(fetchInstanceFile(args[0], c.version, c.outputPath, c.Serv iceOptions)) | 1430 » return c.done(fetchInstanceFile(args[0], c.version, c.outputPath, c.Clie ntOptions)) |
| 1426 } | 1431 } |
| 1427 | 1432 |
| 1428 func fetchInstanceFile(packageName, version, instanceFile string, serviceOpts Se rviceOptions) (common.Pin, error) { | 1433 func fetchInstanceFile(packageName, version, instanceFile string, clientOpts Cli entOptions) (common.Pin, error) { |
| 1429 » client, err := serviceOpts.makeCipdClient("") | 1434 » client, err := clientOpts.makeCipdClient("") |
| 1430 if err != nil { | 1435 if err != nil { |
| 1431 return common.Pin{}, err | 1436 return common.Pin{}, err |
| 1432 } | 1437 } |
| 1433 defer client.Close() | 1438 defer client.Close() |
| 1434 pin, err := client.ResolveVersion(packageName, version) | 1439 pin, err := client.ResolveVersion(packageName, version) |
| 1435 if err != nil { | 1440 if err != nil { |
| 1436 return common.Pin{}, err | 1441 return common.Pin{}, err |
| 1437 } | 1442 } |
| 1438 | 1443 |
| 1439 out, err := os.OpenFile(instanceFile, os.O_CREATE|os.O_WRONLY, 0666) | 1444 out, err := os.OpenFile(instanceFile, os.O_CREATE|os.O_WRONLY, 0666) |
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1525 | 1530 |
| 1526 var cmdRegister = &subcommands.Command{ | 1531 var cmdRegister = &subcommands.Command{ |
| 1527 UsageLine: "pkg-register <package instance file>", | 1532 UsageLine: "pkg-register <package instance file>", |
| 1528 ShortDesc: "uploads and registers package instance in the package reposi tory", | 1533 ShortDesc: "uploads and registers package instance in the package reposi tory", |
| 1529 LongDesc: "Uploads and registers package instance in the package reposi tory.", | 1534 LongDesc: "Uploads and registers package instance in the package reposi tory.", |
| 1530 CommandRun: func() subcommands.CommandRun { | 1535 CommandRun: func() subcommands.CommandRun { |
| 1531 c := ®isterRun{} | 1536 c := ®isterRun{} |
| 1532 c.registerBaseFlags() | 1537 c.registerBaseFlags() |
| 1533 c.RefsOptions.registerFlags(&c.Flags) | 1538 c.RefsOptions.registerFlags(&c.Flags) |
| 1534 c.TagsOptions.registerFlags(&c.Flags) | 1539 c.TagsOptions.registerFlags(&c.Flags) |
| 1535 » » c.ServiceOptions.registerFlags(&c.Flags) | 1540 » » c.ClientOptions.registerFlags(&c.Flags) |
| 1536 c.UploadOptions.registerFlags(&c.Flags) | 1541 c.UploadOptions.registerFlags(&c.Flags) |
| 1537 return c | 1542 return c |
| 1538 }, | 1543 }, |
| 1539 } | 1544 } |
| 1540 | 1545 |
| 1541 type registerRun struct { | 1546 type registerRun struct { |
| 1542 Subcommand | 1547 Subcommand |
| 1543 RefsOptions | 1548 RefsOptions |
| 1544 TagsOptions | 1549 TagsOptions |
| 1545 » ServiceOptions | 1550 » ClientOptions |
| 1546 UploadOptions | 1551 UploadOptions |
| 1547 } | 1552 } |
| 1548 | 1553 |
| 1549 func (c *registerRun) Run(a subcommands.Application, args []string) int { | 1554 func (c *registerRun) Run(a subcommands.Application, args []string) int { |
| 1550 if !c.init(args, 1, 1) { | 1555 if !c.init(args, 1, 1) { |
| 1551 return 1 | 1556 return 1 |
| 1552 } | 1557 } |
| 1553 » return c.done(registerInstanceFile(args[0], c.RefsOptions, c.TagsOptions , c.ServiceOptions, c.UploadOptions)) | 1558 » return c.done(registerInstanceFile(args[0], c.RefsOptions, c.TagsOptions , c.ClientOptions, c.UploadOptions)) |
| 1554 } | 1559 } |
| 1555 | 1560 |
| 1556 func registerInstanceFile(instanceFile string, refsOpts RefsOptions, | 1561 func registerInstanceFile(instanceFile string, refsOpts RefsOptions, |
| 1557 » tagsOpts TagsOptions, serviceOpts ServiceOptions, uploadOpts UploadOptio ns) (common.Pin, error) { | 1562 » tagsOpts TagsOptions, clientOpts ClientOptions, uploadOpts UploadOptions ) (common.Pin, error) { |
| 1558 inst, err := local.OpenInstanceFile(instanceFile, "") | 1563 inst, err := local.OpenInstanceFile(instanceFile, "") |
| 1559 if err != nil { | 1564 if err != nil { |
| 1560 return common.Pin{}, err | 1565 return common.Pin{}, err |
| 1561 } | 1566 } |
| 1562 defer inst.Close() | 1567 defer inst.Close() |
| 1563 » client, err := serviceOpts.makeCipdClient("") | 1568 » client, err := clientOpts.makeCipdClient("") |
| 1564 if err != nil { | 1569 if err != nil { |
| 1565 return common.Pin{}, err | 1570 return common.Pin{}, err |
| 1566 } | 1571 } |
| 1567 defer client.Close() | 1572 defer client.Close() |
| 1568 inspectInstance(inst, false) | 1573 inspectInstance(inst, false) |
| 1569 err = client.RegisterInstance(inst, uploadOpts.verificationTimeout) | 1574 err = client.RegisterInstance(inst, uploadOpts.verificationTimeout) |
| 1570 if err != nil { | 1575 if err != nil { |
| 1571 return common.Pin{}, err | 1576 return common.Pin{}, err |
| 1572 } | 1577 } |
| 1573 err = client.AttachTagsWhenReady(inst.Pin(), tagsOpts.tags) | 1578 err = client.AttachTagsWhenReady(inst.Pin(), tagsOpts.tags) |
| (...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1663 newArgs = append(newArgs, cmd) | 1668 newArgs = append(newArgs, cmd) |
| 1664 } | 1669 } |
| 1665 newArgs = append(newArgs, flags...) | 1670 newArgs = append(newArgs, flags...) |
| 1666 newArgs = append(newArgs, positional...) | 1671 newArgs = append(newArgs, positional...) |
| 1667 return newArgs | 1672 return newArgs |
| 1668 } | 1673 } |
| 1669 | 1674 |
| 1670 func main() { | 1675 func main() { |
| 1671 os.Exit(subcommands.Run(application, fixFlagsPosition(os.Args[1:]))) | 1676 os.Exit(subcommands.Run(application, fixFlagsPosition(os.Args[1:]))) |
| 1672 } | 1677 } |
| OLD | NEW |