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

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