diff options
| author | Eric Paris <[email protected]> | 2015-08-16 22:42:52 -0700 |
|---|---|---|
| committer | Eric Paris <[email protected]> | 2015-08-16 22:42:52 -0700 |
| commit | 11251d78bb57ed618b8d4a1ee039affca6d64fb9 (patch) | |
| tree | 6b7b45fb16d399e64949d036e5bfdc6be79586f6 | |
| parent | 4b69d21313e8b16259f8fdac37156283b254c84b (diff) | |
| parent | e0e7ef766bf91748c5c55258e3773edaea7ed5f4 (diff) | |
Merge pull request #48 from eparis/addFlagSet
New AddFlagSet function on FlagSet
| -rw-r--r-- | flag.go | 13 | ||||
| -rw-r--r-- | flag_test.go | 17 |
2 files changed, 30 insertions, 0 deletions
@@ -524,6 +524,19 @@ func (f *FlagSet) AddFlag(flag *Flag) { f.shorthands[c] = flag } +// AddFlagSet adds one FlagSet to another. If a flag is already present in f +// the flag from newSet will be ignored +func (f *FlagSet) AddFlagSet(newSet *FlagSet) { + if newSet == nil { + return + } + newSet.VisitAll(func(flag *Flag) { + if f.Lookup(flag.Name) == nil { + f.AddFlag(flag) + } + }) +} + // Var defines a flag with the specified name and usage string. The type and // value of the flag are represented by the first argument, of type Value, which // typically holds a user-defined implementation of Value. For instance, the diff --git a/flag_test.go b/flag_test.go index 9ff1934..5114f28 100644 --- a/flag_test.go +++ b/flag_test.go @@ -110,6 +110,23 @@ func TestUsage(t *testing.T) { } } +func TestAddFlagSet(t *testing.T) { + oldSet := NewFlagSet("old", ContinueOnError) + newSet := NewFlagSet("new", ContinueOnError) + + oldSet.String("flag1", "flag1", "flag1") + oldSet.String("flag2", "flag2", "flag2") + + newSet.String("flag2", "flag2", "flag2") + newSet.String("flag3", "flag3", "flag3") + + oldSet.AddFlagSet(newSet) + + if len(oldSet.formal) != 3 { + t.Errorf("Unexpected result adding a FlagSet to a FlagSet %v", oldSet) + } +} + func TestAnnotation(t *testing.T) { f := NewFlagSet("shorthand", ContinueOnError) |
