@@ -743,14 +743,23 @@ func (c *Context) PrintUsage(summary bool) error {
|
||||
}
|
||||
|
||||
func checkMissingFlags(flags []*Flag) error {
|
||||
xorGroupSet := map[string]bool{}
|
||||
xorGroup := map[string][]string{}
|
||||
missing := []string{}
|
||||
for _, flag := range flags {
|
||||
if flag.Set {
|
||||
for _, xor := range flag.Xor {
|
||||
xorGroupSet[xor] = true
|
||||
}
|
||||
}
|
||||
if !flag.Required || flag.Set {
|
||||
continue
|
||||
}
|
||||
if len(flag.Xor) > 0 {
|
||||
for _, xor := range flag.Xor {
|
||||
if xorGroupSet[xor] {
|
||||
continue
|
||||
}
|
||||
xorGroup[xor] = append(xorGroup[xor], flag.Summary())
|
||||
}
|
||||
} else {
|
||||
|
||||
@@ -904,6 +904,21 @@ func TestXorRequired(t *testing.T) {
|
||||
require.EqualError(t, err, "missing flags: --four, --one or --three, --one or --two")
|
||||
}
|
||||
|
||||
func TestXorRequiredMany(t *testing.T) {
|
||||
var cli struct {
|
||||
One bool `xor:"one" required:""`
|
||||
Two bool `xor:"one" required:""`
|
||||
Three bool `xor:"one" required:""`
|
||||
}
|
||||
p := mustNew(t, &cli)
|
||||
_, err := p.Parse([]string{"--one"})
|
||||
require.NoError(t, err)
|
||||
|
||||
p = mustNew(t, &cli)
|
||||
_, err = p.Parse([]string{})
|
||||
require.EqualError(t, err, "missing flags: --one or --two or --three")
|
||||
}
|
||||
|
||||
func TestEnumSequence(t *testing.T) {
|
||||
var cli struct {
|
||||
State []string `enum:"a,b,c" default:"a"`
|
||||
|
||||
Reference in New Issue
Block a user