Update vendor directory
This commit is contained in:
136
vendor/github.com/jessevdk/go-flags/option.go
generated
vendored
136
vendor/github.com/jessevdk/go-flags/option.go
generated
vendored
@@ -80,10 +80,11 @@ type Option struct {
|
||||
// Determines if the option will be always quoted in the INI output
|
||||
iniQuote bool
|
||||
|
||||
tag multiTag
|
||||
isSet bool
|
||||
isSetDefault bool
|
||||
preventDefault bool
|
||||
tag multiTag
|
||||
isSet bool
|
||||
isSetDefault bool
|
||||
preventDefault bool
|
||||
clearReferenceBeforeSet bool
|
||||
|
||||
defaultLiteral string
|
||||
}
|
||||
@@ -139,6 +140,57 @@ func (option *Option) LongNameWithNamespace() string {
|
||||
return longName
|
||||
}
|
||||
|
||||
// EnvKeyWithNamespace returns the option's env key with the group namespaces
|
||||
// prepended by walking up the option's group tree. Namespaces and the env key
|
||||
// itself are separated by the parser's namespace delimiter. If the env key is
|
||||
// empty an empty string is returned.
|
||||
func (option *Option) EnvKeyWithNamespace() string {
|
||||
if len(option.EnvDefaultKey) == 0 {
|
||||
return ""
|
||||
}
|
||||
|
||||
// fetch the namespace delimiter from the parser which is always at the
|
||||
// end of the group hierarchy
|
||||
namespaceDelimiter := ""
|
||||
g := option.group
|
||||
|
||||
for {
|
||||
if p, ok := g.parent.(*Parser); ok {
|
||||
namespaceDelimiter = p.EnvNamespaceDelimiter
|
||||
|
||||
break
|
||||
}
|
||||
|
||||
switch i := g.parent.(type) {
|
||||
case *Command:
|
||||
g = i.Group
|
||||
case *Group:
|
||||
g = i
|
||||
}
|
||||
}
|
||||
|
||||
// concatenate long name with namespace
|
||||
key := option.EnvDefaultKey
|
||||
g = option.group
|
||||
|
||||
for g != nil {
|
||||
if g.EnvNamespace != "" {
|
||||
key = g.EnvNamespace + namespaceDelimiter + key
|
||||
}
|
||||
|
||||
switch i := g.parent.(type) {
|
||||
case *Command:
|
||||
g = i.Group
|
||||
case *Group:
|
||||
g = i
|
||||
case *Parser:
|
||||
g = nil
|
||||
}
|
||||
}
|
||||
|
||||
return key
|
||||
}
|
||||
|
||||
// String converts an option to a human friendly readable string describing the
|
||||
// option.
|
||||
func (option *Option) String() string {
|
||||
@@ -190,12 +242,13 @@ func (option *Option) IsSetDefault() bool {
|
||||
func (option *Option) set(value *string) error {
|
||||
kind := option.value.Type().Kind()
|
||||
|
||||
if (kind == reflect.Map || kind == reflect.Slice) && !option.isSet {
|
||||
if (kind == reflect.Map || kind == reflect.Slice) && option.clearReferenceBeforeSet {
|
||||
option.empty()
|
||||
}
|
||||
|
||||
option.isSet = true
|
||||
option.preventDefault = true
|
||||
option.clearReferenceBeforeSet = false
|
||||
|
||||
if len(option.Choices) != 0 {
|
||||
found := false
|
||||
@@ -229,8 +282,23 @@ func (option *Option) set(value *string) error {
|
||||
return convert("", option.value, option.tag)
|
||||
}
|
||||
|
||||
func (option *Option) canCli() bool {
|
||||
return option.ShortName != 0 || len(option.LongName) != 0
|
||||
func (option *Option) setDefault(value *string) error {
|
||||
if option.preventDefault {
|
||||
return nil
|
||||
}
|
||||
|
||||
if err := option.set(value); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
option.isSetDefault = true
|
||||
option.preventDefault = false
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (option *Option) showInHelp() bool {
|
||||
return !option.Hidden && (option.ShortName != 0 || len(option.LongName) != 0)
|
||||
}
|
||||
|
||||
func (option *Option) canArgument() bool {
|
||||
@@ -257,14 +325,17 @@ func (option *Option) empty() {
|
||||
}
|
||||
}
|
||||
|
||||
func (option *Option) clearDefault() {
|
||||
func (option *Option) clearDefault() error {
|
||||
if option.preventDefault {
|
||||
return nil
|
||||
}
|
||||
|
||||
usedDefault := option.Default
|
||||
|
||||
if envKey := option.EnvDefaultKey; envKey != "" {
|
||||
if envKey := option.EnvKeyWithNamespace(); envKey != "" {
|
||||
if value, ok := os.LookupEnv(envKey); ok {
|
||||
if option.EnvDefaultDelim != "" {
|
||||
usedDefault = strings.Split(value,
|
||||
option.EnvDefaultDelim)
|
||||
usedDefault = strings.Split(value, option.EnvDefaultDelim)
|
||||
} else {
|
||||
usedDefault = []string{value}
|
||||
}
|
||||
@@ -277,8 +348,11 @@ func (option *Option) clearDefault() {
|
||||
option.empty()
|
||||
|
||||
for _, d := range usedDefault {
|
||||
option.set(&d)
|
||||
option.isSetDefault = true
|
||||
err := option.setDefault(&d)
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
} else {
|
||||
tp := option.value.Type()
|
||||
@@ -294,6 +368,8 @@ func (option *Option) clearDefault() {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (option *Option) valueIsDefault() bool {
|
||||
@@ -339,6 +415,30 @@ func (option *Option) isUnmarshaler() Unmarshaler {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (option *Option) isValueValidator() ValueValidator {
|
||||
v := option.value
|
||||
|
||||
for {
|
||||
if !v.CanInterface() {
|
||||
break
|
||||
}
|
||||
|
||||
i := v.Interface()
|
||||
|
||||
if u, ok := i.(ValueValidator); ok {
|
||||
return u
|
||||
}
|
||||
|
||||
if !v.CanAddr() {
|
||||
break
|
||||
}
|
||||
|
||||
v = v.Addr()
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (option *Option) isBool() bool {
|
||||
tp := option.value.Type()
|
||||
|
||||
@@ -457,3 +557,13 @@ func (option *Option) shortAndLongName() string {
|
||||
|
||||
return ret.String()
|
||||
}
|
||||
|
||||
func (option *Option) isValidValue(arg string) error {
|
||||
if validator := option.isValueValidator(); validator != nil {
|
||||
return validator.IsValidValue(arg)
|
||||
}
|
||||
if argumentIsOption(arg) && !(option.isSignedNumber() && len(arg) > 1 && arg[0] == '-' && arg[1] >= '0' && arg[1] <= '9') {
|
||||
return fmt.Errorf("expected argument for flag `%s', but got option `%s'", option, arg)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user