]> Cypherpunks repositories - gostls13.git/commitdiff
flag: add Parsed, restore Usage
authorRuss Cox <rsc@golang.org>
Wed, 31 Aug 2011 21:38:41 +0000 (17:38 -0400)
committerRuss Cox <rsc@golang.org>
Wed, 31 Aug 2011 21:38:41 +0000 (17:38 -0400)
R=r
CC=golang-dev
https://golang.org/cl/4973050

src/pkg/flag/flag.go
src/pkg/flag/flag_test.go

index 01bbc3770080834ed444c3f6df470c1ce75d9728..38b65d1a1eb0fa1ec0087f17b9007c01e05828d8 100644 (file)
@@ -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)
 
index 63d0a9fc8946915af20225268930361f0f3ae928..19c0deaf5c98a824acc3308a85ab18c90b43a3cb 100644 (file)
@@ -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)
        }