Ignore required flags when DisableFlagParsing (#1095)
When a command request to DisableFlagParsing, it should not fail due to a missing required flag. In fact, such a check will always fail since flags weren't parsed! Signed-off-by: Marc Khouzam <marc.khouzam@montreal.ca>
This commit is contained in:
parent
aa5badda62
commit
5155946348
@ -979,6 +979,10 @@ func (c *Command) ValidateArgs(args []string) error {
|
||||
}
|
||||
|
||||
func (c *Command) validateRequiredFlags() error {
|
||||
if c.DisableFlagParsing {
|
||||
return nil
|
||||
}
|
||||
|
||||
flags := c.Flags()
|
||||
missingFlagNames := []string{}
|
||||
flags.VisitAll(func(pflag *flag.Flag) {
|
||||
|
@ -785,6 +785,37 @@ func TestPersistentRequiredFlags(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestPersistentRequiredFlagsWithDisableFlagParsing(t *testing.T) {
|
||||
// Make sure a required persistent flag does not break
|
||||
// commands that disable flag parsing
|
||||
|
||||
parent := &Command{Use: "parent", Run: emptyRun}
|
||||
parent.PersistentFlags().Bool("foo", false, "")
|
||||
flag := parent.PersistentFlags().Lookup("foo")
|
||||
parent.MarkPersistentFlagRequired("foo")
|
||||
|
||||
child := &Command{Use: "child", Run: emptyRun}
|
||||
child.DisableFlagParsing = true
|
||||
|
||||
parent.AddCommand(child)
|
||||
|
||||
if _, err := executeCommand(parent, "--foo", "child"); err != nil {
|
||||
t.Errorf("Unexpected error: %v", err)
|
||||
}
|
||||
|
||||
// Reset the flag or else it will remember the state from the previous command
|
||||
flag.Changed = false
|
||||
if _, err := executeCommand(parent, "child", "--foo"); err != nil {
|
||||
t.Errorf("Unexpected error: %v", err)
|
||||
}
|
||||
|
||||
// Reset the flag or else it will remember the state from the previous command
|
||||
flag.Changed = false
|
||||
if _, err := executeCommand(parent, "child"); err != nil {
|
||||
t.Errorf("Unexpected error: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestInitHelpFlagMergesFlags(t *testing.T) {
|
||||
usage := "custom flag"
|
||||
rootCmd := &Command{Use: "root"}
|
||||
|
Loading…
Reference in New Issue
Block a user