diff options
author | Russ Cox <rsc@golang.org> | 2011-08-31 17:38:41 -0400 |
---|---|---|
committer | Russ Cox <rsc@golang.org> | 2011-08-31 17:38:41 -0400 |
commit | 5dd36d88cd32ddab161f68c84d7c4365c602b79d (patch) | |
tree | a434505a40cfd9b6825f6fa6eacae1e5d759aa47 | |
parent | e61c180600ef567d088b325735193945754a9212 (diff) | |
download | go-5dd36d88cd32ddab161f68c84d7c4365c602b79d.tar.gz |
flag: add Parsed, restore Usage
R=r
CC=golang-dev
http://codereview.appspot.com/4973050
-rw-r--r-- | src/pkg/flag/flag.go | 19 | ||||
-rw-r--r-- | src/pkg/flag/flag_test.go | 6 |
2 files changed, 24 insertions, 1 deletions
diff --git a/src/pkg/flag/flag.go b/src/pkg/flag/flag.go index 01bbc3770..38b65d1a1 100644 --- a/src/pkg/flag/flag.go +++ b/src/pkg/flag/flag.go @@ -204,6 +204,7 @@ type FlagSet struct { Usage func() name string + parsed bool actual map[string]*Flag formal map[string]*Flag args []string // arguments after flags @@ -318,10 +319,15 @@ func defaultUsage(f *FlagSet) { f.PrintDefaults() } +// NOTE: Usage is not just defaultUsage(commandLine) +// because it serves (via godoc flag Usage) as the example +// for how to write your own usage function. + // Usage prints to standard error a usage message documenting all defined command-line flags. // The function is a variable that may be changed to point to a custom function. var Usage = func() { - defaultUsage(commandLine) + fmt.Fprintf(os.Stderr, "Usage of %s:\n", os.Args[0]) + PrintDefaults() } // NFlag returns the number of flags that have been set. @@ -660,6 +666,7 @@ func (f *FlagSet) parseOne() (bool, os.Error) { // are defined and before flags are accessed by the program. // The return value will be ErrHelp if -help was set but not defined. func (f *FlagSet) Parse(arguments []string) os.Error { + f.parsed = true f.args = arguments for { seen, err := f.parseOne() @@ -681,6 +688,11 @@ func (f *FlagSet) Parse(arguments []string) os.Error { return nil } +// Parsed reports whether f.Parse has been called. +func (f *FlagSet) Parsed() bool { + return f.parsed +} + // Parse parses the command-line flags from os.Args[1:]. Must be called // after all flags are defined and before flags are accessed by the program. func Parse() { @@ -688,6 +700,11 @@ func Parse() { commandLine.Parse(os.Args[1:]) } +// Parsed returns true if the command-line flags have been parsed. +func Parsed() bool { + return commandLine.Parsed() +} + // The default set of command-line flags, parsed from os.Args. var commandLine = NewFlagSet(os.Args[0], ExitOnError) diff --git a/src/pkg/flag/flag_test.go b/src/pkg/flag/flag_test.go index 63d0a9fc8..19c0deaf5 100644 --- a/src/pkg/flag/flag_test.go +++ b/src/pkg/flag/flag_test.go @@ -98,6 +98,9 @@ func TestUsage(t *testing.T) { } func testParse(f *FlagSet, t *testing.T) { + if f.Parsed() { + t.Error("f.Parse() = true before Parse") + } boolFlag := f.Bool("bool", false, "bool value") bool2Flag := f.Bool("bool2", false, "bool2 value") intFlag := f.Int("int", 0, "int value") @@ -121,6 +124,9 @@ func testParse(f *FlagSet, t *testing.T) { if err := f.Parse(args); err != nil { t.Fatal(err) } + if !f.Parsed() { + t.Error("f.Parse() = false after Parse") + } if *boolFlag != true { t.Error("bool flag should be true, is ", *boolFlag) } |