Browse code

bump(github.com/spf13/pflag): 5ccb023bc27df288a957c5e994cd44fd19619465

Martin Milata authored on 2016/10/25 01:23:13
Showing 19 changed files
... ...
@@ -2588,7 +2588,7 @@
2588 2588
 		},
2589 2589
 		{
2590 2590
 			"ImportPath": "github.com/spf13/pflag",
2591
-			"Rev": "1560c1005499d61b80f865c04d39ca7505bf7f0b"
2591
+			"Rev": "5ccb023bc27df288a957c5e994cd44fd19619465"
2592 2592
 		},
2593 2593
 		{
2594 2594
 			"ImportPath": "github.com/stevvooe/resumable",
... ...
@@ -3,10 +3,13 @@ sudo: false
3 3
 language: go
4 4
 
5 5
 go:
6
-        - 1.5.4
7 6
         - 1.6.3
7
+        - 1.7.3
8 8
         - tip
9 9
 
10
+matrix:
11
+        allow_failures:
12
+                  - go: tip
10 13
 install:
11 14
         - go get github.com/golang/lint/golint
12 15
         - export PATH=$GOPATH/bin:$PATH
... ...
@@ -1,9 +1,6 @@
1 1
 package pflag
2 2
 
3
-import (
4
-	"fmt"
5
-	"strconv"
6
-)
3
+import "strconv"
7 4
 
8 5
 // optional interface to indicate boolean flags that can be
9 6
 // supplied without "=value" text
... ...
@@ -30,7 +27,7 @@ func (b *boolValue) Type() string {
30 30
 	return "bool"
31 31
 }
32 32
 
33
-func (b *boolValue) String() string { return fmt.Sprintf("%v", *b) }
33
+func (b *boolValue) String() string { return strconv.FormatBool(bool(*b)) }
34 34
 
35 35
 func (b *boolValue) IsBoolFlag() bool { return true }
36 36
 
... ...
@@ -1,9 +1,6 @@
1 1
 package pflag
2 2
 
3
-import (
4
-	"fmt"
5
-	"strconv"
6
-)
3
+import "strconv"
7 4
 
8 5
 // -- count Value
9 6
 type countValue int
... ...
@@ -28,7 +25,7 @@ func (i *countValue) Type() string {
28 28
 	return "count"
29 29
 }
30 30
 
31
-func (i *countValue) String() string { return fmt.Sprintf("%v", *i) }
31
+func (i *countValue) String() string { return strconv.Itoa(int(*i)) }
32 32
 
33 33
 func countConv(sval string) (interface{}, error) {
34 34
 	i, err := strconv.Atoi(sval)
... ...
@@ -416,23 +416,39 @@ func Set(name, value string) error {
416 416
 // otherwise, the default values of all defined flags in the set.
417 417
 func (f *FlagSet) PrintDefaults() {
418 418
 	usages := f.FlagUsages()
419
-	fmt.Fprintf(f.out(), "%s", usages)
420
-}
421
-
422
-// isZeroValue guesses whether the string represents the zero
423
-// value for a flag. It is not accurate but in practice works OK.
424
-func isZeroValue(value string) bool {
425
-	switch value {
426
-	case "false":
427
-		return true
428
-	case "<nil>":
429
-		return true
430
-	case "":
431
-		return true
432
-	case "0":
433
-		return true
419
+	fmt.Fprint(f.out(), usages)
420
+}
421
+
422
+// defaultIsZeroValue returns true if the default value for this flag represents
423
+// a zero value.
424
+func (f *Flag) defaultIsZeroValue() bool {
425
+	switch f.Value.(type) {
426
+	case boolFlag:
427
+		return f.DefValue == "false"
428
+	case *durationValue:
429
+		// Beginning in Go 1.7, duration zero values are "0s"
430
+		return f.DefValue == "0" || f.DefValue == "0s"
431
+	case *intValue, *int8Value, *int32Value, *int64Value, *uintValue, *uint8Value, *uint16Value, *uint32Value, *uint64Value, *countValue, *float32Value, *float64Value:
432
+		return f.DefValue == "0"
433
+	case *stringValue:
434
+		return f.DefValue == ""
435
+	case *ipValue, *ipMaskValue, *ipNetValue:
436
+		return f.DefValue == "<nil>"
437
+	case *intSliceValue, *stringSliceValue, *stringArrayValue:
438
+		return f.DefValue == "[]"
439
+	default:
440
+		switch f.Value.String() {
441
+		case "false":
442
+			return true
443
+		case "<nil>":
444
+			return true
445
+		case "":
446
+			return true
447
+		case "0":
448
+			return true
449
+		}
450
+		return false
434 451
 	}
435
-	return false
436 452
 }
437 453
 
438 454
 // UnquoteUsage extracts a back-quoted name from the usage
... ...
@@ -455,22 +471,19 @@ func UnquoteUsage(flag *Flag) (name string, usage string) {
455 455
 			break // Only one back quote; use type name.
456 456
 		}
457 457
 	}
458
-	// No explicit name, so use type if we can find one.
459
-	name = "value"
460
-	switch flag.Value.(type) {
461
-	case boolFlag:
458
+
459
+	name = flag.Value.Type()
460
+	switch name {
461
+	case "bool":
462 462
 		name = ""
463
-	case *durationValue:
464
-		name = "duration"
465
-	case *float64Value:
463
+	case "float64":
466 464
 		name = "float"
467
-	case *intValue, *int64Value:
465
+	case "int64":
468 466
 		name = "int"
469
-	case *stringValue:
470
-		name = "string"
471
-	case *uintValue, *uint64Value:
467
+	case "uint64":
472 468
 		name = "uint"
473 469
 	}
470
+
474 471
 	return
475 472
 }
476 473
 
... ...
@@ -501,7 +514,7 @@ func (f *FlagSet) FlagUsages() string {
501 501
 		if len(flag.NoOptDefVal) > 0 {
502 502
 			switch flag.Value.Type() {
503 503
 			case "string":
504
-				line += fmt.Sprintf("[=%q]", flag.NoOptDefVal)
504
+				line += fmt.Sprintf("[=\"%s\"]", flag.NoOptDefVal)
505 505
 			case "bool":
506 506
 				if flag.NoOptDefVal != "true" {
507 507
 					line += fmt.Sprintf("[=%s]", flag.NoOptDefVal)
... ...
@@ -519,9 +532,9 @@ func (f *FlagSet) FlagUsages() string {
519 519
 		}
520 520
 
521 521
 		line += usage
522
-		if !isZeroValue(flag.DefValue) {
522
+		if !flag.defaultIsZeroValue() {
523 523
 			if flag.Value.Type() == "string" {
524
-				line += fmt.Sprintf(" (default %q)", flag.DefValue)
524
+				line += fmt.Sprintf(" (default \"%s\")", flag.DefValue)
525 525
 			} else {
526 526
 				line += fmt.Sprintf(" (default %s)", flag.DefValue)
527 527
 			}
... ...
@@ -1,9 +1,6 @@
1 1
 package pflag
2 2
 
3
-import (
4
-	"fmt"
5
-	"strconv"
6
-)
3
+import "strconv"
7 4
 
8 5
 // -- float32 Value
9 6
 type float32Value float32
... ...
@@ -23,7 +20,7 @@ func (f *float32Value) Type() string {
23 23
 	return "float32"
24 24
 }
25 25
 
26
-func (f *float32Value) String() string { return fmt.Sprintf("%v", *f) }
26
+func (f *float32Value) String() string { return strconv.FormatFloat(float64(*f), 'g', -1, 32) }
27 27
 
28 28
 func float32Conv(sval string) (interface{}, error) {
29 29
 	v, err := strconv.ParseFloat(sval, 32)
... ...
@@ -1,9 +1,6 @@
1 1
 package pflag
2 2
 
3
-import (
4
-	"fmt"
5
-	"strconv"
6
-)
3
+import "strconv"
7 4
 
8 5
 // -- float64 Value
9 6
 type float64Value float64
... ...
@@ -23,7 +20,7 @@ func (f *float64Value) Type() string {
23 23
 	return "float64"
24 24
 }
25 25
 
26
-func (f *float64Value) String() string { return fmt.Sprintf("%v", *f) }
26
+func (f *float64Value) String() string { return strconv.FormatFloat(float64(*f), 'g', -1, 64) }
27 27
 
28 28
 func float64Conv(sval string) (interface{}, error) {
29 29
 	return strconv.ParseFloat(sval, 64)
... ...
@@ -1,9 +1,6 @@
1 1
 package pflag
2 2
 
3
-import (
4
-	"fmt"
5
-	"strconv"
6
-)
3
+import "strconv"
7 4
 
8 5
 // -- int Value
9 6
 type intValue int
... ...
@@ -23,7 +20,7 @@ func (i *intValue) Type() string {
23 23
 	return "int"
24 24
 }
25 25
 
26
-func (i *intValue) String() string { return fmt.Sprintf("%v", *i) }
26
+func (i *intValue) String() string { return strconv.Itoa(int(*i)) }
27 27
 
28 28
 func intConv(sval string) (interface{}, error) {
29 29
 	return strconv.Atoi(sval)
... ...
@@ -1,9 +1,6 @@
1 1
 package pflag
2 2
 
3
-import (
4
-	"fmt"
5
-	"strconv"
6
-)
3
+import "strconv"
7 4
 
8 5
 // -- int32 Value
9 6
 type int32Value int32
... ...
@@ -23,7 +20,7 @@ func (i *int32Value) Type() string {
23 23
 	return "int32"
24 24
 }
25 25
 
26
-func (i *int32Value) String() string { return fmt.Sprintf("%v", *i) }
26
+func (i *int32Value) String() string { return strconv.FormatInt(int64(*i), 10) }
27 27
 
28 28
 func int32Conv(sval string) (interface{}, error) {
29 29
 	v, err := strconv.ParseInt(sval, 0, 32)
... ...
@@ -1,9 +1,6 @@
1 1
 package pflag
2 2
 
3
-import (
4
-	"fmt"
5
-	"strconv"
6
-)
3
+import "strconv"
7 4
 
8 5
 // -- int64 Value
9 6
 type int64Value int64
... ...
@@ -23,7 +20,7 @@ func (i *int64Value) Type() string {
23 23
 	return "int64"
24 24
 }
25 25
 
26
-func (i *int64Value) String() string { return fmt.Sprintf("%v", *i) }
26
+func (i *int64Value) String() string { return strconv.FormatInt(int64(*i), 10) }
27 27
 
28 28
 func int64Conv(sval string) (interface{}, error) {
29 29
 	return strconv.ParseInt(sval, 0, 64)
... ...
@@ -1,9 +1,6 @@
1 1
 package pflag
2 2
 
3
-import (
4
-	"fmt"
5
-	"strconv"
6
-)
3
+import "strconv"
7 4
 
8 5
 // -- int8 Value
9 6
 type int8Value int8
... ...
@@ -23,7 +20,7 @@ func (i *int8Value) Type() string {
23 23
 	return "int8"
24 24
 }
25 25
 
26
-func (i *int8Value) String() string { return fmt.Sprintf("%v", *i) }
26
+func (i *int8Value) String() string { return strconv.FormatInt(int64(*i), 10) }
27 27
 
28 28
 func int8Conv(sval string) (interface{}, error) {
29 29
 	v, err := strconv.ParseInt(sval, 0, 8)
... ...
@@ -1,7 +1,5 @@
1 1
 package pflag
2 2
 
3
-import "fmt"
4
-
5 3
 // -- string Value
6 4
 type stringValue string
7 5
 
... ...
@@ -18,7 +16,7 @@ func (s *stringValue) Type() string {
18 18
 	return "string"
19 19
 }
20 20
 
21
-func (s *stringValue) String() string { return fmt.Sprintf("%s", *s) }
21
+func (s *stringValue) String() string { return string(*s) }
22 22
 
23 23
 func stringConv(sval string) (interface{}, error) {
24 24
 	return sval, nil
25 25
new file mode 100644
... ...
@@ -0,0 +1,109 @@
0
+package pflag
1
+
2
+import (
3
+	"fmt"
4
+)
5
+
6
+var _ = fmt.Fprint
7
+
8
+// -- stringArray Value
9
+type stringArrayValue struct {
10
+	value   *[]string
11
+	changed bool
12
+}
13
+
14
+func newStringArrayValue(val []string, p *[]string) *stringArrayValue {
15
+	ssv := new(stringArrayValue)
16
+	ssv.value = p
17
+	*ssv.value = val
18
+	return ssv
19
+}
20
+
21
+func (s *stringArrayValue) Set(val string) error {
22
+	if !s.changed {
23
+		*s.value = []string{val}
24
+		s.changed = true
25
+	} else {
26
+		*s.value = append(*s.value, val)
27
+	}
28
+	return nil
29
+}
30
+
31
+func (s *stringArrayValue) Type() string {
32
+	return "stringArray"
33
+}
34
+
35
+func (s *stringArrayValue) String() string {
36
+	str, _ := writeAsCSV(*s.value)
37
+	return "[" + str + "]"
38
+}
39
+
40
+func stringArrayConv(sval string) (interface{}, error) {
41
+	sval = sval[1 : len(sval)-1]
42
+	// An empty string would cause a array with one (empty) string
43
+	if len(sval) == 0 {
44
+		return []string{}, nil
45
+	}
46
+	return readAsCSV(sval)
47
+}
48
+
49
+// GetStringArray return the []string value of a flag with the given name
50
+func (f *FlagSet) GetStringArray(name string) ([]string, error) {
51
+	val, err := f.getFlagType(name, "stringArray", stringArrayConv)
52
+	if err != nil {
53
+		return []string{}, err
54
+	}
55
+	return val.([]string), nil
56
+}
57
+
58
+// StringArrayVar defines a string flag with specified name, default value, and usage string.
59
+// The argument p points to a []string variable in which to store the values of the multiple flags.
60
+// The value of each argument will not try to be separated by comma
61
+func (f *FlagSet) StringArrayVar(p *[]string, name string, value []string, usage string) {
62
+	f.VarP(newStringArrayValue(value, p), name, "", usage)
63
+}
64
+
65
+// StringArrayVarP is like StringArrayVar, but accepts a shorthand letter that can be used after a single dash.
66
+func (f *FlagSet) StringArrayVarP(p *[]string, name, shorthand string, value []string, usage string) {
67
+	f.VarP(newStringArrayValue(value, p), name, shorthand, usage)
68
+}
69
+
70
+// StringArrayVar defines a string flag with specified name, default value, and usage string.
71
+// The argument p points to a []string variable in which to store the value of the flag.
72
+// The value of each argument will not try to be separated by comma
73
+func StringArrayVar(p *[]string, name string, value []string, usage string) {
74
+	CommandLine.VarP(newStringArrayValue(value, p), name, "", usage)
75
+}
76
+
77
+// StringArrayVarP is like StringArrayVar, but accepts a shorthand letter that can be used after a single dash.
78
+func StringArrayVarP(p *[]string, name, shorthand string, value []string, usage string) {
79
+	CommandLine.VarP(newStringArrayValue(value, p), name, shorthand, usage)
80
+}
81
+
82
+// StringArray defines a string flag with specified name, default value, and usage string.
83
+// The return value is the address of a []string variable that stores the value of the flag.
84
+// The value of each argument will not try to be separated by comma
85
+func (f *FlagSet) StringArray(name string, value []string, usage string) *[]string {
86
+	p := []string{}
87
+	f.StringArrayVarP(&p, name, "", value, usage)
88
+	return &p
89
+}
90
+
91
+// StringArrayP is like StringArray, but accepts a shorthand letter that can be used after a single dash.
92
+func (f *FlagSet) StringArrayP(name, shorthand string, value []string, usage string) *[]string {
93
+	p := []string{}
94
+	f.StringArrayVarP(&p, name, shorthand, value, usage)
95
+	return &p
96
+}
97
+
98
+// StringArray defines a string flag with specified name, default value, and usage string.
99
+// The return value is the address of a []string variable that stores the value of the flag.
100
+// The value of each argument will not try to be separated by comma
101
+func StringArray(name string, value []string, usage string) *[]string {
102
+	return CommandLine.StringArrayP(name, "", value, usage)
103
+}
104
+
105
+// StringArrayP is like StringArray, but accepts a shorthand letter that can be used after a single dash.
106
+func StringArrayP(name, shorthand string, value []string, usage string) *[]string {
107
+	return CommandLine.StringArrayP(name, shorthand, value, usage)
108
+}
... ...
@@ -1,6 +1,7 @@
1 1
 package pflag
2 2
 
3 3
 import (
4
+	"bytes"
4 5
 	"encoding/csv"
5 6
 	"fmt"
6 7
 	"strings"
... ...
@@ -21,10 +22,28 @@ func newStringSliceValue(val []string, p *[]string) *stringSliceValue {
21 21
 	return ssv
22 22
 }
23 23
 
24
-func (s *stringSliceValue) Set(val string) error {
24
+func readAsCSV(val string) ([]string, error) {
25
+	if val == "" {
26
+		return []string{}, nil
27
+	}
25 28
 	stringReader := strings.NewReader(val)
26 29
 	csvReader := csv.NewReader(stringReader)
27
-	v, err := csvReader.Read()
30
+	return csvReader.Read()
31
+}
32
+
33
+func writeAsCSV(vals []string) (string, error) {
34
+	b := &bytes.Buffer{}
35
+	w := csv.NewWriter(b)
36
+	err := w.Write(vals)
37
+	if err != nil {
38
+		return "", err
39
+	}
40
+	w.Flush()
41
+	return strings.TrimSuffix(b.String(), fmt.Sprintln()), nil
42
+}
43
+
44
+func (s *stringSliceValue) Set(val string) error {
45
+	v, err := readAsCSV(val)
28 46
 	if err != nil {
29 47
 		return err
30 48
 	}
... ...
@@ -41,16 +60,18 @@ func (s *stringSliceValue) Type() string {
41 41
 	return "stringSlice"
42 42
 }
43 43
 
44
-func (s *stringSliceValue) String() string { return "[" + strings.Join(*s.value, ",") + "]" }
44
+func (s *stringSliceValue) String() string {
45
+	str, _ := writeAsCSV(*s.value)
46
+	return "[" + str + "]"
47
+}
45 48
 
46 49
 func stringSliceConv(sval string) (interface{}, error) {
47
-	sval = strings.Trim(sval, "[]")
50
+	sval = sval[1 : len(sval)-1]
48 51
 	// An empty string would cause a slice with one (empty) string
49 52
 	if len(sval) == 0 {
50 53
 		return []string{}, nil
51 54
 	}
52
-	v := strings.Split(sval, ",")
53
-	return v, nil
55
+	return readAsCSV(sval)
54 56
 }
55 57
 
56 58
 // GetStringSlice return the []string value of a flag with the given name
... ...
@@ -1,9 +1,6 @@
1 1
 package pflag
2 2
 
3
-import (
4
-	"fmt"
5
-	"strconv"
6
-)
3
+import "strconv"
7 4
 
8 5
 // -- uint Value
9 6
 type uintValue uint
... ...
@@ -23,7 +20,7 @@ func (i *uintValue) Type() string {
23 23
 	return "uint"
24 24
 }
25 25
 
26
-func (i *uintValue) String() string { return fmt.Sprintf("%v", *i) }
26
+func (i *uintValue) String() string { return strconv.FormatUint(uint64(*i), 10) }
27 27
 
28 28
 func uintConv(sval string) (interface{}, error) {
29 29
 	v, err := strconv.ParseUint(sval, 0, 0)
... ...
@@ -1,9 +1,6 @@
1 1
 package pflag
2 2
 
3
-import (
4
-	"fmt"
5
-	"strconv"
6
-)
3
+import "strconv"
7 4
 
8 5
 // -- uint16 value
9 6
 type uint16Value uint16
... ...
@@ -12,7 +9,7 @@ func newUint16Value(val uint16, p *uint16) *uint16Value {
12 12
 	*p = val
13 13
 	return (*uint16Value)(p)
14 14
 }
15
-func (i *uint16Value) String() string { return fmt.Sprintf("%d", *i) }
15
+
16 16
 func (i *uint16Value) Set(s string) error {
17 17
 	v, err := strconv.ParseUint(s, 0, 16)
18 18
 	*i = uint16Value(v)
... ...
@@ -23,6 +20,8 @@ func (i *uint16Value) Type() string {
23 23
 	return "uint16"
24 24
 }
25 25
 
26
+func (i *uint16Value) String() string { return strconv.FormatUint(uint64(*i), 10) }
27
+
26 28
 func uint16Conv(sval string) (interface{}, error) {
27 29
 	v, err := strconv.ParseUint(sval, 0, 16)
28 30
 	if err != nil {
... ...
@@ -1,18 +1,15 @@
1 1
 package pflag
2 2
 
3
-import (
4
-	"fmt"
5
-	"strconv"
6
-)
3
+import "strconv"
7 4
 
8
-// -- uint16 value
5
+// -- uint32 value
9 6
 type uint32Value uint32
10 7
 
11 8
 func newUint32Value(val uint32, p *uint32) *uint32Value {
12 9
 	*p = val
13 10
 	return (*uint32Value)(p)
14 11
 }
15
-func (i *uint32Value) String() string { return fmt.Sprintf("%d", *i) }
12
+
16 13
 func (i *uint32Value) Set(s string) error {
17 14
 	v, err := strconv.ParseUint(s, 0, 32)
18 15
 	*i = uint32Value(v)
... ...
@@ -23,6 +20,8 @@ func (i *uint32Value) Type() string {
23 23
 	return "uint32"
24 24
 }
25 25
 
26
+func (i *uint32Value) String() string { return strconv.FormatUint(uint64(*i), 10) }
27
+
26 28
 func uint32Conv(sval string) (interface{}, error) {
27 29
 	v, err := strconv.ParseUint(sval, 0, 32)
28 30
 	if err != nil {
... ...
@@ -1,9 +1,6 @@
1 1
 package pflag
2 2
 
3
-import (
4
-	"fmt"
5
-	"strconv"
6
-)
3
+import "strconv"
7 4
 
8 5
 // -- uint64 Value
9 6
 type uint64Value uint64
... ...
@@ -23,7 +20,7 @@ func (i *uint64Value) Type() string {
23 23
 	return "uint64"
24 24
 }
25 25
 
26
-func (i *uint64Value) String() string { return fmt.Sprintf("%v", *i) }
26
+func (i *uint64Value) String() string { return strconv.FormatUint(uint64(*i), 10) }
27 27
 
28 28
 func uint64Conv(sval string) (interface{}, error) {
29 29
 	v, err := strconv.ParseUint(sval, 0, 64)
... ...
@@ -1,9 +1,6 @@
1 1
 package pflag
2 2
 
3
-import (
4
-	"fmt"
5
-	"strconv"
6
-)
3
+import "strconv"
7 4
 
8 5
 // -- uint8 Value
9 6
 type uint8Value uint8
... ...
@@ -23,7 +20,7 @@ func (i *uint8Value) Type() string {
23 23
 	return "uint8"
24 24
 }
25 25
 
26
-func (i *uint8Value) String() string { return fmt.Sprintf("%v", *i) }
26
+func (i *uint8Value) String() string { return strconv.FormatUint(uint64(*i), 10) }
27 27
 
28 28
 func uint8Conv(sval string) (interface{}, error) {
29 29
 	v, err := strconv.ParseUint(sval, 0, 8)