diff --git a/app.go b/app.go index 3fb5c169ad..effe205442 100644 --- a/app.go +++ b/app.go @@ -113,6 +113,9 @@ type App struct { UseShortOptionHandling bool // Enable suggestions for commands and flags Suggest bool + // Allows global flags set by libraries which use flag.XXXVar(...) directly + // to be parsed through this library + AllowExtFlags bool didSetup bool @@ -199,13 +202,15 @@ func (a *App) Setup() { a.ErrWriter = os.Stderr } - // add global flags added by other packages - flag.VisitAll(func(f *flag.Flag) { - // skip test flags - if !strings.HasPrefix(f.Name, ignoreFlagPrefix) { - a.Flags = append(a.Flags, &extFlag{f}) - } - }) + if a.AllowExtFlags { + // add global flags added by other packages + flag.VisitAll(func(f *flag.Flag) { + // skip test flags + if !strings.HasPrefix(f.Name, ignoreFlagPrefix) { + a.Flags = append(a.Flags, &extFlag{f}) + } + }) + } var newCommands []*Command diff --git a/app_test.go b/app_test.go index d24fb63503..e2b31e910d 100644 --- a/app_test.go +++ b/app_test.go @@ -654,6 +654,7 @@ func TestApp_FlagsFromExtPackage(t *testing.T) { }() a := &App{ + AllowExtFlags: true, Flags: []Flag{ &StringFlag{ Name: "carly", @@ -677,6 +678,28 @@ func TestApp_FlagsFromExtPackage(t *testing.T) { if someint != 10 { t.Errorf("Expected 10 got %d for someint", someint) } + + a = &App{ + Flags: []Flag{ + &StringFlag{ + Name: "carly", + Aliases: []string{"c"}, + Required: false, + }, + &BoolFlag{ + Name: "jimbob", + Aliases: []string{"j"}, + Required: false, + Value: true, + }, + }, + } + + // this should return an error since epflag shouldnt be registered + err = a.Run([]string{"foo", "-c", "cly", "--epflag", "10"}) + if err == nil { + t.Error("Expected error") + } } func TestApp_Setup_defaultsReader(t *testing.T) { diff --git a/godoc-current.txt b/godoc-current.txt index fadb7f8629..5b67f953c7 100644 --- a/godoc-current.txt +++ b/godoc-current.txt @@ -324,6 +324,9 @@ type App struct { UseShortOptionHandling bool // Enable suggestions for commands and flags Suggest bool + // Allows global flags set by libraries which use flag.XXXVar(...) directly + // to be parsed through this library + AllowExtFlags bool // Has unexported fields. } diff --git a/testdata/godoc-v2.x.txt b/testdata/godoc-v2.x.txt index fadb7f8629..5b67f953c7 100644 --- a/testdata/godoc-v2.x.txt +++ b/testdata/godoc-v2.x.txt @@ -324,6 +324,9 @@ type App struct { UseShortOptionHandling bool // Enable suggestions for commands and flags Suggest bool + // Allows global flags set by libraries which use flag.XXXVar(...) directly + // to be parsed through this library + AllowExtFlags bool // Has unexported fields. }