mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-27 13:37:30 +00:00
Update godeps for cobra and pflags
This commit is contained in:
parent
02eb68aa0b
commit
3fe85d46ff
6
Godeps/Godeps.json
generated
6
Godeps/Godeps.json
generated
@ -480,12 +480,12 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "github.com/spf13/cobra",
|
"ImportPath": "github.com/spf13/cobra",
|
||||||
"Rev": "8f5946caaeeff40a98d67f60c25e89c3525038a3"
|
"Rev": "385fc87e4343efec233811d3d933509e8975d11a"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "github.com/spf13/pflag",
|
"ImportPath": "github.com/spf13/pflag",
|
||||||
"Comment": "v0.0.1-44-gb91b2a9",
|
"Comment": "v0.0.1-73-g534019b",
|
||||||
"Rev": "b91b2a94780f4e6b4d3b0c12fd9b5f4b05b1aa45"
|
"Rev": "534019bcaea096fc0f0641afa2aed1e80cbb0ccc"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "github.com/stretchr/objx",
|
"ImportPath": "github.com/stretchr/objx",
|
||||||
|
2
Godeps/_workspace/src/github.com/spf13/cobra/README.md
generated
vendored
2
Godeps/_workspace/src/github.com/spf13/cobra/README.md
generated
vendored
@ -62,7 +62,7 @@ and flags that are only available to that command.
|
|||||||
In the example above 'port' is the flag.
|
In the example above 'port' is the flag.
|
||||||
|
|
||||||
Flag functionality is provided by the [pflag
|
Flag functionality is provided by the [pflag
|
||||||
libary](https://github.com/ogier/pflag), a fork of the flag standard library
|
library](https://github.com/ogier/pflag), a fork of the flag standard library
|
||||||
which maintains the same interface while adding posix compliance.
|
which maintains the same interface while adding posix compliance.
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
35
Godeps/_workspace/src/github.com/spf13/cobra/bash_completions.go
generated
vendored
35
Godeps/_workspace/src/github.com/spf13/cobra/bash_completions.go
generated
vendored
@ -219,9 +219,13 @@ func writeFlagHandler(name string, annotations map[string][]string, out *bytes.B
|
|||||||
case BashCompFilenameExt:
|
case BashCompFilenameExt:
|
||||||
fmt.Fprintf(out, " flags_with_completion+=(%q)\n", name)
|
fmt.Fprintf(out, " flags_with_completion+=(%q)\n", name)
|
||||||
|
|
||||||
ext := strings.Join(value, "|")
|
if len(value) > 0 {
|
||||||
ext = "__handle_filename_extension_flag " + ext
|
ext := "__handle_filename_extension_flag " + strings.Join(value, "|")
|
||||||
fmt.Fprintf(out, " flags_completion+=(%q)\n", ext)
|
fmt.Fprintf(out, " flags_completion+=(%q)\n", ext)
|
||||||
|
} else {
|
||||||
|
ext := "_filedir"
|
||||||
|
fmt.Fprintf(out, " flags_completion+=(%q)\n", ext)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -343,15 +347,24 @@ func (cmd *Command) GenBashCompletionFile(filename string) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (cmd *Command) MarkFlagRequired(name string) {
|
// MarkFlagRequired adds the BashCompOneRequiredFlag annotation to the named flag, if it exists.
|
||||||
flag := cmd.Flags().Lookup(name)
|
func (cmd *Command) MarkFlagRequired(name string) error {
|
||||||
if flag == nil {
|
return MarkFlagRequired(cmd.Flags(), name)
|
||||||
return
|
|
||||||
}
|
}
|
||||||
if flag.Annotations == nil {
|
|
||||||
flag.Annotations = make(map[string][]string)
|
// MarkFlagRequired adds the BashCompOneRequiredFlag annotation to the named flag in the flag set, if it exists.
|
||||||
|
func MarkFlagRequired(flags *pflag.FlagSet, name string) error {
|
||||||
|
return flags.SetAnnotation(name, BashCompOneRequiredFlag, []string{"true"})
|
||||||
}
|
}
|
||||||
annotation := make([]string, 1)
|
|
||||||
annotation[0] = "true"
|
// MarkFlagFilename adds the BashCompFilenameExt annotation to the named flag, if it exists.
|
||||||
flag.Annotations[BashCompOneRequiredFlag] = annotation
|
// Generated bash autocompletion will select filenames for the flag, limiting to named extensions if provided.
|
||||||
|
func (cmd *Command) MarkFlagFilename(name string, extensions ...string) error {
|
||||||
|
return MarkFlagFilename(cmd.Flags(), name, extensions...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// MarkFlagFilename adds the BashCompFilenameExt annotation to the named flag in the flag set, if it exists.
|
||||||
|
// Generated bash autocompletion will select filenames for the flag, limiting to named extensions if provided.
|
||||||
|
func MarkFlagFilename(flags *pflag.FlagSet, name string, extensions ...string) error {
|
||||||
|
return flags.SetAnnotation(name, BashCompFilenameExt, extensions)
|
||||||
}
|
}
|
||||||
|
2
Godeps/_workspace/src/github.com/spf13/cobra/bash_completions.md
generated
vendored
2
Godeps/_workspace/src/github.com/spf13/cobra/bash_completions.md
generated
vendored
@ -118,7 +118,7 @@ and you'll get something like
|
|||||||
-c --container= -p --pod=
|
-c --container= -p --pod=
|
||||||
```
|
```
|
||||||
|
|
||||||
# Specify valid filename extentions for flags that take a filename
|
# Specify valid filename extensions for flags that take a filename
|
||||||
|
|
||||||
In this example we use --filename= and expect to get a json or yaml file as the argument. To make this easier we annotate the --filename flag with valid filename extensions.
|
In this example we use --filename= and expect to get a json or yaml file as the argument. To make this easier we annotate the --filename flag with valid filename extensions.
|
||||||
|
|
||||||
|
24
Godeps/_workspace/src/github.com/spf13/cobra/bash_completions_test.go
generated
vendored
24
Godeps/_workspace/src/github.com/spf13/cobra/bash_completions_test.go
generated
vendored
@ -42,23 +42,19 @@ func TestBashCompletions(t *testing.T) {
|
|||||||
// required flag
|
// required flag
|
||||||
c.MarkFlagRequired("introot")
|
c.MarkFlagRequired("introot")
|
||||||
|
|
||||||
// valid nounds
|
// valid nouns
|
||||||
validArgs := []string{"pods", "nodes", "services", "replicationControllers"}
|
validArgs := []string{"pods", "nodes", "services", "replicationControllers"}
|
||||||
c.ValidArgs = validArgs
|
c.ValidArgs = validArgs
|
||||||
|
|
||||||
// filename extentions
|
// filename
|
||||||
annotations := make([]string, 3)
|
|
||||||
annotations[0] = "json"
|
|
||||||
annotations[1] = "yaml"
|
|
||||||
annotations[2] = "yml"
|
|
||||||
|
|
||||||
annotation := make(map[string][]string)
|
|
||||||
annotation[BashCompFilenameExt] = annotations
|
|
||||||
|
|
||||||
var flagval string
|
var flagval string
|
||||||
c.Flags().StringVar(&flagval, "filename", "", "Enter a filename")
|
c.Flags().StringVar(&flagval, "filename", "", "Enter a filename")
|
||||||
flag := c.Flags().Lookup("filename")
|
c.MarkFlagFilename("filename", "json", "yaml", "yml")
|
||||||
flag.Annotations = annotation
|
|
||||||
|
// filename extensions
|
||||||
|
var flagvalExt string
|
||||||
|
c.Flags().StringVar(&flagvalExt, "filename-ext", "", "Enter a filename (extension limited)")
|
||||||
|
c.MarkFlagFilename("filename-ext")
|
||||||
|
|
||||||
out := new(bytes.Buffer)
|
out := new(bytes.Buffer)
|
||||||
c.GenBashCompletion(out)
|
c.GenBashCompletion(out)
|
||||||
@ -75,7 +71,9 @@ func TestBashCompletions(t *testing.T) {
|
|||||||
check(t, str, `COMPREPLY=( "hello" )`)
|
check(t, str, `COMPREPLY=( "hello" )`)
|
||||||
// check for required nouns
|
// check for required nouns
|
||||||
check(t, str, `must_have_one_noun+=("pods")`)
|
check(t, str, `must_have_one_noun+=("pods")`)
|
||||||
// check for filename extention flags
|
// check for filename extension flags
|
||||||
|
check(t, str, `flags_completion+=("_filedir")`)
|
||||||
|
// check for filename extension flags
|
||||||
check(t, str, `flags_completion+=("__handle_filename_extension_flag json|yaml|yml")`)
|
check(t, str, `flags_completion+=("__handle_filename_extension_flag json|yaml|yml")`)
|
||||||
|
|
||||||
checkOmit(t, str, cmdDeprecated.Name())
|
checkOmit(t, str, cmdDeprecated.Name())
|
||||||
|
25
Godeps/_workspace/src/github.com/spf13/cobra/cobra_test.go
generated
vendored
25
Godeps/_workspace/src/github.com/spf13/cobra/cobra_test.go
generated
vendored
@ -378,6 +378,24 @@ func TestChildSameName(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestGrandChildSameName(t *testing.T) {
|
||||||
|
c := initializeWithSameName()
|
||||||
|
cmdTimes.AddCommand(cmdPrint)
|
||||||
|
c.AddCommand(cmdTimes)
|
||||||
|
c.SetArgs(strings.Split("times print one two", " "))
|
||||||
|
c.Execute()
|
||||||
|
|
||||||
|
if te != nil || tt != nil {
|
||||||
|
t.Error("Wrong command called")
|
||||||
|
}
|
||||||
|
if tp == nil {
|
||||||
|
t.Error("Wrong command called")
|
||||||
|
}
|
||||||
|
if strings.Join(tp, " ") != "one two" {
|
||||||
|
t.Error("Command didn't parse correctly")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestFlagLong(t *testing.T) {
|
func TestFlagLong(t *testing.T) {
|
||||||
noRRSetupTest("echo --intone=13 something here")
|
noRRSetupTest("echo --intone=13 something here")
|
||||||
|
|
||||||
@ -750,11 +768,16 @@ func TestRootNoCommandHelp(t *testing.T) {
|
|||||||
|
|
||||||
func TestRootUnknownCommand(t *testing.T) {
|
func TestRootUnknownCommand(t *testing.T) {
|
||||||
r := noRRSetupTest("bogus")
|
r := noRRSetupTest("bogus")
|
||||||
s := "Error: unknown command \"bogus\"\nRun 'cobra-test help' for usage.\n"
|
s := "Error: unknown command \"bogus\" for \"cobra-test\"\nRun 'cobra-test --help' for usage.\n"
|
||||||
|
|
||||||
if r.Output != s {
|
if r.Output != s {
|
||||||
t.Errorf("Unexpected response.\nExpecting to be:\n %q\nGot:\n %q\n", s, r.Output)
|
t.Errorf("Unexpected response.\nExpecting to be:\n %q\nGot:\n %q\n", s, r.Output)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
r = noRRSetupTest("--strtwo=a bogus")
|
||||||
|
if r.Output != s {
|
||||||
|
t.Errorf("Unexpected response.\nExpecting to be:\n %q\nGot:\n %q\n", s, r.Output)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestFlagsBeforeCommand(t *testing.T) {
|
func TestFlagsBeforeCommand(t *testing.T) {
|
||||||
|
140
Godeps/_workspace/src/github.com/spf13/cobra/command.go
generated
vendored
140
Godeps/_workspace/src/github.com/spf13/cobra/command.go
generated
vendored
@ -84,7 +84,6 @@ type Command struct {
|
|||||||
commandsMaxNameLen int
|
commandsMaxNameLen int
|
||||||
|
|
||||||
flagErrorBuf *bytes.Buffer
|
flagErrorBuf *bytes.Buffer
|
||||||
cmdErrorBuf *bytes.Buffer
|
|
||||||
|
|
||||||
args []string // actual args parsed from flags
|
args []string // actual args parsed from flags
|
||||||
output *io.Writer // nil means stderr; use Out() method instead
|
output *io.Writer // nil means stderr; use Out() method instead
|
||||||
@ -260,21 +259,21 @@ Aliases:
|
|||||||
{{end}}{{if .HasExample}}
|
{{end}}{{if .HasExample}}
|
||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
{{ .Example }}
|
{{ .Example }}{{end}}{{ if .HasNonHelpSubCommands}}
|
||||||
{{end}}{{ if .HasRunnableSubCommands}}
|
|
||||||
|
|
||||||
Available Commands: {{range .Commands}}{{if and (.Runnable) (not .Deprecated)}}
|
Available Commands: {{range .Commands}}{{if (not .IsHelpCommand)}}
|
||||||
{{rpad .Name .NamePadding }} {{.Short}}{{end}}{{end}}
|
{{rpad .Name .NamePadding }} {{.Short}}{{end}}{{end}}{{end}}{{ if .HasLocalFlags}}
|
||||||
{{end}}
|
|
||||||
{{ if .HasLocalFlags}}Flags:
|
Flags:
|
||||||
{{.LocalFlags.FlagUsages}}{{end}}
|
{{.LocalFlags.FlagUsages}}{{end}}{{ if .HasInheritedFlags}}
|
||||||
{{ if .HasInheritedFlags}}Global Flags:
|
|
||||||
{{.InheritedFlags.FlagUsages}}{{end}}{{if or (.HasHelpSubCommands) (.HasRunnableSiblings)}}
|
Global Flags:
|
||||||
Additional help topics:
|
{{.InheritedFlags.FlagUsages}}{{end}}{{if .HasHelpSubCommands}}
|
||||||
{{if .HasHelpSubCommands}}{{range .Commands}}{{if and (not .Runnable) (not .Deprecated)}} {{rpad .CommandPath .CommandPathPadding}} {{.Short}}{{end}}{{end}}{{end}}{{if .HasRunnableSiblings }}{{range .Parent.Commands}}{{if and (not .Runnable) (not .Deprecated)}}{{if not (eq .Name $cmd.Name) }}
|
|
||||||
{{rpad .CommandPath .CommandPathPadding}} {{.Short}}{{end}}{{end}}{{end}}{{end}}
|
Additional help topics: {{range .Commands}}{{if .IsHelpCommand}}
|
||||||
{{end}}{{ if .HasSubCommands }}
|
{{rpad .CommandPath .CommandPathPadding}} {{.Short}}{{end}}}{{end}}{{end}}{{ if .HasSubCommands }}
|
||||||
Use "{{.Root.Name}} help [command]" for more information about a command.
|
|
||||||
|
Use "{{.CommandPath}} [command] --help" for more information about a command.
|
||||||
{{end}}`
|
{{end}}`
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -381,29 +380,25 @@ func (c *Command) Find(args []string) (*Command, []string, error) {
|
|||||||
return nil, nil, fmt.Errorf("Called find() on a nil Command")
|
return nil, nil, fmt.Errorf("Called find() on a nil Command")
|
||||||
}
|
}
|
||||||
|
|
||||||
// If there are no arguments, return the root command. If the root has no
|
|
||||||
// subcommands, args reflects arguments that should actually be passed to
|
|
||||||
// the root command, so also return the root command.
|
|
||||||
if len(args) == 0 || !c.Root().HasSubCommands() {
|
|
||||||
return c.Root(), args, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
var innerfind func(*Command, []string) (*Command, []string)
|
var innerfind func(*Command, []string) (*Command, []string)
|
||||||
|
|
||||||
innerfind = func(c *Command, innerArgs []string) (*Command, []string) {
|
innerfind = func(c *Command, innerArgs []string) (*Command, []string) {
|
||||||
if len(innerArgs) > 0 && c.HasSubCommands() {
|
|
||||||
argsWOflags := stripFlags(innerArgs, c)
|
argsWOflags := stripFlags(innerArgs, c)
|
||||||
if len(argsWOflags) > 0 {
|
if len(argsWOflags) == 0 {
|
||||||
|
return c, innerArgs
|
||||||
|
}
|
||||||
|
nextSubCmd := argsWOflags[0]
|
||||||
matches := make([]*Command, 0)
|
matches := make([]*Command, 0)
|
||||||
for _, cmd := range c.commands {
|
for _, cmd := range c.commands {
|
||||||
if cmd.Name() == argsWOflags[0] || cmd.HasAlias(argsWOflags[0]) { // exact name or alias match
|
if cmd.Name() == nextSubCmd || cmd.HasAlias(nextSubCmd) { // exact name or alias match
|
||||||
return innerfind(cmd, argsMinusFirstX(innerArgs, argsWOflags[0]))
|
return innerfind(cmd, argsMinusFirstX(innerArgs, nextSubCmd))
|
||||||
} else if EnablePrefixMatching {
|
}
|
||||||
if strings.HasPrefix(cmd.Name(), argsWOflags[0]) { // prefix match
|
if EnablePrefixMatching {
|
||||||
|
if strings.HasPrefix(cmd.Name(), nextSubCmd) { // prefix match
|
||||||
matches = append(matches, cmd)
|
matches = append(matches, cmd)
|
||||||
}
|
}
|
||||||
for _, x := range cmd.Aliases {
|
for _, x := range cmd.Aliases {
|
||||||
if strings.HasPrefix(x, argsWOflags[0]) {
|
if strings.HasPrefix(x, nextSubCmd) {
|
||||||
matches = append(matches, cmd)
|
matches = append(matches, cmd)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -414,17 +409,20 @@ func (c *Command) Find(args []string) (*Command, []string, error) {
|
|||||||
if len(matches) == 1 {
|
if len(matches) == 1 {
|
||||||
return innerfind(matches[0], argsMinusFirstX(innerArgs, argsWOflags[0]))
|
return innerfind(matches[0], argsMinusFirstX(innerArgs, argsWOflags[0]))
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return c, innerArgs
|
return c, innerArgs
|
||||||
}
|
}
|
||||||
|
|
||||||
commandFound, a := innerfind(c, args)
|
commandFound, a := innerfind(c, args)
|
||||||
|
argsWOflags := stripFlags(a, commandFound)
|
||||||
|
|
||||||
// If we matched on the root, but we asked for a subcommand, return an error
|
// no subcommand, always take args
|
||||||
if commandFound.Name() == c.Name() && len(stripFlags(args, c)) > 0 && commandFound.Name() != args[0] {
|
if !commandFound.HasSubCommands() {
|
||||||
return nil, a, fmt.Errorf("unknown command %q", a[0])
|
return commandFound, a, nil
|
||||||
|
}
|
||||||
|
// root command with subcommands, do subcommand checking
|
||||||
|
if commandFound == c && len(argsWOflags) > 0 {
|
||||||
|
return commandFound, a, fmt.Errorf("unknown command %q for %q", argsWOflags[0], commandFound.CommandPath())
|
||||||
}
|
}
|
||||||
|
|
||||||
return commandFound, a, nil
|
return commandFound, a, nil
|
||||||
@ -454,29 +452,13 @@ func (c *Command) execute(a []string) (err error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
err = c.ParseFlags(a)
|
err = c.ParseFlags(a)
|
||||||
if err == flag.ErrHelp {
|
|
||||||
c.Help()
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// We're writing subcommand usage to root command's error buffer to have it displayed to the user
|
|
||||||
r := c.Root()
|
|
||||||
if r.cmdErrorBuf == nil {
|
|
||||||
r.cmdErrorBuf = new(bytes.Buffer)
|
|
||||||
}
|
|
||||||
// for writing the usage to the buffer we need to switch the output temporarily
|
|
||||||
// since Out() returns root output, you also need to revert that on root
|
|
||||||
out := r.Out()
|
|
||||||
r.SetOutput(r.cmdErrorBuf)
|
|
||||||
c.Usage()
|
|
||||||
r.SetOutput(out)
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
// If help is called, regardless of other flags, we print that.
|
// If help is called, regardless of other flags, return we want help
|
||||||
// Print help also if c.Run is nil.
|
// Also say we need help if c.Run is nil.
|
||||||
if c.helpFlagVal || !c.Runnable() {
|
if c.helpFlagVal || !c.Runnable() {
|
||||||
c.Help()
|
return flag.ErrHelp
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
c.preRun()
|
c.preRun()
|
||||||
@ -556,18 +538,24 @@ func (c *Command) Execute() (err error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
cmd, flags, err := c.Find(args)
|
cmd, flags, err := c.Find(args)
|
||||||
if err == nil {
|
if err != nil {
|
||||||
err = cmd.execute(flags)
|
// If found parse to a subcommand and then failed, talk about the subcommand
|
||||||
|
if cmd != nil {
|
||||||
|
c = cmd
|
||||||
|
}
|
||||||
|
c.Println("Error:", err.Error())
|
||||||
|
c.Printf("Run '%v --help' for usage.\n", c.CommandPath())
|
||||||
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
err = cmd.execute(flags)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if err == flag.ErrHelp {
|
if err == flag.ErrHelp {
|
||||||
c.Help()
|
cmd.Help()
|
||||||
|
return nil
|
||||||
} else {
|
|
||||||
c.Println("Error:", err.Error())
|
|
||||||
c.Printf("Run '%v help' for usage.\n", c.Root().Name())
|
|
||||||
}
|
}
|
||||||
|
c.Println(cmd.UsageString())
|
||||||
|
c.Println("Error:", err.Error())
|
||||||
}
|
}
|
||||||
|
|
||||||
return
|
return
|
||||||
@ -596,8 +584,6 @@ func (c *Command) initHelp() {
|
|||||||
func (c *Command) ResetCommands() {
|
func (c *Command) ResetCommands() {
|
||||||
c.commands = nil
|
c.commands = nil
|
||||||
c.helpCommand = nil
|
c.helpCommand = nil
|
||||||
c.cmdErrorBuf = new(bytes.Buffer)
|
|
||||||
c.cmdErrorBuf.Reset()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//Commands returns a slice of child commands.
|
//Commands returns a slice of child commands.
|
||||||
@ -817,31 +803,39 @@ func (c *Command) HasSubCommands() bool {
|
|||||||
return len(c.commands) > 0
|
return len(c.commands) > 0
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Command) HasRunnableSiblings() bool {
|
func (c *Command) IsHelpCommand() bool {
|
||||||
if !c.HasParent() {
|
if c.Runnable() {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
for _, sub := range c.parent.commands {
|
for _, sub := range c.commands {
|
||||||
if sub.Runnable() {
|
if len(sub.Deprecated) != 0 {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
if !sub.IsHelpCommand() {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
}
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Command) HasHelpSubCommands() bool {
|
func (c *Command) HasHelpSubCommands() bool {
|
||||||
for _, sub := range c.commands {
|
for _, sub := range c.commands {
|
||||||
if !sub.Runnable() {
|
if len(sub.Deprecated) != 0 {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
if sub.IsHelpCommand() {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
// Determine if the command has runnable children commands
|
func (c *Command) HasNonHelpSubCommands() bool {
|
||||||
func (c *Command) HasRunnableSubCommands() bool {
|
|
||||||
for _, sub := range c.commands {
|
for _, sub := range c.commands {
|
||||||
if sub.Runnable() {
|
if len(sub.Deprecated) != 0 {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
if !sub.IsHelpCommand() {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
55
Godeps/_workspace/src/github.com/spf13/pflag/README.md
generated
vendored
55
Godeps/_workspace/src/github.com/spf13/pflag/README.md
generated
vendored
@ -20,11 +20,11 @@ pflag is available using the standard `go get` command.
|
|||||||
|
|
||||||
Install by running:
|
Install by running:
|
||||||
|
|
||||||
go get github.com/ogier/pflag
|
go get github.com/spf13/pflag
|
||||||
|
|
||||||
Run tests by running:
|
Run tests by running:
|
||||||
|
|
||||||
go test github.com/ogier/pflag
|
go test github.com/spf13/pflag
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
@ -33,7 +33,7 @@ pflag under the name "flag" then all code should continue to function
|
|||||||
with no changes.
|
with no changes.
|
||||||
|
|
||||||
``` go
|
``` go
|
||||||
import flag "github.com/ogier/pflag"
|
import flag "github.com/spf13/pflag"
|
||||||
```
|
```
|
||||||
|
|
||||||
There is one exception to this: if you directly instantiate the Flag struct
|
There is one exception to this: if you directly instantiate the Flag struct
|
||||||
@ -84,6 +84,16 @@ fmt.Println("ip has value ", *ip)
|
|||||||
fmt.Println("flagvar has value ", flagvar)
|
fmt.Println("flagvar has value ", flagvar)
|
||||||
```
|
```
|
||||||
|
|
||||||
|
There are helpers function to get values later if you have the FlagSet but
|
||||||
|
it was difficult to keep up with all of the the flag pointers in your code.
|
||||||
|
If you have a pflag.FlagSet with a flag called 'flagname' of type int you
|
||||||
|
can use GetInt() to get the int value. But notice that 'flagname' must exist
|
||||||
|
and it must be an int. GetString("flagname") will fail.
|
||||||
|
|
||||||
|
``` go
|
||||||
|
i, err := flagset.GetInt("flagname")
|
||||||
|
```
|
||||||
|
|
||||||
After parsing, the arguments after the flag are available as the
|
After parsing, the arguments after the flag are available as the
|
||||||
slice flag.Args() or individually as flag.Arg(i).
|
slice flag.Args() or individually as flag.Arg(i).
|
||||||
The arguments are indexed from 0 through flag.NArg()-1.
|
The arguments are indexed from 0 through flag.NArg()-1.
|
||||||
@ -111,29 +121,56 @@ in a command-line interface. The methods of FlagSet are
|
|||||||
analogous to the top-level functions for the command-line
|
analogous to the top-level functions for the command-line
|
||||||
flag set.
|
flag set.
|
||||||
|
|
||||||
|
## Setting no option default values for flags
|
||||||
|
|
||||||
|
After you create a flag it is possible to set the pflag.NoOptDefVal for
|
||||||
|
the given flag. Doing this changes the meaning of the flag slightly. If
|
||||||
|
a flag has a NoOptDefVal and the flag is set on the command line without
|
||||||
|
an option the flag will be set to the NoOptDefVal. For example given:
|
||||||
|
|
||||||
|
``` go
|
||||||
|
var ip = flag.IntP("flagname", "f", 1234, "help message")
|
||||||
|
flag.Lookup("flagname").NoOptDefVal = "4321"
|
||||||
|
```
|
||||||
|
|
||||||
|
Would result in something like
|
||||||
|
|
||||||
|
| Parsed Arguments | Resulting Value |
|
||||||
|
| ------------- | ------------- |
|
||||||
|
| --flagname=1357 | ip=1357 |
|
||||||
|
| --flagname | ip=4321 |
|
||||||
|
| [nothing] | ip=1234 |
|
||||||
|
|
||||||
## Command line flag syntax
|
## Command line flag syntax
|
||||||
|
|
||||||
```
|
```
|
||||||
--flag // boolean flags only
|
--flag // boolean flags, or flags with no option default values
|
||||||
|
--flag x // only on flags without a default value
|
||||||
--flag=x
|
--flag=x
|
||||||
```
|
```
|
||||||
|
|
||||||
Unlike the flag package, a single dash before an option means something
|
Unlike the flag package, a single dash before an option means something
|
||||||
different than a double dash. Single dashes signify a series of shorthand
|
different than a double dash. Single dashes signify a series of shorthand
|
||||||
letters for flags. All but the last shorthand letter must be boolean flags.
|
letters for flags. All but the last shorthand letter must be boolean flags
|
||||||
|
or a flag with a default value
|
||||||
|
|
||||||
```
|
```
|
||||||
// boolean flags
|
// boolean or flags where the 'no option default value' is set
|
||||||
-f
|
-f
|
||||||
|
-f=true
|
||||||
-abc
|
-abc
|
||||||
|
but
|
||||||
|
-b true is INVALID
|
||||||
|
|
||||||
// non-boolean flags
|
// non-boolean and flags without a 'no option default value'
|
||||||
|
-n 1234
|
||||||
|
-n=1234
|
||||||
-n1234
|
-n1234
|
||||||
-Ifile
|
|
||||||
|
|
||||||
// mixed
|
// mixed
|
||||||
-abcs "hello"
|
-abcs "hello"
|
||||||
-abcn1234
|
-absd="hello"
|
||||||
|
-abcs1234
|
||||||
```
|
```
|
||||||
|
|
||||||
Flag parsing stops after the terminator "--". Unlike the flag package,
|
Flag parsing stops after the terminator "--". Unlike the flag package,
|
||||||
|
32
Godeps/_workspace/src/github.com/spf13/pflag/bool.go
generated
vendored
32
Godeps/_workspace/src/github.com/spf13/pflag/bool.go
generated
vendored
@ -34,34 +34,47 @@ func (b *boolValue) String() string { return fmt.Sprintf("%v", *b) }
|
|||||||
|
|
||||||
func (b *boolValue) IsBoolFlag() bool { return true }
|
func (b *boolValue) IsBoolFlag() bool { return true }
|
||||||
|
|
||||||
|
func boolConv(sval string) (interface{}, error) {
|
||||||
|
return strconv.ParseBool(sval)
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetBool return the bool value of a flag with the given name
|
||||||
|
func (f *FlagSet) GetBool(name string) (bool, error) {
|
||||||
|
val, err := f.getFlagType(name, "bool", boolConv)
|
||||||
|
if err != nil {
|
||||||
|
return false, err
|
||||||
|
}
|
||||||
|
return val.(bool), nil
|
||||||
|
}
|
||||||
|
|
||||||
// BoolVar defines a bool flag with specified name, default value, and usage string.
|
// BoolVar defines a bool flag with specified name, default value, and usage string.
|
||||||
// The argument p points to a bool variable in which to store the value of the flag.
|
// The argument p points to a bool variable in which to store the value of the flag.
|
||||||
func (f *FlagSet) BoolVar(p *bool, name string, value bool, usage string) {
|
func (f *FlagSet) BoolVar(p *bool, name string, value bool, usage string) {
|
||||||
f.VarP(newBoolValue(value, p), name, "", usage)
|
f.BoolVarP(p, name, "", value, usage)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Like BoolVar, but accepts a shorthand letter that can be used after a single dash.
|
// Like BoolVar, but accepts a shorthand letter that can be used after a single dash.
|
||||||
func (f *FlagSet) BoolVarP(p *bool, name, shorthand string, value bool, usage string) {
|
func (f *FlagSet) BoolVarP(p *bool, name, shorthand string, value bool, usage string) {
|
||||||
f.VarP(newBoolValue(value, p), name, shorthand, usage)
|
flag := f.VarPF(newBoolValue(value, p), name, shorthand, usage)
|
||||||
|
flag.NoOptDefVal = "true"
|
||||||
}
|
}
|
||||||
|
|
||||||
// BoolVar defines a bool flag with specified name, default value, and usage string.
|
// BoolVar defines a bool flag with specified name, default value, and usage string.
|
||||||
// The argument p points to a bool variable in which to store the value of the flag.
|
// The argument p points to a bool variable in which to store the value of the flag.
|
||||||
func BoolVar(p *bool, name string, value bool, usage string) {
|
func BoolVar(p *bool, name string, value bool, usage string) {
|
||||||
CommandLine.VarP(newBoolValue(value, p), name, "", usage)
|
BoolVarP(p, name, "", value, usage)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Like BoolVar, but accepts a shorthand letter that can be used after a single dash.
|
// Like BoolVar, but accepts a shorthand letter that can be used after a single dash.
|
||||||
func BoolVarP(p *bool, name, shorthand string, value bool, usage string) {
|
func BoolVarP(p *bool, name, shorthand string, value bool, usage string) {
|
||||||
CommandLine.VarP(newBoolValue(value, p), name, shorthand, usage)
|
flag := CommandLine.VarPF(newBoolValue(value, p), name, shorthand, usage)
|
||||||
|
flag.NoOptDefVal = "true"
|
||||||
}
|
}
|
||||||
|
|
||||||
// Bool defines a bool flag with specified name, default value, and usage string.
|
// Bool defines a bool flag with specified name, default value, and usage string.
|
||||||
// The return value is the address of a bool variable that stores the value of the flag.
|
// The return value is the address of a bool variable that stores the value of the flag.
|
||||||
func (f *FlagSet) Bool(name string, value bool, usage string) *bool {
|
func (f *FlagSet) Bool(name string, value bool, usage string) *bool {
|
||||||
p := new(bool)
|
return f.BoolP(name, "", value, usage)
|
||||||
f.BoolVarP(p, name, "", value, usage)
|
|
||||||
return p
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Like Bool, but accepts a shorthand letter that can be used after a single dash.
|
// Like Bool, but accepts a shorthand letter that can be used after a single dash.
|
||||||
@ -74,10 +87,11 @@ func (f *FlagSet) BoolP(name, shorthand string, value bool, usage string) *bool
|
|||||||
// Bool defines a bool flag with specified name, default value, and usage string.
|
// Bool defines a bool flag with specified name, default value, and usage string.
|
||||||
// The return value is the address of a bool variable that stores the value of the flag.
|
// The return value is the address of a bool variable that stores the value of the flag.
|
||||||
func Bool(name string, value bool, usage string) *bool {
|
func Bool(name string, value bool, usage string) *bool {
|
||||||
return CommandLine.BoolP(name, "", value, usage)
|
return BoolP(name, "", value, usage)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Like Bool, but accepts a shorthand letter that can be used after a single dash.
|
// Like Bool, but accepts a shorthand letter that can be used after a single dash.
|
||||||
func BoolP(name, shorthand string, value bool, usage string) *bool {
|
func BoolP(name, shorthand string, value bool, usage string) *bool {
|
||||||
return CommandLine.BoolP(name, shorthand, value, usage)
|
b := CommandLine.BoolP(name, shorthand, value, usage)
|
||||||
|
return b
|
||||||
}
|
}
|
||||||
|
18
Godeps/_workspace/src/github.com/spf13/pflag/bool_test.go
generated
vendored
18
Godeps/_workspace/src/github.com/spf13/pflag/bool_test.go
generated
vendored
@ -59,7 +59,8 @@ func (v *triStateValue) Type() string {
|
|||||||
func setUpFlagSet(tristate *triStateValue) *FlagSet {
|
func setUpFlagSet(tristate *triStateValue) *FlagSet {
|
||||||
f := NewFlagSet("test", ContinueOnError)
|
f := NewFlagSet("test", ContinueOnError)
|
||||||
*tristate = triStateFalse
|
*tristate = triStateFalse
|
||||||
f.VarP(tristate, "tristate", "t", "tristate value (true, maybe or false)")
|
flag := f.VarPF(tristate, "tristate", "t", "tristate value (true, maybe or false)")
|
||||||
|
flag.NoOptDefVal = "true"
|
||||||
return f
|
return f
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -162,3 +163,18 @@ func TestInvalidValue(t *testing.T) {
|
|||||||
t.Fatal("expected an error but did not get any, tristate has value", tristate)
|
t.Fatal("expected an error but did not get any, tristate has value", tristate)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestBoolP(t *testing.T) {
|
||||||
|
b := BoolP("bool", "b", false, "bool value in CommandLine")
|
||||||
|
c := BoolP("c", "c", false, "other bool value")
|
||||||
|
args := []string{"--bool"}
|
||||||
|
if err := CommandLine.Parse(args); err != nil {
|
||||||
|
t.Error("expected no error, got ", err)
|
||||||
|
}
|
||||||
|
if *b != true {
|
||||||
|
t.Errorf("expected b=true got b=%s", b)
|
||||||
|
}
|
||||||
|
if *c != false {
|
||||||
|
t.Errorf("expect c=false got c=%s", c)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
84
Godeps/_workspace/src/github.com/spf13/pflag/count.go
generated
vendored
Normal file
84
Godeps/_workspace/src/github.com/spf13/pflag/count.go
generated
vendored
Normal file
@ -0,0 +1,84 @@
|
|||||||
|
package pflag
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"strconv"
|
||||||
|
)
|
||||||
|
|
||||||
|
// -- count Value
|
||||||
|
type countValue int
|
||||||
|
|
||||||
|
func newCountValue(val int, p *int) *countValue {
|
||||||
|
*p = val
|
||||||
|
return (*countValue)(p)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (i *countValue) Set(s string) error {
|
||||||
|
v, err := strconv.ParseInt(s, 0, 64)
|
||||||
|
// -1 means that no specific value was passed, so increment
|
||||||
|
if v == -1 {
|
||||||
|
*i = countValue(*i + 1)
|
||||||
|
} else {
|
||||||
|
*i = countValue(v)
|
||||||
|
}
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
func (i *countValue) Type() string {
|
||||||
|
return "count"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (i *countValue) String() string { return fmt.Sprintf("%v", *i) }
|
||||||
|
|
||||||
|
func countConv(sval string) (interface{}, error) {
|
||||||
|
i, err := strconv.Atoi(sval)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return i, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *FlagSet) GetCount(name string) (int, error) {
|
||||||
|
val, err := f.getFlagType(name, "count", countConv)
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
return val.(int), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *FlagSet) CountVar(p *int, name string, usage string) {
|
||||||
|
f.CountVarP(p, name, "", usage)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *FlagSet) CountVarP(p *int, name, shorthand string, usage string) {
|
||||||
|
flag := f.VarPF(newCountValue(0, p), name, shorthand, usage)
|
||||||
|
flag.NoOptDefVal = "-1"
|
||||||
|
}
|
||||||
|
|
||||||
|
func CountVar(p *int, name string, usage string) {
|
||||||
|
CommandLine.CountVar(p, name, usage)
|
||||||
|
}
|
||||||
|
|
||||||
|
func CountVarP(p *int, name, shorthand string, usage string) {
|
||||||
|
CommandLine.CountVarP(p, name, shorthand, usage)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *FlagSet) Count(name string, usage string) *int {
|
||||||
|
p := new(int)
|
||||||
|
f.CountVarP(p, name, "", usage)
|
||||||
|
return p
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *FlagSet) CountP(name, shorthand string, usage string) *int {
|
||||||
|
p := new(int)
|
||||||
|
f.CountVarP(p, name, shorthand, usage)
|
||||||
|
return p
|
||||||
|
}
|
||||||
|
|
||||||
|
func Count(name string, usage string) *int {
|
||||||
|
return CommandLine.CountP(name, "", usage)
|
||||||
|
}
|
||||||
|
|
||||||
|
func CountP(name, shorthand string, usage string) *int {
|
||||||
|
return CommandLine.CountP(name, shorthand, usage)
|
||||||
|
}
|
55
Godeps/_workspace/src/github.com/spf13/pflag/count_test.go
generated
vendored
Normal file
55
Godeps/_workspace/src/github.com/spf13/pflag/count_test.go
generated
vendored
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
package pflag
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"os"
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
var _ = fmt.Printf
|
||||||
|
|
||||||
|
func setUpCount(c *int) *FlagSet {
|
||||||
|
f := NewFlagSet("test", ContinueOnError)
|
||||||
|
f.CountVarP(c, "verbose", "v", "a counter")
|
||||||
|
return f
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestCount(t *testing.T) {
|
||||||
|
testCases := []struct {
|
||||||
|
input []string
|
||||||
|
success bool
|
||||||
|
expected int
|
||||||
|
}{
|
||||||
|
{[]string{"-vvv"}, true, 3},
|
||||||
|
{[]string{"-v", "-v", "-v"}, true, 3},
|
||||||
|
{[]string{"-v", "--verbose", "-v"}, true, 3},
|
||||||
|
{[]string{"-v=3", "-v"}, true, 4},
|
||||||
|
{[]string{"-v=a"}, false, 0},
|
||||||
|
}
|
||||||
|
|
||||||
|
devnull, _ := os.Open(os.DevNull)
|
||||||
|
os.Stderr = devnull
|
||||||
|
for i := range testCases {
|
||||||
|
var count int
|
||||||
|
f := setUpCount(&count)
|
||||||
|
|
||||||
|
tc := &testCases[i]
|
||||||
|
|
||||||
|
err := f.Parse(tc.input)
|
||||||
|
if err != nil && tc.success == true {
|
||||||
|
t.Errorf("expected success, got %q", err)
|
||||||
|
continue
|
||||||
|
} else if err == nil && tc.success == false {
|
||||||
|
t.Errorf("expected failure, got success")
|
||||||
|
continue
|
||||||
|
} else if tc.success {
|
||||||
|
c, err := f.GetCount("verbose")
|
||||||
|
if err != nil {
|
||||||
|
t.Errorf("Got error trying to fetch the counter flag")
|
||||||
|
}
|
||||||
|
if c != tc.expected {
|
||||||
|
t.Errorf("expected %q, got %q", tc.expected, c)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
17
Godeps/_workspace/src/github.com/spf13/pflag/duration.go
generated
vendored
17
Godeps/_workspace/src/github.com/spf13/pflag/duration.go
generated
vendored
@ -1,6 +1,8 @@
|
|||||||
package pflag
|
package pflag
|
||||||
|
|
||||||
import "time"
|
import (
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
// -- time.Duration Value
|
// -- time.Duration Value
|
||||||
type durationValue time.Duration
|
type durationValue time.Duration
|
||||||
@ -22,6 +24,19 @@ func (d *durationValue) Type() string {
|
|||||||
|
|
||||||
func (d *durationValue) String() string { return (*time.Duration)(d).String() }
|
func (d *durationValue) String() string { return (*time.Duration)(d).String() }
|
||||||
|
|
||||||
|
func durationConv(sval string) (interface{}, error) {
|
||||||
|
return time.ParseDuration(sval)
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetDuration return the duration value of a flag with the given name
|
||||||
|
func (f *FlagSet) GetDuration(name string) (time.Duration, error) {
|
||||||
|
val, err := f.getFlagType(name, "duration", durationConv)
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
return val.(time.Duration), nil
|
||||||
|
}
|
||||||
|
|
||||||
// DurationVar defines a time.Duration flag with specified name, default value, and usage string.
|
// DurationVar defines a time.Duration flag with specified name, default value, and usage string.
|
||||||
// The argument p points to a time.Duration variable in which to store the value of the flag.
|
// The argument p points to a time.Duration variable in which to store the value of the flag.
|
||||||
func (f *FlagSet) DurationVar(p *time.Duration, name string, value time.Duration, usage string) {
|
func (f *FlagSet) DurationVar(p *time.Duration, name string, value time.Duration, usage string) {
|
||||||
|
90
Godeps/_workspace/src/github.com/spf13/pflag/flag.go
generated
vendored
90
Godeps/_workspace/src/github.com/spf13/pflag/flag.go
generated
vendored
@ -152,6 +152,7 @@ type Flag struct {
|
|||||||
Value Value // value as set
|
Value Value // value as set
|
||||||
DefValue string // default value (as text); for usage message
|
DefValue string // default value (as text); for usage message
|
||||||
Changed bool // If the user set the value (or if left to default)
|
Changed bool // If the user set the value (or if left to default)
|
||||||
|
NoOptDefVal string //default value (as text); if the flag is on the command line without any options
|
||||||
Deprecated string // If this flag is deprecated, this string is the new or now thing to use
|
Deprecated string // If this flag is deprecated, this string is the new or now thing to use
|
||||||
Annotations map[string][]string // used by cobra.Command bash autocomple code
|
Annotations map[string][]string // used by cobra.Command bash autocomple code
|
||||||
}
|
}
|
||||||
@ -257,6 +258,27 @@ func (f *FlagSet) lookup(name NormalizedName) *Flag {
|
|||||||
return f.formal[name]
|
return f.formal[name]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// func to return a given type for a given flag name
|
||||||
|
func (f *FlagSet) getFlagType(name string, ftype string, convFunc func(sval string) (interface{}, error)) (interface{}, error) {
|
||||||
|
flag := f.Lookup(name)
|
||||||
|
if flag == nil {
|
||||||
|
err := fmt.Errorf("flag accessed but not defined: %s", name)
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
if flag.Value.Type() != ftype {
|
||||||
|
err := fmt.Errorf("trying to get %s value of flag of type %s", ftype, flag.Value.Type())
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
sval := flag.Value.String()
|
||||||
|
result, err := convFunc(sval)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return result, nil
|
||||||
|
}
|
||||||
|
|
||||||
// Mark a flag deprecated in your program
|
// Mark a flag deprecated in your program
|
||||||
func (f *FlagSet) MarkDeprecated(name string, usageMessage string) error {
|
func (f *FlagSet) MarkDeprecated(name string, usageMessage string) error {
|
||||||
flag := f.Lookup(name)
|
flag := f.Lookup(name)
|
||||||
@ -295,6 +317,19 @@ func (f *FlagSet) Set(name, value string) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (f *FlagSet) SetAnnotation(name, key string, values []string) error {
|
||||||
|
normalName := f.normalizeFlagName(name)
|
||||||
|
flag, ok := f.formal[normalName]
|
||||||
|
if !ok {
|
||||||
|
return fmt.Errorf("no such flag -%v", name)
|
||||||
|
}
|
||||||
|
if flag.Annotations == nil {
|
||||||
|
flag.Annotations = map[string][]string{}
|
||||||
|
}
|
||||||
|
flag.Annotations[key] = values
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
// Set sets the value of the named command-line flag.
|
// Set sets the value of the named command-line flag.
|
||||||
func Set(name, value string) error {
|
func Set(name, value string) error {
|
||||||
return CommandLine.Set(name, value)
|
return CommandLine.Set(name, value)
|
||||||
@ -307,16 +342,25 @@ func (f *FlagSet) PrintDefaults() {
|
|||||||
if len(flag.Deprecated) > 0 {
|
if len(flag.Deprecated) > 0 {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
format := "--%s=%s: %s\n"
|
format := ""
|
||||||
if _, ok := flag.Value.(*stringValue); ok {
|
// ex: w/ option string argument '-%s, --%s[=%q]: %s\n'
|
||||||
// put quotes on the value
|
|
||||||
format = "--%s=%q: %s\n"
|
|
||||||
}
|
|
||||||
if len(flag.Shorthand) > 0 {
|
if len(flag.Shorthand) > 0 {
|
||||||
format = " -%s, " + format
|
format = " -%s, --%s"
|
||||||
} else {
|
} else {
|
||||||
format = " %s " + format
|
format = " %s --%s"
|
||||||
}
|
}
|
||||||
|
if len(flag.NoOptDefVal) > 0 {
|
||||||
|
format = format + "["
|
||||||
|
}
|
||||||
|
if _, ok := flag.Value.(*stringValue); ok {
|
||||||
|
format = format + "=%q"
|
||||||
|
} else {
|
||||||
|
format = format + "=%s"
|
||||||
|
}
|
||||||
|
if len(flag.NoOptDefVal) > 0 {
|
||||||
|
format = format + "]"
|
||||||
|
}
|
||||||
|
format = format + ": %s\n"
|
||||||
fmt.Fprintf(f.out(), format, flag.Shorthand, flag.Name, flag.DefValue, flag.Usage)
|
fmt.Fprintf(f.out(), format, flag.Shorthand, flag.Name, flag.DefValue, flag.Usage)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@ -409,8 +453,8 @@ func (f *FlagSet) Var(value Value, name string, usage string) {
|
|||||||
f.VarP(value, name, "", usage)
|
f.VarP(value, name, "", usage)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Like Var, but accepts a shorthand letter that can be used after a single dash.
|
// Like VarP, but returns the flag created
|
||||||
func (f *FlagSet) VarP(value Value, name, shorthand, usage string) {
|
func (f *FlagSet) VarPF(value Value, name, shorthand, usage string) *Flag {
|
||||||
// Remember the default value as a string; it won't change.
|
// Remember the default value as a string; it won't change.
|
||||||
flag := &Flag{
|
flag := &Flag{
|
||||||
Name: name,
|
Name: name,
|
||||||
@ -420,6 +464,12 @@ func (f *FlagSet) VarP(value Value, name, shorthand, usage string) {
|
|||||||
DefValue: value.String(),
|
DefValue: value.String(),
|
||||||
}
|
}
|
||||||
f.AddFlag(flag)
|
f.AddFlag(flag)
|
||||||
|
return flag
|
||||||
|
}
|
||||||
|
|
||||||
|
// Like Var, but accepts a shorthand letter that can be used after a single dash.
|
||||||
|
func (f *FlagSet) VarP(value Value, name, shorthand, usage string) {
|
||||||
|
_ = f.VarPF(value, name, shorthand, usage)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *FlagSet) AddFlag(flag *Flag) {
|
func (f *FlagSet) AddFlag(flag *Flag) {
|
||||||
@ -529,15 +579,21 @@ func (f *FlagSet) parseLongArg(s string, args []string) (a []string, err error)
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
var value string
|
var value string
|
||||||
if len(split) == 1 {
|
if len(split) == 2 {
|
||||||
if bv, ok := flag.Value.(boolFlag); !ok || !bv.IsBoolFlag() {
|
// '--flag=arg'
|
||||||
|
value = split[1]
|
||||||
|
} else if len(flag.NoOptDefVal) > 0 {
|
||||||
|
// '--flag' (arg was optional)
|
||||||
|
value = flag.NoOptDefVal
|
||||||
|
} else if len(a) > 0 {
|
||||||
|
// '--flag arg'
|
||||||
|
value = a[0]
|
||||||
|
a = a[1:]
|
||||||
|
} else {
|
||||||
|
// '--flag' (arg was required)
|
||||||
err = f.failf("flag needs an argument: %s", s)
|
err = f.failf("flag needs an argument: %s", s)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
value = "true"
|
|
||||||
} else {
|
|
||||||
value = split[1]
|
|
||||||
}
|
|
||||||
err = f.setFlag(flag, value, s)
|
err = f.setFlag(flag, value, s)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -562,8 +618,8 @@ func (f *FlagSet) parseSingleShortArg(shorthands string, args []string) (outShor
|
|||||||
if len(shorthands) > 2 && shorthands[1] == '=' {
|
if len(shorthands) > 2 && shorthands[1] == '=' {
|
||||||
value = shorthands[2:]
|
value = shorthands[2:]
|
||||||
outShorts = ""
|
outShorts = ""
|
||||||
} else if bv, ok := flag.Value.(boolFlag); ok && bv.IsBoolFlag() {
|
} else if len(flag.NoOptDefVal) > 0 {
|
||||||
value = "true"
|
value = flag.NoOptDefVal
|
||||||
} else if len(shorthands) > 1 {
|
} else if len(shorthands) > 1 {
|
||||||
value = shorthands[1:]
|
value = shorthands[1:]
|
||||||
outShorts = ""
|
outShorts = ""
|
||||||
|
144
Godeps/_workspace/src/github.com/spf13/pflag/flag_test.go
generated
vendored
144
Godeps/_workspace/src/github.com/spf13/pflag/flag_test.go
generated
vendored
@ -9,7 +9,9 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
|
"net"
|
||||||
"os"
|
"os"
|
||||||
|
"reflect"
|
||||||
"sort"
|
"sort"
|
||||||
"strings"
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
@ -25,6 +27,7 @@ var (
|
|||||||
test_string = String("test_string", "0", "string value")
|
test_string = String("test_string", "0", "string value")
|
||||||
test_float64 = Float64("test_float64", 0, "float64 value")
|
test_float64 = Float64("test_float64", 0, "float64 value")
|
||||||
test_duration = Duration("test_duration", 0, "time.Duration value")
|
test_duration = Duration("test_duration", 0, "time.Duration value")
|
||||||
|
test_optional_int = Int("test_optional_int", 0, "optional int value")
|
||||||
normalizeFlagNameInvocations = 0
|
normalizeFlagNameInvocations = 0
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -56,7 +59,7 @@ func TestEverything(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
VisitAll(visitor)
|
VisitAll(visitor)
|
||||||
if len(m) != 8 {
|
if len(m) != 9 {
|
||||||
t.Error("VisitAll misses some flags")
|
t.Error("VisitAll misses some flags")
|
||||||
for k, v := range m {
|
for k, v := range m {
|
||||||
t.Log(k, *v)
|
t.Log(k, *v)
|
||||||
@ -79,9 +82,10 @@ func TestEverything(t *testing.T) {
|
|||||||
Set("test_string", "1")
|
Set("test_string", "1")
|
||||||
Set("test_float64", "1")
|
Set("test_float64", "1")
|
||||||
Set("test_duration", "1s")
|
Set("test_duration", "1s")
|
||||||
|
Set("test_optional_int", "1")
|
||||||
desired = "1"
|
desired = "1"
|
||||||
Visit(visitor)
|
Visit(visitor)
|
||||||
if len(m) != 8 {
|
if len(m) != 9 {
|
||||||
t.Error("Visit fails after set")
|
t.Error("Visit fails after set")
|
||||||
for k, v := range m {
|
for k, v := range m {
|
||||||
t.Log(k, *v)
|
t.Log(k, *v)
|
||||||
@ -106,6 +110,37 @@ func TestUsage(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestAnnotation(t *testing.T) {
|
||||||
|
f := NewFlagSet("shorthand", ContinueOnError)
|
||||||
|
|
||||||
|
if err := f.SetAnnotation("missing-flag", "key", nil); err == nil {
|
||||||
|
t.Errorf("Expected error setting annotation on non-existent flag")
|
||||||
|
}
|
||||||
|
|
||||||
|
f.StringP("stringa", "a", "", "string value")
|
||||||
|
if err := f.SetAnnotation("stringa", "key", nil); err != nil {
|
||||||
|
t.Errorf("Unexpected error setting new nil annotation: %v", err)
|
||||||
|
}
|
||||||
|
if annotation := f.Lookup("stringa").Annotations["key"]; annotation != nil {
|
||||||
|
t.Errorf("Unexpected annotation: %v", annotation)
|
||||||
|
}
|
||||||
|
|
||||||
|
f.StringP("stringb", "b", "", "string2 value")
|
||||||
|
if err := f.SetAnnotation("stringb", "key", []string{"value1"}); err != nil {
|
||||||
|
t.Errorf("Unexpected error setting new annotation: %v", err)
|
||||||
|
}
|
||||||
|
if annotation := f.Lookup("stringb").Annotations["key"]; !reflect.DeepEqual(annotation, []string{"value1"}) {
|
||||||
|
t.Errorf("Unexpected annotation: %v", annotation)
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := f.SetAnnotation("stringb", "key", []string{"value2"}); err != nil {
|
||||||
|
t.Errorf("Unexpected error updating annotation: %v", err)
|
||||||
|
}
|
||||||
|
if annotation := f.Lookup("stringb").Annotations["key"]; !reflect.DeepEqual(annotation, []string{"value2"}) {
|
||||||
|
t.Errorf("Unexpected annotation: %v", annotation)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func testParse(f *FlagSet, t *testing.T) {
|
func testParse(f *FlagSet, t *testing.T) {
|
||||||
if f.Parsed() {
|
if f.Parsed() {
|
||||||
t.Error("f.Parse() = true before Parse")
|
t.Error("f.Parse() = true before Parse")
|
||||||
@ -114,24 +149,46 @@ func testParse(f *FlagSet, t *testing.T) {
|
|||||||
bool2Flag := f.Bool("bool2", false, "bool2 value")
|
bool2Flag := f.Bool("bool2", false, "bool2 value")
|
||||||
bool3Flag := f.Bool("bool3", false, "bool3 value")
|
bool3Flag := f.Bool("bool3", false, "bool3 value")
|
||||||
intFlag := f.Int("int", 0, "int value")
|
intFlag := f.Int("int", 0, "int value")
|
||||||
|
int8Flag := f.Int8("int8", 0, "int value")
|
||||||
|
int32Flag := f.Int32("int32", 0, "int value")
|
||||||
int64Flag := f.Int64("int64", 0, "int64 value")
|
int64Flag := f.Int64("int64", 0, "int64 value")
|
||||||
uintFlag := f.Uint("uint", 0, "uint value")
|
uintFlag := f.Uint("uint", 0, "uint value")
|
||||||
|
uint8Flag := f.Uint8("uint8", 0, "uint value")
|
||||||
|
uint16Flag := f.Uint16("uint16", 0, "uint value")
|
||||||
|
uint32Flag := f.Uint32("uint32", 0, "uint value")
|
||||||
uint64Flag := f.Uint64("uint64", 0, "uint64 value")
|
uint64Flag := f.Uint64("uint64", 0, "uint64 value")
|
||||||
stringFlag := f.String("string", "0", "string value")
|
stringFlag := f.String("string", "0", "string value")
|
||||||
|
float32Flag := f.Float32("float32", 0, "float32 value")
|
||||||
float64Flag := f.Float64("float64", 0, "float64 value")
|
float64Flag := f.Float64("float64", 0, "float64 value")
|
||||||
|
ipFlag := f.IP("ip", net.ParseIP("127.0.0.1"), "ip value")
|
||||||
|
maskFlag := f.IPMask("mask", ParseIPv4Mask("0.0.0.0"), "mask value")
|
||||||
durationFlag := f.Duration("duration", 5*time.Second, "time.Duration value")
|
durationFlag := f.Duration("duration", 5*time.Second, "time.Duration value")
|
||||||
|
optionalIntNoValueFlag := f.Int("optional-int-no-value", 0, "int value")
|
||||||
|
f.Lookup("optional-int-no-value").NoOptDefVal = "9"
|
||||||
|
optionalIntWithValueFlag := f.Int("optional-int-with-value", 0, "int value")
|
||||||
|
f.Lookup("optional-int-no-value").NoOptDefVal = "9"
|
||||||
extra := "one-extra-argument"
|
extra := "one-extra-argument"
|
||||||
args := []string{
|
args := []string{
|
||||||
"--bool",
|
"--bool",
|
||||||
"--bool2=true",
|
"--bool2=true",
|
||||||
"--bool3=false",
|
"--bool3=false",
|
||||||
"--int=22",
|
"--int=22",
|
||||||
|
"--int8=-8",
|
||||||
|
"--int32=-32",
|
||||||
"--int64=0x23",
|
"--int64=0x23",
|
||||||
"--uint=24",
|
"--uint", "24",
|
||||||
|
"--uint8=8",
|
||||||
|
"--uint16=16",
|
||||||
|
"--uint32=32",
|
||||||
"--uint64=25",
|
"--uint64=25",
|
||||||
"--string=hello",
|
"--string=hello",
|
||||||
|
"--float32=-172e12",
|
||||||
"--float64=2718e28",
|
"--float64=2718e28",
|
||||||
|
"--ip=10.11.12.13",
|
||||||
|
"--mask=255.255.255.0",
|
||||||
"--duration=2m",
|
"--duration=2m",
|
||||||
|
"--optional-int-no-value",
|
||||||
|
"--optional-int-with-value=42",
|
||||||
extra,
|
extra,
|
||||||
}
|
}
|
||||||
if err := f.Parse(args); err != nil {
|
if err := f.Parse(args); err != nil {
|
||||||
@ -143,6 +200,9 @@ func testParse(f *FlagSet, t *testing.T) {
|
|||||||
if *boolFlag != true {
|
if *boolFlag != true {
|
||||||
t.Error("bool flag should be true, is ", *boolFlag)
|
t.Error("bool flag should be true, is ", *boolFlag)
|
||||||
}
|
}
|
||||||
|
if v, err := f.GetBool("bool"); err != nil || v != *boolFlag {
|
||||||
|
t.Error("GetBool does not work.")
|
||||||
|
}
|
||||||
if *bool2Flag != true {
|
if *bool2Flag != true {
|
||||||
t.Error("bool2 flag should be true, is ", *bool2Flag)
|
t.Error("bool2 flag should be true, is ", *bool2Flag)
|
||||||
}
|
}
|
||||||
@ -152,24 +212,102 @@ func testParse(f *FlagSet, t *testing.T) {
|
|||||||
if *intFlag != 22 {
|
if *intFlag != 22 {
|
||||||
t.Error("int flag should be 22, is ", *intFlag)
|
t.Error("int flag should be 22, is ", *intFlag)
|
||||||
}
|
}
|
||||||
|
if v, err := f.GetInt("int"); err != nil || v != *intFlag {
|
||||||
|
t.Error("GetInt does not work.")
|
||||||
|
}
|
||||||
|
if *int8Flag != -8 {
|
||||||
|
t.Error("int8 flag should be 0x23, is ", *int8Flag)
|
||||||
|
}
|
||||||
|
if v, err := f.GetInt8("int8"); err != nil || v != *int8Flag {
|
||||||
|
t.Error("GetInt8 does not work.")
|
||||||
|
}
|
||||||
|
if *int32Flag != -32 {
|
||||||
|
t.Error("int32 flag should be 0x23, is ", *int32Flag)
|
||||||
|
}
|
||||||
|
if v, err := f.GetInt32("int32"); err != nil || v != *int32Flag {
|
||||||
|
t.Error("GetInt32 does not work.")
|
||||||
|
}
|
||||||
if *int64Flag != 0x23 {
|
if *int64Flag != 0x23 {
|
||||||
t.Error("int64 flag should be 0x23, is ", *int64Flag)
|
t.Error("int64 flag should be 0x23, is ", *int64Flag)
|
||||||
}
|
}
|
||||||
|
if v, err := f.GetInt64("int64"); err != nil || v != *int64Flag {
|
||||||
|
t.Error("GetInt64 does not work.")
|
||||||
|
}
|
||||||
if *uintFlag != 24 {
|
if *uintFlag != 24 {
|
||||||
t.Error("uint flag should be 24, is ", *uintFlag)
|
t.Error("uint flag should be 24, is ", *uintFlag)
|
||||||
}
|
}
|
||||||
|
if v, err := f.GetUint("uint"); err != nil || v != *uintFlag {
|
||||||
|
t.Error("GetUint does not work.")
|
||||||
|
}
|
||||||
|
if *uint8Flag != 8 {
|
||||||
|
t.Error("uint8 flag should be 8, is ", *uint8Flag)
|
||||||
|
}
|
||||||
|
if v, err := f.GetUint8("uint8"); err != nil || v != *uint8Flag {
|
||||||
|
t.Error("GetUint8 does not work.")
|
||||||
|
}
|
||||||
|
if *uint16Flag != 16 {
|
||||||
|
t.Error("uint16 flag should be 16, is ", *uint16Flag)
|
||||||
|
}
|
||||||
|
if v, err := f.GetUint16("uint16"); err != nil || v != *uint16Flag {
|
||||||
|
t.Error("GetUint16 does not work.")
|
||||||
|
}
|
||||||
|
if *uint32Flag != 32 {
|
||||||
|
t.Error("uint32 flag should be 32, is ", *uint32Flag)
|
||||||
|
}
|
||||||
|
if v, err := f.GetUint32("uint32"); err != nil || v != *uint32Flag {
|
||||||
|
t.Error("GetUint32 does not work.")
|
||||||
|
}
|
||||||
if *uint64Flag != 25 {
|
if *uint64Flag != 25 {
|
||||||
t.Error("uint64 flag should be 25, is ", *uint64Flag)
|
t.Error("uint64 flag should be 25, is ", *uint64Flag)
|
||||||
}
|
}
|
||||||
|
if v, err := f.GetUint64("uint64"); err != nil || v != *uint64Flag {
|
||||||
|
t.Error("GetUint64 does not work.")
|
||||||
|
}
|
||||||
if *stringFlag != "hello" {
|
if *stringFlag != "hello" {
|
||||||
t.Error("string flag should be `hello`, is ", *stringFlag)
|
t.Error("string flag should be `hello`, is ", *stringFlag)
|
||||||
}
|
}
|
||||||
|
if v, err := f.GetString("string"); err != nil || v != *stringFlag {
|
||||||
|
t.Error("GetString does not work.")
|
||||||
|
}
|
||||||
|
if *float32Flag != -172e12 {
|
||||||
|
t.Error("float32 flag should be -172e12, is ", *float32Flag)
|
||||||
|
}
|
||||||
|
if v, err := f.GetFloat32("float32"); err != nil || v != *float32Flag {
|
||||||
|
t.Errorf("GetFloat32 returned %v but float32Flag was %v", v, *float32Flag)
|
||||||
|
}
|
||||||
if *float64Flag != 2718e28 {
|
if *float64Flag != 2718e28 {
|
||||||
t.Error("float64 flag should be 2718e28, is ", *float64Flag)
|
t.Error("float64 flag should be 2718e28, is ", *float64Flag)
|
||||||
}
|
}
|
||||||
|
if v, err := f.GetFloat64("float64"); err != nil || v != *float64Flag {
|
||||||
|
t.Errorf("GetFloat64 returned %v but float64Flag was %v", v, *float64Flag)
|
||||||
|
}
|
||||||
|
if !(*ipFlag).Equal(net.ParseIP("10.11.12.13")) {
|
||||||
|
t.Error("ip flag should be 10.11.12.13, is ", *ipFlag)
|
||||||
|
}
|
||||||
|
if v, err := f.GetIP("ip"); err != nil || !v.Equal(*ipFlag) {
|
||||||
|
t.Errorf("GetIP returned %v but ipFlag was %v", v, *ipFlag)
|
||||||
|
}
|
||||||
|
if (*maskFlag).String() != ParseIPv4Mask("255.255.255.0").String() {
|
||||||
|
t.Error("mask flag should be 255.255.255.0, is ", (*maskFlag).String())
|
||||||
|
}
|
||||||
|
if v, err := f.GetIPv4Mask("mask"); err != nil || v.String() != (*maskFlag).String() {
|
||||||
|
t.Errorf("GetIP returned %v but maskFlag was %v", v, *maskFlag, err)
|
||||||
|
}
|
||||||
if *durationFlag != 2*time.Minute {
|
if *durationFlag != 2*time.Minute {
|
||||||
t.Error("duration flag should be 2m, is ", *durationFlag)
|
t.Error("duration flag should be 2m, is ", *durationFlag)
|
||||||
}
|
}
|
||||||
|
if v, err := f.GetDuration("duration"); err != nil || v != *durationFlag {
|
||||||
|
t.Error("GetDuration does not work.")
|
||||||
|
}
|
||||||
|
if _, err := f.GetInt("duration"); err == nil {
|
||||||
|
t.Error("GetInt parsed a time.Duration?!?!")
|
||||||
|
}
|
||||||
|
if *optionalIntNoValueFlag != 9 {
|
||||||
|
t.Error("optional int flag should be the default value, is ", *optionalIntNoValueFlag)
|
||||||
|
}
|
||||||
|
if *optionalIntWithValueFlag != 42 {
|
||||||
|
t.Error("optional int flag should be 42, is ", *optionalIntWithValueFlag)
|
||||||
|
}
|
||||||
if len(f.Args()) != 1 {
|
if len(f.Args()) != 1 {
|
||||||
t.Error("expected one argument, got", len(f.Args()))
|
t.Error("expected one argument, got", len(f.Args()))
|
||||||
} else if f.Args()[0] != extra {
|
} else if f.Args()[0] != extra {
|
||||||
|
17
Godeps/_workspace/src/github.com/spf13/pflag/float32.go
generated
vendored
17
Godeps/_workspace/src/github.com/spf13/pflag/float32.go
generated
vendored
@ -25,6 +25,23 @@ func (f *float32Value) Type() string {
|
|||||||
|
|
||||||
func (f *float32Value) String() string { return fmt.Sprintf("%v", *f) }
|
func (f *float32Value) String() string { return fmt.Sprintf("%v", *f) }
|
||||||
|
|
||||||
|
func float32Conv(sval string) (interface{}, error) {
|
||||||
|
v, err := strconv.ParseFloat(sval, 32)
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
return float32(v), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetFloat32 return the float32 value of a flag with the given name
|
||||||
|
func (f *FlagSet) GetFloat32(name string) (float32, error) {
|
||||||
|
val, err := f.getFlagType(name, "float32", float32Conv)
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
return val.(float32), nil
|
||||||
|
}
|
||||||
|
|
||||||
// Float32Var defines a float32 flag with specified name, default value, and usage string.
|
// Float32Var defines a float32 flag with specified name, default value, and usage string.
|
||||||
// The argument p points to a float32 variable in which to store the value of the flag.
|
// The argument p points to a float32 variable in which to store the value of the flag.
|
||||||
func (f *FlagSet) Float32Var(p *float32, name string, value float32, usage string) {
|
func (f *FlagSet) Float32Var(p *float32, name string, value float32, usage string) {
|
||||||
|
13
Godeps/_workspace/src/github.com/spf13/pflag/float64.go
generated
vendored
13
Godeps/_workspace/src/github.com/spf13/pflag/float64.go
generated
vendored
@ -25,6 +25,19 @@ func (f *float64Value) Type() string {
|
|||||||
|
|
||||||
func (f *float64Value) String() string { return fmt.Sprintf("%v", *f) }
|
func (f *float64Value) String() string { return fmt.Sprintf("%v", *f) }
|
||||||
|
|
||||||
|
func float64Conv(sval string) (interface{}, error) {
|
||||||
|
return strconv.ParseFloat(sval, 64)
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetFloat64 return the float64 value of a flag with the given name
|
||||||
|
func (f *FlagSet) GetFloat64(name string) (float64, error) {
|
||||||
|
val, err := f.getFlagType(name, "float64", float64Conv)
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
return val.(float64), nil
|
||||||
|
}
|
||||||
|
|
||||||
// Float64Var defines a float64 flag with specified name, default value, and usage string.
|
// Float64Var defines a float64 flag with specified name, default value, and usage string.
|
||||||
// The argument p points to a float64 variable in which to store the value of the flag.
|
// The argument p points to a float64 variable in which to store the value of the flag.
|
||||||
func (f *FlagSet) Float64Var(p *float64, name string, value float64, usage string) {
|
func (f *FlagSet) Float64Var(p *float64, name string, value float64, usage string) {
|
||||||
|
13
Godeps/_workspace/src/github.com/spf13/pflag/int.go
generated
vendored
13
Godeps/_workspace/src/github.com/spf13/pflag/int.go
generated
vendored
@ -25,6 +25,19 @@ func (i *intValue) Type() string {
|
|||||||
|
|
||||||
func (i *intValue) String() string { return fmt.Sprintf("%v", *i) }
|
func (i *intValue) String() string { return fmt.Sprintf("%v", *i) }
|
||||||
|
|
||||||
|
func intConv(sval string) (interface{}, error) {
|
||||||
|
return strconv.Atoi(sval)
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetInt return the int value of a flag with the given name
|
||||||
|
func (f *FlagSet) GetInt(name string) (int, error) {
|
||||||
|
val, err := f.getFlagType(name, "int", intConv)
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
return val.(int), nil
|
||||||
|
}
|
||||||
|
|
||||||
// IntVar defines an int flag with specified name, default value, and usage string.
|
// IntVar defines an int flag with specified name, default value, and usage string.
|
||||||
// The argument p points to an int variable in which to store the value of the flag.
|
// The argument p points to an int variable in which to store the value of the flag.
|
||||||
func (f *FlagSet) IntVar(p *int, name string, value int, usage string) {
|
func (f *FlagSet) IntVar(p *int, name string, value int, usage string) {
|
||||||
|
17
Godeps/_workspace/src/github.com/spf13/pflag/int32.go
generated
vendored
17
Godeps/_workspace/src/github.com/spf13/pflag/int32.go
generated
vendored
@ -25,6 +25,23 @@ func (i *int32Value) Type() string {
|
|||||||
|
|
||||||
func (i *int32Value) String() string { return fmt.Sprintf("%v", *i) }
|
func (i *int32Value) String() string { return fmt.Sprintf("%v", *i) }
|
||||||
|
|
||||||
|
func int32Conv(sval string) (interface{}, error) {
|
||||||
|
v, err := strconv.ParseInt(sval, 0, 32)
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
return int32(v), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetInt32 return the int32 value of a flag with the given name
|
||||||
|
func (f *FlagSet) GetInt32(name string) (int32, error) {
|
||||||
|
val, err := f.getFlagType(name, "int32", int32Conv)
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
return val.(int32), nil
|
||||||
|
}
|
||||||
|
|
||||||
// Int32Var defines an int32 flag with specified name, default value, and usage string.
|
// Int32Var defines an int32 flag with specified name, default value, and usage string.
|
||||||
// The argument p points to an int32 variable in which to store the value of the flag.
|
// The argument p points to an int32 variable in which to store the value of the flag.
|
||||||
func (f *FlagSet) Int32Var(p *int32, name string, value int32, usage string) {
|
func (f *FlagSet) Int32Var(p *int32, name string, value int32, usage string) {
|
||||||
|
13
Godeps/_workspace/src/github.com/spf13/pflag/int64.go
generated
vendored
13
Godeps/_workspace/src/github.com/spf13/pflag/int64.go
generated
vendored
@ -25,6 +25,19 @@ func (i *int64Value) Type() string {
|
|||||||
|
|
||||||
func (i *int64Value) String() string { return fmt.Sprintf("%v", *i) }
|
func (i *int64Value) String() string { return fmt.Sprintf("%v", *i) }
|
||||||
|
|
||||||
|
func int64Conv(sval string) (interface{}, error) {
|
||||||
|
return strconv.ParseInt(sval, 0, 64)
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetInt64 return the int64 value of a flag with the given name
|
||||||
|
func (f *FlagSet) GetInt64(name string) (int64, error) {
|
||||||
|
val, err := f.getFlagType(name, "int64", int64Conv)
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
return val.(int64), nil
|
||||||
|
}
|
||||||
|
|
||||||
// Int64Var defines an int64 flag with specified name, default value, and usage string.
|
// Int64Var defines an int64 flag with specified name, default value, and usage string.
|
||||||
// The argument p points to an int64 variable in which to store the value of the flag.
|
// The argument p points to an int64 variable in which to store the value of the flag.
|
||||||
func (f *FlagSet) Int64Var(p *int64, name string, value int64, usage string) {
|
func (f *FlagSet) Int64Var(p *int64, name string, value int64, usage string) {
|
||||||
|
17
Godeps/_workspace/src/github.com/spf13/pflag/int8.go
generated
vendored
17
Godeps/_workspace/src/github.com/spf13/pflag/int8.go
generated
vendored
@ -25,6 +25,23 @@ func (i *int8Value) Type() string {
|
|||||||
|
|
||||||
func (i *int8Value) String() string { return fmt.Sprintf("%v", *i) }
|
func (i *int8Value) String() string { return fmt.Sprintf("%v", *i) }
|
||||||
|
|
||||||
|
func int8Conv(sval string) (interface{}, error) {
|
||||||
|
v, err := strconv.ParseInt(sval, 0, 8)
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
return int8(v), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetInt8 return the int8 value of a flag with the given name
|
||||||
|
func (f *FlagSet) GetInt8(name string) (int8, error) {
|
||||||
|
val, err := f.getFlagType(name, "int8", int8Conv)
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
return val.(int8), nil
|
||||||
|
}
|
||||||
|
|
||||||
// Int8Var defines an int8 flag with specified name, default value, and usage string.
|
// Int8Var defines an int8 flag with specified name, default value, and usage string.
|
||||||
// The argument p points to an int8 variable in which to store the value of the flag.
|
// The argument p points to an int8 variable in which to store the value of the flag.
|
||||||
func (f *FlagSet) Int8Var(p *int8, name string, value int8, usage string) {
|
func (f *FlagSet) Int8Var(p *int8, name string, value int8, usage string) {
|
||||||
|
118
Godeps/_workspace/src/github.com/spf13/pflag/int_slice.go
generated
vendored
Normal file
118
Godeps/_workspace/src/github.com/spf13/pflag/int_slice.go
generated
vendored
Normal file
@ -0,0 +1,118 @@
|
|||||||
|
package pflag
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"strconv"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
// -- intSlice Value
|
||||||
|
type intSliceValue []int
|
||||||
|
|
||||||
|
func newIntSliceValue(val []int, p *[]int) *intSliceValue {
|
||||||
|
*p = val
|
||||||
|
return (*intSliceValue)(p)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *intSliceValue) Set(val string) error {
|
||||||
|
ss := strings.Split(val, ",")
|
||||||
|
out := make([]int, len(ss))
|
||||||
|
for i, d := range ss {
|
||||||
|
var err error
|
||||||
|
out[i], err = strconv.Atoi(d)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
*s = append(*s, out...)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *intSliceValue) Type() string {
|
||||||
|
return "intSlice"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *intSliceValue) String() string {
|
||||||
|
out := make([]string, len(*s))
|
||||||
|
for i, d := range *s {
|
||||||
|
out[i] = fmt.Sprintf("%d", d)
|
||||||
|
}
|
||||||
|
return "[" + strings.Join(out, ",") + "]"
|
||||||
|
}
|
||||||
|
|
||||||
|
func intSliceConv(val string) (interface{}, error) {
|
||||||
|
val = strings.Trim(val, "[]")
|
||||||
|
// Empty string would cause a slice with one (empty) entry
|
||||||
|
if len(val) == 0 {
|
||||||
|
return []int{}, nil
|
||||||
|
}
|
||||||
|
ss := strings.Split(val, ",")
|
||||||
|
out := make([]int, len(ss))
|
||||||
|
for i, d := range ss {
|
||||||
|
var err error
|
||||||
|
out[i], err = strconv.Atoi(d)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
return out, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetIntSlice return the []int value of a flag with the given name
|
||||||
|
func (f *FlagSet) GetIntSlice(name string) ([]int, error) {
|
||||||
|
val, err := f.getFlagType(name, "intSlice", intSliceConv)
|
||||||
|
if err != nil {
|
||||||
|
return []int{}, err
|
||||||
|
}
|
||||||
|
return val.([]int), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// IntSliceVar defines a intSlice flag with specified name, default value, and usage string.
|
||||||
|
// The argument p points to a []int variable in which to store the value of the flag.
|
||||||
|
func (f *FlagSet) IntSliceVar(p *[]int, name string, value []int, usage string) {
|
||||||
|
f.VarP(newIntSliceValue(value, p), name, "", usage)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Like IntSliceVar, but accepts a shorthand letter that can be used after a single dash.
|
||||||
|
func (f *FlagSet) IntSliceVarP(p *[]int, name, shorthand string, value []int, usage string) {
|
||||||
|
f.VarP(newIntSliceValue(value, p), name, shorthand, usage)
|
||||||
|
}
|
||||||
|
|
||||||
|
// IntSliceVar defines a int[] flag with specified name, default value, and usage string.
|
||||||
|
// The argument p points to a int[] variable in which to store the value of the flag.
|
||||||
|
func IntSliceVar(p *[]int, name string, value []int, usage string) {
|
||||||
|
CommandLine.VarP(newIntSliceValue(value, p), name, "", usage)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Like IntSliceVar, but accepts a shorthand letter that can be used after a single dash.
|
||||||
|
func IntSliceVarP(p *[]int, name, shorthand string, value []int, usage string) {
|
||||||
|
CommandLine.VarP(newIntSliceValue(value, p), name, shorthand, usage)
|
||||||
|
}
|
||||||
|
|
||||||
|
// IntSlice defines a []int flag with specified name, default value, and usage string.
|
||||||
|
// The return value is the address of a []int variable that stores the value of the flag.
|
||||||
|
func (f *FlagSet) IntSlice(name string, value []int, usage string) *[]int {
|
||||||
|
p := make([]int, 0)
|
||||||
|
f.IntSliceVarP(&p, name, "", value, usage)
|
||||||
|
return &p
|
||||||
|
}
|
||||||
|
|
||||||
|
// Like IntSlice, but accepts a shorthand letter that can be used after a single dash.
|
||||||
|
func (f *FlagSet) IntSliceP(name, shorthand string, value []int, usage string) *[]int {
|
||||||
|
p := make([]int, 0)
|
||||||
|
f.IntSliceVarP(&p, name, shorthand, value, usage)
|
||||||
|
return &p
|
||||||
|
}
|
||||||
|
|
||||||
|
// IntSlice defines a []int flag with specified name, default value, and usage string.
|
||||||
|
// The return value is the address of a []int variable that stores the value of the flag.
|
||||||
|
func IntSlice(name string, value []int, usage string) *[]int {
|
||||||
|
return CommandLine.IntSliceP(name, "", value, usage)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Like IntSlice, but accepts a shorthand letter that can be used after a single dash.
|
||||||
|
func IntSliceP(name, shorthand string, value []int, usage string) *[]int {
|
||||||
|
return CommandLine.IntSliceP(name, shorthand, value, usage)
|
||||||
|
}
|
86
Godeps/_workspace/src/github.com/spf13/pflag/int_slice_test.go
generated
vendored
Normal file
86
Godeps/_workspace/src/github.com/spf13/pflag/int_slice_test.go
generated
vendored
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
// Copyright 2009 The Go Authors. All rights reserved.
|
||||||
|
// Use of this source code is governed by a BSD-style
|
||||||
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
package pflag
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"strconv"
|
||||||
|
"strings"
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
func setUpISFlagSet(isp *[]int) *FlagSet {
|
||||||
|
f := NewFlagSet("test", ContinueOnError)
|
||||||
|
f.IntSliceVar(isp, "is", []int{}, "Command seperated list!")
|
||||||
|
return f
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestEmptyIS(t *testing.T) {
|
||||||
|
var is []int
|
||||||
|
f := setUpISFlagSet(&is)
|
||||||
|
err := f.Parse([]string{})
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal("expected no error; got", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
getIS, err := f.GetIntSlice("is")
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal("got an error from GetStringSlice():", err)
|
||||||
|
}
|
||||||
|
if len(getIS) != 0 {
|
||||||
|
t.Fatalf("got is %v with len=%d but expected length=0", getIS, len(getIS))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestIS(t *testing.T) {
|
||||||
|
var is []int
|
||||||
|
f := setUpISFlagSet(&is)
|
||||||
|
|
||||||
|
vals := []string{"1", "2", "4", "3"}
|
||||||
|
arg := fmt.Sprintf("--is=%s", strings.Join(vals, ","))
|
||||||
|
err := f.Parse([]string{arg})
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal("expected no error; got", err)
|
||||||
|
}
|
||||||
|
for i, v := range is {
|
||||||
|
d, err := strconv.Atoi(vals[i])
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("got error: %v", err)
|
||||||
|
}
|
||||||
|
if d != v {
|
||||||
|
t.Fatalf("expected is[%d] to be %s but got: %d", i, vals[i], v)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
getIS, err := f.GetIntSlice("is")
|
||||||
|
for i, v := range getIS {
|
||||||
|
d, err := strconv.Atoi(vals[i])
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("got error: %v", err)
|
||||||
|
}
|
||||||
|
if d != v {
|
||||||
|
t.Fatalf("expected is[%d] to be %s but got: %d from GetIntSlice", i, vals[i], v)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestISCalledTwice(t *testing.T) {
|
||||||
|
var is []int
|
||||||
|
f := setUpISFlagSet(&is)
|
||||||
|
|
||||||
|
in := []string{"1,2", "3"}
|
||||||
|
expected := []int{1, 2, 3}
|
||||||
|
argfmt := "--is=%s"
|
||||||
|
arg1 := fmt.Sprintf(argfmt, in[0])
|
||||||
|
arg2 := fmt.Sprintf(argfmt, in[1])
|
||||||
|
err := f.Parse([]string{arg1, arg2})
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal("expected no error; got", err)
|
||||||
|
}
|
||||||
|
for i, v := range is {
|
||||||
|
if expected[i] != v {
|
||||||
|
t.Fatalf("expected ss[%d] to be %s but got: %s", i, expected[i], v)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
25
Godeps/_workspace/src/github.com/spf13/pflag/ip.go
generated
vendored
25
Godeps/_workspace/src/github.com/spf13/pflag/ip.go
generated
vendored
@ -3,8 +3,11 @@ package pflag
|
|||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"net"
|
"net"
|
||||||
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var _ = strings.TrimSpace
|
||||||
|
|
||||||
// -- net.IP value
|
// -- net.IP value
|
||||||
type ipValue net.IP
|
type ipValue net.IP
|
||||||
|
|
||||||
@ -15,21 +18,35 @@ func newIPValue(val net.IP, p *net.IP) *ipValue {
|
|||||||
|
|
||||||
func (i *ipValue) String() string { return net.IP(*i).String() }
|
func (i *ipValue) String() string { return net.IP(*i).String() }
|
||||||
func (i *ipValue) Set(s string) error {
|
func (i *ipValue) Set(s string) error {
|
||||||
ip := net.ParseIP(s)
|
ip := net.ParseIP(strings.TrimSpace(s))
|
||||||
if ip == nil {
|
if ip == nil {
|
||||||
return fmt.Errorf("failed to parse IP: %q", s)
|
return fmt.Errorf("failed to parse IP: %q", s)
|
||||||
}
|
}
|
||||||
*i = ipValue(ip)
|
*i = ipValue(ip)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
func (i *ipValue) Get() interface{} {
|
|
||||||
return net.IP(*i)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (i *ipValue) Type() string {
|
func (i *ipValue) Type() string {
|
||||||
return "ip"
|
return "ip"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func ipConv(sval string) (interface{}, error) {
|
||||||
|
ip := net.ParseIP(sval)
|
||||||
|
if ip != nil {
|
||||||
|
return ip, nil
|
||||||
|
}
|
||||||
|
return nil, fmt.Errorf("invalid string being converted to IP address: %s", sval)
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetIP return the net.IP value of a flag with the given name
|
||||||
|
func (f *FlagSet) GetIP(name string) (net.IP, error) {
|
||||||
|
val, err := f.getFlagType(name, "ip", ipConv)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return val.(net.IP), nil
|
||||||
|
}
|
||||||
|
|
||||||
// IPVar defines an net.IP flag with specified name, default value, and usage string.
|
// IPVar defines an net.IP flag with specified name, default value, and usage string.
|
||||||
// The argument p points to an net.IP variable in which to store the value of the flag.
|
// The argument p points to an net.IP variable in which to store the value of the flag.
|
||||||
func (f *FlagSet) IPVar(p *net.IP, name string, value net.IP, usage string) {
|
func (f *FlagSet) IPVar(p *net.IP, name string, value net.IP, usage string) {
|
||||||
|
63
Godeps/_workspace/src/github.com/spf13/pflag/ip_test.go
generated
vendored
Normal file
63
Godeps/_workspace/src/github.com/spf13/pflag/ip_test.go
generated
vendored
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
package pflag
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"net"
|
||||||
|
"os"
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
func setUpIP(ip *net.IP) *FlagSet {
|
||||||
|
f := NewFlagSet("test", ContinueOnError)
|
||||||
|
f.IPVar(ip, "address", net.ParseIP("0.0.0.0"), "IP Address")
|
||||||
|
return f
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestIP(t *testing.T) {
|
||||||
|
testCases := []struct {
|
||||||
|
input string
|
||||||
|
success bool
|
||||||
|
expected string
|
||||||
|
}{
|
||||||
|
{"0.0.0.0", true, "0.0.0.0"},
|
||||||
|
{" 0.0.0.0 ", true, "0.0.0.0"},
|
||||||
|
{"1.2.3.4", true, "1.2.3.4"},
|
||||||
|
{"127.0.0.1", true, "127.0.0.1"},
|
||||||
|
{"255.255.255.255", true, "255.255.255.255"},
|
||||||
|
{"", false, ""},
|
||||||
|
{"0", false, ""},
|
||||||
|
{"localhost", false, ""},
|
||||||
|
{"0.0.0", false, ""},
|
||||||
|
{"0.0.0.", false, ""},
|
||||||
|
{"0.0.0.0.", false, ""},
|
||||||
|
{"0.0.0.256", false, ""},
|
||||||
|
{"0 . 0 . 0 . 0", false, ""},
|
||||||
|
}
|
||||||
|
|
||||||
|
devnull, _ := os.Open(os.DevNull)
|
||||||
|
os.Stderr = devnull
|
||||||
|
for i := range testCases {
|
||||||
|
var addr net.IP
|
||||||
|
f := setUpIP(&addr)
|
||||||
|
|
||||||
|
tc := &testCases[i]
|
||||||
|
|
||||||
|
arg := fmt.Sprintf("--address=%s", tc.input)
|
||||||
|
err := f.Parse([]string{arg})
|
||||||
|
if err != nil && tc.success == true {
|
||||||
|
t.Errorf("expected success, got %q", err)
|
||||||
|
continue
|
||||||
|
} else if err == nil && tc.success == false {
|
||||||
|
t.Errorf("expected failure")
|
||||||
|
continue
|
||||||
|
} else if tc.success {
|
||||||
|
ip, err := f.GetIP("address")
|
||||||
|
if err != nil {
|
||||||
|
t.Errorf("Got error trying to fetch the IP flag: %v", err)
|
||||||
|
}
|
||||||
|
if ip.String() != tc.expected {
|
||||||
|
t.Errorf("expected %q, got %q", tc.expected, ip.String())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
39
Godeps/_workspace/src/github.com/spf13/pflag/ipmask.go
generated
vendored
39
Godeps/_workspace/src/github.com/spf13/pflag/ipmask.go
generated
vendored
@ -3,6 +3,7 @@ package pflag
|
|||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"net"
|
"net"
|
||||||
|
"strconv"
|
||||||
)
|
)
|
||||||
|
|
||||||
// -- net.IPMask value
|
// -- net.IPMask value
|
||||||
@ -22,9 +23,6 @@ func (i *ipMaskValue) Set(s string) error {
|
|||||||
*i = ipMaskValue(ip)
|
*i = ipMaskValue(ip)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
func (i *ipMaskValue) Get() interface{} {
|
|
||||||
return net.IPMask(*i)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (i *ipMaskValue) Type() string {
|
func (i *ipMaskValue) Type() string {
|
||||||
return "ipMask"
|
return "ipMask"
|
||||||
@ -35,11 +33,46 @@ func (i *ipMaskValue) Type() string {
|
|||||||
func ParseIPv4Mask(s string) net.IPMask {
|
func ParseIPv4Mask(s string) net.IPMask {
|
||||||
mask := net.ParseIP(s)
|
mask := net.ParseIP(s)
|
||||||
if mask == nil {
|
if mask == nil {
|
||||||
|
if len(s) != 8 {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
// net.IPMask.String() actually outputs things like ffffff00
|
||||||
|
// so write a horrible parser for that as well :-(
|
||||||
|
m := []int{}
|
||||||
|
for i := 0; i < 4; i++ {
|
||||||
|
b := "0x" + s[2*i:2*i+2]
|
||||||
|
d, err := strconv.ParseInt(b, 0, 0)
|
||||||
|
if err != nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
m = append(m, int(d))
|
||||||
|
}
|
||||||
|
s := fmt.Sprintf("%d.%d.%d.%d", m[0], m[1], m[2], m[3])
|
||||||
|
mask = net.ParseIP(s)
|
||||||
|
if mask == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
return net.IPv4Mask(mask[12], mask[13], mask[14], mask[15])
|
return net.IPv4Mask(mask[12], mask[13], mask[14], mask[15])
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func parseIPv4Mask(sval string) (interface{}, error) {
|
||||||
|
mask := ParseIPv4Mask(sval)
|
||||||
|
if mask == nil {
|
||||||
|
return nil, fmt.Errorf("unable to parse %s as net.IPMask", sval)
|
||||||
|
}
|
||||||
|
return mask, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetIPv4Mask return the net.IPv4Mask value of a flag with the given name
|
||||||
|
func (f *FlagSet) GetIPv4Mask(name string) (net.IPMask, error) {
|
||||||
|
val, err := f.getFlagType(name, "ipMask", parseIPv4Mask)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return val.(net.IPMask), nil
|
||||||
|
}
|
||||||
|
|
||||||
// IPMaskVar defines an net.IPMask flag with specified name, default value, and usage string.
|
// IPMaskVar defines an net.IPMask flag with specified name, default value, and usage string.
|
||||||
// The argument p points to an net.IPMask variable in which to store the value of the flag.
|
// The argument p points to an net.IPMask variable in which to store the value of the flag.
|
||||||
func (f *FlagSet) IPMaskVar(p *net.IPMask, name string, value net.IPMask, usage string) {
|
func (f *FlagSet) IPMaskVar(p *net.IPMask, name string, value net.IPMask, usage string) {
|
||||||
|
100
Godeps/_workspace/src/github.com/spf13/pflag/ipnet.go
generated
vendored
Normal file
100
Godeps/_workspace/src/github.com/spf13/pflag/ipnet.go
generated
vendored
Normal file
@ -0,0 +1,100 @@
|
|||||||
|
package pflag
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"net"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
// IPNet adapts net.IPNet for use as a flag.
|
||||||
|
type IPNetValue net.IPNet
|
||||||
|
|
||||||
|
func (ipnet IPNetValue) String() string {
|
||||||
|
n := net.IPNet(ipnet)
|
||||||
|
return n.String()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ipnet *IPNetValue) Set(value string) error {
|
||||||
|
_, n, err := net.ParseCIDR(strings.TrimSpace(value))
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
*ipnet = IPNetValue(*n)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (*IPNetValue) Type() string {
|
||||||
|
return "ipNet"
|
||||||
|
}
|
||||||
|
|
||||||
|
var _ = strings.TrimSpace
|
||||||
|
|
||||||
|
func newIPNetValue(val net.IPNet, p *net.IPNet) *IPNetValue {
|
||||||
|
*p = val
|
||||||
|
return (*IPNetValue)(p)
|
||||||
|
}
|
||||||
|
|
||||||
|
func ipNetConv(sval string) (interface{}, error) {
|
||||||
|
_, n, err := net.ParseCIDR(strings.TrimSpace(sval))
|
||||||
|
if err == nil {
|
||||||
|
return *n, nil
|
||||||
|
}
|
||||||
|
return nil, fmt.Errorf("invalid string being converted to IPNet: %s", sval)
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetIPNet return the net.IPNet value of a flag with the given name
|
||||||
|
func (f *FlagSet) GetIPNet(name string) (net.IPNet, error) {
|
||||||
|
val, err := f.getFlagType(name, "ipNet", ipNetConv)
|
||||||
|
if err != nil {
|
||||||
|
return net.IPNet{}, err
|
||||||
|
}
|
||||||
|
return val.(net.IPNet), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// IPNetVar defines an net.IPNet flag with specified name, default value, and usage string.
|
||||||
|
// The argument p points to an net.IPNet variable in which to store the value of the flag.
|
||||||
|
func (f *FlagSet) IPNetVar(p *net.IPNet, name string, value net.IPNet, usage string) {
|
||||||
|
f.VarP(newIPNetValue(value, p), name, "", usage)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Like IPNetVar, but accepts a shorthand letter that can be used after a single dash.
|
||||||
|
func (f *FlagSet) IPNetVarP(p *net.IPNet, name, shorthand string, value net.IPNet, usage string) {
|
||||||
|
f.VarP(newIPNetValue(value, p), name, shorthand, usage)
|
||||||
|
}
|
||||||
|
|
||||||
|
// IPNetVar defines an net.IPNet flag with specified name, default value, and usage string.
|
||||||
|
// The argument p points to an net.IPNet variable in which to store the value of the flag.
|
||||||
|
func IPNetVar(p *net.IPNet, name string, value net.IPNet, usage string) {
|
||||||
|
CommandLine.VarP(newIPNetValue(value, p), name, "", usage)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Like IPNetVar, but accepts a shorthand letter that can be used after a single dash.
|
||||||
|
func IPNetVarP(p *net.IPNet, name, shorthand string, value net.IPNet, usage string) {
|
||||||
|
CommandLine.VarP(newIPNetValue(value, p), name, shorthand, usage)
|
||||||
|
}
|
||||||
|
|
||||||
|
// IPNet defines an net.IPNet flag with specified name, default value, and usage string.
|
||||||
|
// The return value is the address of an net.IPNet variable that stores the value of the flag.
|
||||||
|
func (f *FlagSet) IPNet(name string, value net.IPNet, usage string) *net.IPNet {
|
||||||
|
p := new(net.IPNet)
|
||||||
|
f.IPNetVarP(p, name, "", value, usage)
|
||||||
|
return p
|
||||||
|
}
|
||||||
|
|
||||||
|
// Like IPNet, but accepts a shorthand letter that can be used after a single dash.
|
||||||
|
func (f *FlagSet) IPNetP(name, shorthand string, value net.IPNet, usage string) *net.IPNet {
|
||||||
|
p := new(net.IPNet)
|
||||||
|
f.IPNetVarP(p, name, shorthand, value, usage)
|
||||||
|
return p
|
||||||
|
}
|
||||||
|
|
||||||
|
// IPNet defines an net.IPNet flag with specified name, default value, and usage string.
|
||||||
|
// The return value is the address of an net.IPNet variable that stores the value of the flag.
|
||||||
|
func IPNet(name string, value net.IPNet, usage string) *net.IPNet {
|
||||||
|
return CommandLine.IPNetP(name, "", value, usage)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Like IPNet, but accepts a shorthand letter that can be used after a single dash.
|
||||||
|
func IPNetP(name, shorthand string, value net.IPNet, usage string) *net.IPNet {
|
||||||
|
return CommandLine.IPNetP(name, shorthand, value, usage)
|
||||||
|
}
|
70
Godeps/_workspace/src/github.com/spf13/pflag/ipnet_test.go
generated
vendored
Normal file
70
Godeps/_workspace/src/github.com/spf13/pflag/ipnet_test.go
generated
vendored
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
package pflag
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"net"
|
||||||
|
"os"
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
func setUpIPNet(ip *net.IPNet) *FlagSet {
|
||||||
|
f := NewFlagSet("test", ContinueOnError)
|
||||||
|
_, def, _ := net.ParseCIDR("0.0.0.0/0")
|
||||||
|
f.IPNetVar(ip, "address", *def, "IP Address")
|
||||||
|
return f
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestIPNet(t *testing.T) {
|
||||||
|
testCases := []struct {
|
||||||
|
input string
|
||||||
|
success bool
|
||||||
|
expected string
|
||||||
|
}{
|
||||||
|
{"0.0.0.0/0", true, "0.0.0.0/0"},
|
||||||
|
{" 0.0.0.0/0 ", true, "0.0.0.0/0"},
|
||||||
|
{"1.2.3.4/8", true, "1.0.0.0/8"},
|
||||||
|
{"127.0.0.1/16", true, "127.0.0.0/16"},
|
||||||
|
{"255.255.255.255/19", true, "255.255.224.0/19"},
|
||||||
|
{"255.255.255.255/32", true, "255.255.255.255/32"},
|
||||||
|
{"", false, ""},
|
||||||
|
{"/0", false, ""},
|
||||||
|
{"0", false, ""},
|
||||||
|
{"0/0", false, ""},
|
||||||
|
{"localhost/0", false, ""},
|
||||||
|
{"0.0.0/4", false, ""},
|
||||||
|
{"0.0.0./8", false, ""},
|
||||||
|
{"0.0.0.0./12", false, ""},
|
||||||
|
{"0.0.0.256/16", false, ""},
|
||||||
|
{"0.0.0.0 /20", false, ""},
|
||||||
|
{"0.0.0.0/ 24", false, ""},
|
||||||
|
{"0 . 0 . 0 . 0 / 28", false, ""},
|
||||||
|
{"0.0.0.0/33", false, ""},
|
||||||
|
}
|
||||||
|
|
||||||
|
devnull, _ := os.Open(os.DevNull)
|
||||||
|
os.Stderr = devnull
|
||||||
|
for i := range testCases {
|
||||||
|
var addr net.IPNet
|
||||||
|
f := setUpIPNet(&addr)
|
||||||
|
|
||||||
|
tc := &testCases[i]
|
||||||
|
|
||||||
|
arg := fmt.Sprintf("--address=%s", tc.input)
|
||||||
|
err := f.Parse([]string{arg})
|
||||||
|
if err != nil && tc.success == true {
|
||||||
|
t.Errorf("expected success, got %q", err)
|
||||||
|
continue
|
||||||
|
} else if err == nil && tc.success == false {
|
||||||
|
t.Errorf("expected failure")
|
||||||
|
continue
|
||||||
|
} else if tc.success {
|
||||||
|
ip, err := f.GetIPNet("address")
|
||||||
|
if err != nil {
|
||||||
|
t.Errorf("Got error trying to fetch the IP flag: %v", err)
|
||||||
|
}
|
||||||
|
if ip.String() != tc.expected {
|
||||||
|
t.Errorf("expected %q, got %q", tc.expected, ip.String())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
13
Godeps/_workspace/src/github.com/spf13/pflag/string.go
generated
vendored
13
Godeps/_workspace/src/github.com/spf13/pflag/string.go
generated
vendored
@ -20,6 +20,19 @@ func (s *stringValue) Type() string {
|
|||||||
|
|
||||||
func (s *stringValue) String() string { return fmt.Sprintf("%s", *s) }
|
func (s *stringValue) String() string { return fmt.Sprintf("%s", *s) }
|
||||||
|
|
||||||
|
func stringConv(sval string) (interface{}, error) {
|
||||||
|
return sval, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetString return the string value of a flag with the given name
|
||||||
|
func (f *FlagSet) GetString(name string) (string, error) {
|
||||||
|
val, err := f.getFlagType(name, "string", stringConv)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
return val.(string), nil
|
||||||
|
}
|
||||||
|
|
||||||
// StringVar defines a string flag with specified name, default value, and usage string.
|
// StringVar defines a string flag with specified name, default value, and usage string.
|
||||||
// The argument p points to a string variable in which to store the value of the flag.
|
// The argument p points to a string variable in which to store the value of the flag.
|
||||||
func (f *FlagSet) StringVar(p *string, name string, value string, usage string) {
|
func (f *FlagSet) StringVar(p *string, name string, value string, usage string) {
|
||||||
|
91
Godeps/_workspace/src/github.com/spf13/pflag/string_slice.go
generated
vendored
Normal file
91
Godeps/_workspace/src/github.com/spf13/pflag/string_slice.go
generated
vendored
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
package pflag
|
||||||
|
|
||||||
|
import (
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
// -- stringSlice Value
|
||||||
|
type stringSliceValue []string
|
||||||
|
|
||||||
|
func newStringSliceValue(val []string, p *[]string) *stringSliceValue {
|
||||||
|
*p = val
|
||||||
|
return (*stringSliceValue)(p)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *stringSliceValue) Set(val string) error {
|
||||||
|
v := strings.Split(val, ",")
|
||||||
|
*s = append(*s, v...)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
func (s *stringSliceValue) Type() string {
|
||||||
|
return "stringSlice"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *stringSliceValue) String() string { return "[" + strings.Join(*s, ",") + "]" }
|
||||||
|
|
||||||
|
func stringSliceConv(sval string) (interface{}, error) {
|
||||||
|
sval = strings.Trim(sval, "[]")
|
||||||
|
// An empty string would cause a slice with one (empty) string
|
||||||
|
if len(sval) == 0 {
|
||||||
|
return []string{}, nil
|
||||||
|
}
|
||||||
|
v := strings.Split(sval, ",")
|
||||||
|
return v, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetStringSlice return the []string value of a flag with the given name
|
||||||
|
func (f *FlagSet) GetStringSlice(name string) ([]string, error) {
|
||||||
|
val, err := f.getFlagType(name, "stringSlice", stringSliceConv)
|
||||||
|
if err != nil {
|
||||||
|
return []string{}, err
|
||||||
|
}
|
||||||
|
return val.([]string), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// StringSliceVar defines a string flag with specified name, default value, and usage string.
|
||||||
|
// The argument p points to a []string variable in which to store the value of the flag.
|
||||||
|
func (f *FlagSet) StringSliceVar(p *[]string, name string, value []string, usage string) {
|
||||||
|
f.VarP(newStringSliceValue(value, p), name, "", usage)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Like StringSliceVar, but accepts a shorthand letter that can be used after a single dash.
|
||||||
|
func (f *FlagSet) StringSliceVarP(p *[]string, name, shorthand string, value []string, usage string) {
|
||||||
|
f.VarP(newStringSliceValue(value, p), name, shorthand, usage)
|
||||||
|
}
|
||||||
|
|
||||||
|
// StringSliceVar defines a string flag with specified name, default value, and usage string.
|
||||||
|
// The argument p points to a []string variable in which to store the value of the flag.
|
||||||
|
func StringSliceVar(p *[]string, name string, value []string, usage string) {
|
||||||
|
CommandLine.VarP(newStringSliceValue(value, p), name, "", usage)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Like StringSliceVar, but accepts a shorthand letter that can be used after a single dash.
|
||||||
|
func StringSliceVarP(p *[]string, name, shorthand string, value []string, usage string) {
|
||||||
|
CommandLine.VarP(newStringSliceValue(value, p), name, shorthand, usage)
|
||||||
|
}
|
||||||
|
|
||||||
|
// StringSlice defines a string flag with specified name, default value, and usage string.
|
||||||
|
// The return value is the address of a []string variable that stores the value of the flag.
|
||||||
|
func (f *FlagSet) StringSlice(name string, value []string, usage string) *[]string {
|
||||||
|
p := make([]string, 0)
|
||||||
|
f.StringSliceVarP(&p, name, "", value, usage)
|
||||||
|
return &p
|
||||||
|
}
|
||||||
|
|
||||||
|
// Like StringSlice, but accepts a shorthand letter that can be used after a single dash.
|
||||||
|
func (f *FlagSet) StringSliceP(name, shorthand string, value []string, usage string) *[]string {
|
||||||
|
p := make([]string, 0)
|
||||||
|
f.StringSliceVarP(&p, name, shorthand, value, usage)
|
||||||
|
return &p
|
||||||
|
}
|
||||||
|
|
||||||
|
// StringSlice defines a string flag with specified name, default value, and usage string.
|
||||||
|
// The return value is the address of a []string variable that stores the value of the flag.
|
||||||
|
func StringSlice(name string, value []string, usage string) *[]string {
|
||||||
|
return CommandLine.StringSliceP(name, "", value, usage)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Like StringSlice, but accepts a shorthand letter that can be used after a single dash.
|
||||||
|
func StringSliceP(name, shorthand string, value []string, usage string) *[]string {
|
||||||
|
return CommandLine.StringSliceP(name, shorthand, value, usage)
|
||||||
|
}
|
81
Godeps/_workspace/src/github.com/spf13/pflag/string_slice_test.go
generated
vendored
Normal file
81
Godeps/_workspace/src/github.com/spf13/pflag/string_slice_test.go
generated
vendored
Normal file
@ -0,0 +1,81 @@
|
|||||||
|
// Copyright 2009 The Go Authors. All rights reserved.
|
||||||
|
// Use of this source code is governed by a BSD-style
|
||||||
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
package pflag
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"strings"
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
func setUpSSFlagSet(ssp *[]string) *FlagSet {
|
||||||
|
f := NewFlagSet("test", ContinueOnError)
|
||||||
|
f.StringSliceVar(ssp, "ss", []string{}, "Command seperated list!")
|
||||||
|
return f
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestEmptySS(t *testing.T) {
|
||||||
|
var ss []string
|
||||||
|
f := setUpSSFlagSet(&ss)
|
||||||
|
err := f.Parse([]string{})
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal("expected no error; got", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
getSS, err := f.GetStringSlice("ss")
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal("got an error from GetStringSlice():", err)
|
||||||
|
}
|
||||||
|
if len(getSS) != 0 {
|
||||||
|
t.Fatalf("got ss %v with len=%d but expected length=0", getSS, len(getSS))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestSS(t *testing.T) {
|
||||||
|
var ss []string
|
||||||
|
f := setUpSSFlagSet(&ss)
|
||||||
|
|
||||||
|
vals := []string{"one", "two", "4", "3"}
|
||||||
|
arg := fmt.Sprintf("--ss=%s", strings.Join(vals, ","))
|
||||||
|
err := f.Parse([]string{arg})
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal("expected no error; got", err)
|
||||||
|
}
|
||||||
|
for i, v := range ss {
|
||||||
|
if vals[i] != v {
|
||||||
|
t.Fatalf("expected ss[%d] to be %s but got: %s", i, vals[i], v)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
getSS, err := f.GetStringSlice("ss")
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal("got an error from GetStringSlice():", err)
|
||||||
|
}
|
||||||
|
for i, v := range getSS {
|
||||||
|
if vals[i] != v {
|
||||||
|
t.Fatalf("expected ss[%d] to be %s from GetStringSlice but got: %s", i, vals[i], v)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestSSCalledTwice(t *testing.T) {
|
||||||
|
var ss []string
|
||||||
|
f := setUpSSFlagSet(&ss)
|
||||||
|
|
||||||
|
in := []string{"one,two", "three"}
|
||||||
|
expected := []string{"one", "two", "three"}
|
||||||
|
argfmt := "--ss=%s"
|
||||||
|
arg1 := fmt.Sprintf(argfmt, in[0])
|
||||||
|
arg2 := fmt.Sprintf(argfmt, in[1])
|
||||||
|
err := f.Parse([]string{arg1, arg2})
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal("expected no error; got", err)
|
||||||
|
}
|
||||||
|
for i, v := range ss {
|
||||||
|
if expected[i] != v {
|
||||||
|
t.Fatalf("expected ss[%d] to be %s but got: %s", i, expected[i], v)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
17
Godeps/_workspace/src/github.com/spf13/pflag/uint.go
generated
vendored
17
Godeps/_workspace/src/github.com/spf13/pflag/uint.go
generated
vendored
@ -25,6 +25,23 @@ func (i *uintValue) Type() string {
|
|||||||
|
|
||||||
func (i *uintValue) String() string { return fmt.Sprintf("%v", *i) }
|
func (i *uintValue) String() string { return fmt.Sprintf("%v", *i) }
|
||||||
|
|
||||||
|
func uintConv(sval string) (interface{}, error) {
|
||||||
|
v, err := strconv.ParseUint(sval, 0, 0)
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
return uint(v), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetUint return the uint value of a flag with the given name
|
||||||
|
func (f *FlagSet) GetUint(name string) (uint, error) {
|
||||||
|
val, err := f.getFlagType(name, "uint", uintConv)
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
return val.(uint), nil
|
||||||
|
}
|
||||||
|
|
||||||
// UintVar defines a uint flag with specified name, default value, and usage string.
|
// UintVar defines a uint flag with specified name, default value, and usage string.
|
||||||
// The argument p points to a uint variable in which to store the value of the flag.
|
// The argument p points to a uint variable in which to store the value of the flag.
|
||||||
func (f *FlagSet) UintVar(p *uint, name string, value uint, usage string) {
|
func (f *FlagSet) UintVar(p *uint, name string, value uint, usage string) {
|
||||||
|
21
Godeps/_workspace/src/github.com/spf13/pflag/uint16.go
generated
vendored
21
Godeps/_workspace/src/github.com/spf13/pflag/uint16.go
generated
vendored
@ -19,14 +19,27 @@ func (i *uint16Value) Set(s string) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (i *uint16Value) Get() interface{} {
|
|
||||||
return uint16(*i)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (i *uint16Value) Type() string {
|
func (i *uint16Value) Type() string {
|
||||||
return "uint16"
|
return "uint16"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func uint16Conv(sval string) (interface{}, error) {
|
||||||
|
v, err := strconv.ParseUint(sval, 0, 16)
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
return uint16(v), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetUint16 return the uint16 value of a flag with the given name
|
||||||
|
func (f *FlagSet) GetUint16(name string) (uint16, error) {
|
||||||
|
val, err := f.getFlagType(name, "uint16", uint16Conv)
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
return val.(uint16), nil
|
||||||
|
}
|
||||||
|
|
||||||
// Uint16Var defines a uint flag with specified name, default value, and usage string.
|
// Uint16Var defines a uint flag with specified name, default value, and usage string.
|
||||||
// The argument p points to a uint variable in which to store the value of the flag.
|
// The argument p points to a uint variable in which to store the value of the flag.
|
||||||
func (f *FlagSet) Uint16Var(p *uint16, name string, value uint16, usage string) {
|
func (f *FlagSet) Uint16Var(p *uint16, name string, value uint16, usage string) {
|
||||||
|
20
Godeps/_workspace/src/github.com/spf13/pflag/uint32.go
generated
vendored
20
Godeps/_workspace/src/github.com/spf13/pflag/uint32.go
generated
vendored
@ -18,14 +18,28 @@ func (i *uint32Value) Set(s string) error {
|
|||||||
*i = uint32Value(v)
|
*i = uint32Value(v)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
func (i *uint32Value) Get() interface{} {
|
|
||||||
return uint32(*i)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (i *uint32Value) Type() string {
|
func (i *uint32Value) Type() string {
|
||||||
return "uint32"
|
return "uint32"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func uint32Conv(sval string) (interface{}, error) {
|
||||||
|
v, err := strconv.ParseUint(sval, 0, 32)
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
return uint32(v), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetUint32 return the uint32 value of a flag with the given name
|
||||||
|
func (f *FlagSet) GetUint32(name string) (uint32, error) {
|
||||||
|
val, err := f.getFlagType(name, "uint32", uint32Conv)
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
return val.(uint32), nil
|
||||||
|
}
|
||||||
|
|
||||||
// Uint32Var defines a uint32 flag with specified name, default value, and usage string.
|
// Uint32Var defines a uint32 flag with specified name, default value, and usage string.
|
||||||
// The argument p points to a uint32 variable in which to store the value of the flag.
|
// The argument p points to a uint32 variable in which to store the value of the flag.
|
||||||
func (f *FlagSet) Uint32Var(p *uint32, name string, value uint32, usage string) {
|
func (f *FlagSet) Uint32Var(p *uint32, name string, value uint32, usage string) {
|
||||||
|
17
Godeps/_workspace/src/github.com/spf13/pflag/uint64.go
generated
vendored
17
Godeps/_workspace/src/github.com/spf13/pflag/uint64.go
generated
vendored
@ -25,6 +25,23 @@ func (i *uint64Value) Type() string {
|
|||||||
|
|
||||||
func (i *uint64Value) String() string { return fmt.Sprintf("%v", *i) }
|
func (i *uint64Value) String() string { return fmt.Sprintf("%v", *i) }
|
||||||
|
|
||||||
|
func uint64Conv(sval string) (interface{}, error) {
|
||||||
|
v, err := strconv.ParseUint(sval, 0, 64)
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
return uint64(v), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetUint64 return the uint64 value of a flag with the given name
|
||||||
|
func (f *FlagSet) GetUint64(name string) (uint64, error) {
|
||||||
|
val, err := f.getFlagType(name, "uint64", uint64Conv)
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
return val.(uint64), nil
|
||||||
|
}
|
||||||
|
|
||||||
// Uint64Var defines a uint64 flag with specified name, default value, and usage string.
|
// Uint64Var defines a uint64 flag with specified name, default value, and usage string.
|
||||||
// The argument p points to a uint64 variable in which to store the value of the flag.
|
// The argument p points to a uint64 variable in which to store the value of the flag.
|
||||||
func (f *FlagSet) Uint64Var(p *uint64, name string, value uint64, usage string) {
|
func (f *FlagSet) Uint64Var(p *uint64, name string, value uint64, usage string) {
|
||||||
|
17
Godeps/_workspace/src/github.com/spf13/pflag/uint8.go
generated
vendored
17
Godeps/_workspace/src/github.com/spf13/pflag/uint8.go
generated
vendored
@ -25,6 +25,23 @@ func (i *uint8Value) Type() string {
|
|||||||
|
|
||||||
func (i *uint8Value) String() string { return fmt.Sprintf("%v", *i) }
|
func (i *uint8Value) String() string { return fmt.Sprintf("%v", *i) }
|
||||||
|
|
||||||
|
func uint8Conv(sval string) (interface{}, error) {
|
||||||
|
v, err := strconv.ParseUint(sval, 0, 8)
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
return uint8(v), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetUint8 return the uint8 value of a flag with the given name
|
||||||
|
func (f *FlagSet) GetUint8(name string) (uint8, error) {
|
||||||
|
val, err := f.getFlagType(name, "uint8", uint8Conv)
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
return val.(uint8), nil
|
||||||
|
}
|
||||||
|
|
||||||
// Uint8Var defines a uint8 flag with specified name, default value, and usage string.
|
// Uint8Var defines a uint8 flag with specified name, default value, and usage string.
|
||||||
// The argument p points to a uint8 variable in which to store the value of the flag.
|
// The argument p points to a uint8 variable in which to store the value of the flag.
|
||||||
func (f *FlagSet) Uint8Var(p *uint8, name string, value uint8, usage string) {
|
func (f *FlagSet) Uint8Var(p *uint8, name string, value uint8, usage string) {
|
||||||
|
Loading…
Reference in New Issue
Block a user