fix: Context.Set no such flag

This commit is contained in:
torwang 2022-09-20 16:15:59 +08:00 committed by Dan Buch
parent e9e87f624d
commit a2c3729797
Signed by: meatballhat
GPG Key ID: A12F782281063434
2 changed files with 21 additions and 3 deletions

View File

@ -3,6 +3,7 @@ package cli
import ( import (
"context" "context"
"flag" "flag"
"fmt"
"strings" "strings"
) )
@ -46,10 +47,11 @@ func (cCtx *Context) NumFlags() int {
// Set sets a context flag to a value. // Set sets a context flag to a value.
func (cCtx *Context) Set(name, value string) error { func (cCtx *Context) Set(name, value string) error {
if cCtx.flagSet.Lookup(name) == nil { if fs := cCtx.lookupFlagSet(name); fs != nil {
cCtx.onInvalidFlag(name) return fs.Set(name, value)
} }
return cCtx.flagSet.Set(name, value)
return fmt.Errorf("no such flag -%s", name)
} }
// IsSet determines if the flag was actually set // IsSet determines if the flag was actually set

View File

@ -643,3 +643,19 @@ func TestCheckRequiredFlags(t *testing.T) {
}) })
} }
} }
func TestContext_ParentContext_Set(t *testing.T) {
parentSet := flag.NewFlagSet("parent", flag.ContinueOnError)
parentSet.String("Name", "", "")
context := NewContext(
nil,
flag.NewFlagSet("child", flag.ContinueOnError),
NewContext(nil, parentSet, nil),
)
err := context.Set("Name", "aaa")
if err != nil {
t.Errorf("expect nil. set parent context flag return err: %s", err)
}
}