mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
ed75c7727b
Use a tagged release of Cobra. All relevant PR's were merged, so the fork is no longer needed. Relevant changes: - spf13/cobra#552 Add a field to disable [flags] in UseLine() - spf13/cobra#567 Add `CalledAs` method to cobra.Command - spf13/cobra#580 Update error message for missing required flags - spf13/cobra#584 Add support for --version flag - spf13/cobra#614 If user has a project in symlink, just use its destination folder and work there - spf13/cobra#649 terminates the flags when -- is found in commandline - spf13/cobra#662 Add support for ignoring parse errors - spf13/cobra#686 doc: hide hidden parent flags Also various improvements were added for generating Bash completion scripts (currently not used by us) Fixes usage output for dockerd; Before this update: dockerd --help Usage: dockerd COMMAND A self-sufficient runtime for containers. After this update: dockerd --help Usage: dockerd [OPTIONS] [flags] A self-sufficient runtime for containers. Bump spf13/pflag to v1.0.1 Relevant changes: - spf13/pflag#106 allow lookup by shorthand - spf13/pflag#113 Add SortFlags option - spf13/pflag#138 Generate flag error output for errors returned from the parseFunc - spf13/pflag#141 Fixing Count flag usage string - spf13/pflag#143 add int16 flag - spf13/pflag#122 DurationSlice: implementation and tests - spf13/pflag#115 Implement BytesHex type of argument - spf13/pflag#150 Add uintSlice and boolSlice to name prettifier - spf13/pflag#155 Add multiline wrapping support - spf13/pflag#158 doc: clarify difference between string slice vs. array - spf13/pflag#160 add ability to ignore unknown flags - spf13/pflag#163 Allow Users To Show Deprecated Flags Hide [flags] in usage output Hides the [flags] in the usage output of commands (present in newer versions of Cobra), using the `.DisableFlagsInUseLine` option. Before this change: dockerd --help Usage: dockerd [OPTIONS] [flags] A self-sufficient runtime for containers. After this change: dockerd --help Usage: dockerd [OPTIONS] A self-sufficient runtime for containers. Signed-off-by: Sebastiaan van Stijn <github@gone.nl> Â# modified: vendor/github.com/spf13/pflag/string_array.go § Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
89 lines
2.5 KiB
Go
89 lines
2.5 KiB
Go
package cobra
|
|
|
|
import (
|
|
"fmt"
|
|
)
|
|
|
|
type PositionalArgs func(cmd *Command, args []string) error
|
|
|
|
// Legacy arg validation has the following behaviour:
|
|
// - root commands with no subcommands can take arbitrary arguments
|
|
// - root commands with subcommands will do subcommand validity checking
|
|
// - subcommands will always accept arbitrary arguments
|
|
func legacyArgs(cmd *Command, args []string) error {
|
|
// no subcommand, always take args
|
|
if !cmd.HasSubCommands() {
|
|
return nil
|
|
}
|
|
|
|
// root command with subcommands, do subcommand checking.
|
|
if !cmd.HasParent() && len(args) > 0 {
|
|
return fmt.Errorf("unknown command %q for %q%s", args[0], cmd.CommandPath(), cmd.findSuggestions(args[0]))
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// NoArgs returns an error if any args are included.
|
|
func NoArgs(cmd *Command, args []string) error {
|
|
if len(args) > 0 {
|
|
return fmt.Errorf("unknown command %q for %q", args[0], cmd.CommandPath())
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// OnlyValidArgs returns an error if any args are not in the list of ValidArgs.
|
|
func OnlyValidArgs(cmd *Command, args []string) error {
|
|
if len(cmd.ValidArgs) > 0 {
|
|
for _, v := range args {
|
|
if !stringInSlice(v, cmd.ValidArgs) {
|
|
return fmt.Errorf("invalid argument %q for %q%s", v, cmd.CommandPath(), cmd.findSuggestions(args[0]))
|
|
}
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// ArbitraryArgs never returns an error.
|
|
func ArbitraryArgs(cmd *Command, args []string) error {
|
|
return nil
|
|
}
|
|
|
|
// MinimumNArgs returns an error if there is not at least N args.
|
|
func MinimumNArgs(n int) PositionalArgs {
|
|
return func(cmd *Command, args []string) error {
|
|
if len(args) < n {
|
|
return fmt.Errorf("requires at least %d arg(s), only received %d", n, len(args))
|
|
}
|
|
return nil
|
|
}
|
|
}
|
|
|
|
// MaximumNArgs returns an error if there are more than N args.
|
|
func MaximumNArgs(n int) PositionalArgs {
|
|
return func(cmd *Command, args []string) error {
|
|
if len(args) > n {
|
|
return fmt.Errorf("accepts at most %d arg(s), received %d", n, len(args))
|
|
}
|
|
return nil
|
|
}
|
|
}
|
|
|
|
// ExactArgs returns an error if there are not exactly n args.
|
|
func ExactArgs(n int) PositionalArgs {
|
|
return func(cmd *Command, args []string) error {
|
|
if len(args) != n {
|
|
return fmt.Errorf("accepts %d arg(s), received %d", n, len(args))
|
|
}
|
|
return nil
|
|
}
|
|
}
|
|
|
|
// RangeArgs returns an error if the number of args is not within the expected range.
|
|
func RangeArgs(min int, max int) PositionalArgs {
|
|
return func(cmd *Command, args []string) error {
|
|
if len(args) < min || len(args) > max {
|
|
return fmt.Errorf("accepts between %d and %d arg(s), received %d", min, max, len(args))
|
|
}
|
|
return nil
|
|
}
|
|
}
|