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

Side by Side Diff: client/cmd/cipd/main.go

Issue 1862303004: cipd: shared tag cache (Closed) Base URL: https://chromium.googlesource.com/external/github.com/luci/luci-go@master
Patch Set: nit Created 4 years, 8 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 unified diff | Download patch
« no previous file with comments | « client/cmd/cipd/friendly.go ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
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
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
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
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
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 := &registerRun{} 1536 c := &registerRun{}
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
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 }
OLDNEW
« no previous file with comments | « client/cmd/cipd/friendly.go ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698