Allow bool flags to be set to true or false explicitly.

This commit is contained in:
Alec Thomas
2018-09-11 23:57:18 +10:00
parent 862837e6fa
commit 844494faff
2 changed files with 17 additions and 1 deletions
+11
View File
@@ -566,3 +566,14 @@ func TestErrorMissingArgs(t *testing.T) {
require.Error(t, err)
require.Equal(t, "expected \"<one> <two>\"", err.Error())
}
func TestBoolOverride(t *testing.T) {
var cli struct {
Flag bool `default:"true"`
}
p := mustNew(t, &cli)
_, err := p.Parse([]string{"--flag=false"})
require.NoError(t, err)
_, err = p.Parse([]string{"--flag", "false"})
require.Error(t, err)
}
+6 -1
View File
@@ -211,7 +211,12 @@ func (r *Registry) RegisterDefaults() *Registry {
type boolMapper struct{}
func (boolMapper) Decode(ctx *DecodeContext, target reflect.Value) error {
target.SetBool(true)
if ctx.Scan.Peek().Type == FlagValueToken {
token := ctx.Scan.Pop()
target.SetBool(token.Value == "true")
} else {
target.SetBool(true)
}
return nil
}
func (boolMapper) IsBool() bool { return true }