diff --git a/flag_bool.go b/flag_bool.go index 369d18b77f..01862ea764 100644 --- a/flag_bool.go +++ b/flag_bool.go @@ -84,7 +84,10 @@ func (f *BoolFlag) GetDefaultText() string { if f.DefaultText != "" { return f.DefaultText } - return fmt.Sprintf("%v", f.defaultValue) + if f.defaultValueSet { + return fmt.Sprintf("%v", f.defaultValue) + } + return fmt.Sprintf("%v", f.Value) } // GetEnvVars returns the env vars for this flag @@ -105,6 +108,7 @@ func (f *BoolFlag) RunAction(c *Context) error { func (f *BoolFlag) Apply(set *flag.FlagSet) error { // set default value so that environment wont be able to overwrite it f.defaultValue = f.Value + f.defaultValueSet = true if val, source, found := flagFromEnvOrFile(f.EnvVars, f.FilePath); found { if val != "" { diff --git a/flag_float64.go b/flag_float64.go index bce26c1958..6a4de5c88b 100644 --- a/flag_float64.go +++ b/flag_float64.go @@ -32,7 +32,10 @@ func (f *Float64Flag) GetDefaultText() string { if f.DefaultText != "" { return f.DefaultText } - return f.GetValue() + if f.defaultValueSet { + return fmt.Sprintf("%v", f.defaultValue) + } + return fmt.Sprintf("%v", f.Value) } // GetEnvVars returns the env vars for this flag @@ -42,6 +45,9 @@ func (f *Float64Flag) GetEnvVars() []string { // Apply populates the flag given the flag set and environment func (f *Float64Flag) Apply(set *flag.FlagSet) error { + f.defaultValue = f.Value + f.defaultValueSet = true + if val, source, found := flagFromEnvOrFile(f.EnvVars, f.FilePath); found { if val != "" { valFloat, err := strconv.ParseFloat(val, 64) diff --git a/flag_generic.go b/flag_generic.go index 039ffdfeee..7528c934cd 100644 --- a/flag_generic.go +++ b/flag_generic.go @@ -53,9 +53,15 @@ func (f *GenericFlag) GetDefaultText() string { if f.DefaultText != "" { return f.DefaultText } - if f.defaultValue != nil { - return f.defaultValue.String() + val := f.Value + if f.defaultValueSet { + val = f.defaultValue } + + if val != nil { + return val.String() + } + return "" } @@ -70,6 +76,7 @@ func (f *GenericFlag) Apply(set *flag.FlagSet) error { // set default value so that environment wont be able to overwrite it if f.Value != nil { f.defaultValue = &stringGeneric{value: f.Value.String()} + f.defaultValueSet = true } if val, source, found := flagFromEnvOrFile(f.EnvVars, f.FilePath); found { diff --git a/flag_path.go b/flag_path.go index e40c3d8d99..76cb35248c 100644 --- a/flag_path.go +++ b/flag_path.go @@ -33,16 +33,14 @@ func (f *PathFlag) GetDefaultText() string { if f.DefaultText != "" { return f.DefaultText } + val := f.Value if f.defaultValueSet { - if f.defaultValue == "" { - return f.defaultValue - } - return fmt.Sprintf("%q", f.defaultValue) + val = f.defaultValue } - if f.Value == "" { - return f.Value + if val == "" { + return val } - return fmt.Sprintf("%q", f.Value) + return fmt.Sprintf("%q", val) } // GetEnvVars returns the env vars for this flag diff --git a/flag_string.go b/flag_string.go index 82d0787a2f..0f73e06215 100644 --- a/flag_string.go +++ b/flag_string.go @@ -31,16 +31,15 @@ func (f *StringFlag) GetDefaultText() string { if f.DefaultText != "" { return f.DefaultText } + val := f.Value if f.defaultValueSet { - if f.defaultValue == "" { - return f.defaultValue - } - return fmt.Sprintf("%q", f.defaultValue) + val = f.defaultValue } - if f.Value == "" { - return f.Value + + if val == "" { + return val } - return fmt.Sprintf("%q", f.Value) + return fmt.Sprintf("%q", val) } // GetEnvVars returns the env vars for this flag diff --git a/flag_timestamp.go b/flag_timestamp.go index 69b5c57184..b90123087c 100644 --- a/flag_timestamp.go +++ b/flag_timestamp.go @@ -120,14 +120,13 @@ func (f *TimestampFlag) GetDefaultText() string { if f.DefaultText != "" { return f.DefaultText } + val := f.Value if f.defaultValueSet { - if f.defaultValue != nil && f.defaultValue.timestamp != nil { - return f.defaultValue.timestamp.String() - } - } else { - if f.Value != nil && f.Value.timestamp != nil { - return f.Value.timestamp.String() - } + val = f.defaultValue + } + + if val != nil && val.timestamp != nil { + return val.timestamp.String() } return ""