| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // Client side of for Chrome Infra Package Deployer. | 5 // Client side of for Chrome Infra Package Deployer. |
| 6 // | 6 // |
| 7 // Subcommand starting with 'pkg-' are low level commands operating on package | 7 // Subcommand starting with 'pkg-' are low level commands operating on package |
| 8 // files on disk. | 8 // files on disk. |
| 9 package main | 9 package main |
| 10 | 10 |
| (...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 214 type commandLineError struct { | 214 type commandLineError struct { |
| 215 error | 215 error |
| 216 } | 216 } |
| 217 | 217 |
| 218 // makeCLIError returns new commandLineError. | 218 // makeCLIError returns new commandLineError. |
| 219 func makeCLIError(msg string, args ...interface{}) error { | 219 func makeCLIError(msg string, args ...interface{}) error { |
| 220 return commandLineError{fmt.Errorf(msg, args...)} | 220 return commandLineError{fmt.Errorf(msg, args...)} |
| 221 } | 221 } |
| 222 | 222 |
| 223 //////////////////////////////////////////////////////////////////////////////// | 223 //////////////////////////////////////////////////////////////////////////////// |
| 224 // ServiceOptions mixin. | 224 // ClientOptions mixin. |
| 225 | 225 |
| 226 // ServiceOptions defines command line arguments related to communication | 226 // ClientOptions defines command line arguments related to CIPD client creation. |
| 227 // with the remote service. Subcommands that interact with the network embed it. | 227 // Subcommands that need a CIPD client embed it. |
| 228 type ServiceOptions struct { | 228 type ClientOptions struct { |
| 229 authFlags authcli.Flags | 229 authFlags authcli.Flags |
| 230 serviceURL string | 230 serviceURL string |
| 231 cacheDir string |
| 231 } | 232 } |
| 232 | 233 |
| 233 func (opts *ServiceOptions) registerFlags(f *flag.FlagSet) { | 234 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 := ®isterRun{} | 1534 c := ®isterRun{} |
| 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 Loading... |
| 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 } |
| OLD | NEW |