mirror of
https://github.com/spf13/cobra
synced 2024-11-24 14:47:12 +00:00
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
2 changed files with 35 additions and 0 deletions
|
@ -979,6 +979,10 @@ func (c *Command) ValidateArgs(args []string) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Command) validateRequiredFlags() error {
|
func (c *Command) validateRequiredFlags() error {
|
||||||
|
if c.DisableFlagParsing {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
flags := c.Flags()
|
flags := c.Flags()
|
||||||
missingFlagNames := []string{}
|
missingFlagNames := []string{}
|
||||||
flags.VisitAll(func(pflag *flag.Flag) {
|
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) {
|
func TestInitHelpFlagMergesFlags(t *testing.T) {
|
||||||
usage := "custom flag"
|
usage := "custom flag"
|
||||||
rootCmd := &Command{Use: "root"}
|
rootCmd := &Command{Use: "root"}
|
||||||
|
|
Loading…
Reference in a new issue