aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorgonix <[email protected]>2017-10-05 23:42:34 +0300
committerEric Paris <[email protected]>2017-10-05 16:42:34 -0400
commit2c300e72a98b4351617d9b927d2d2860ece8ee24 (patch)
tree0de53385665dfc8fa6bb8ddf49c5facf52d602b9
parentbe7121dd7a937a85e1e4b1ddda6a3edce3466110 (diff)
Fixing Count flag usage string (#141)
-rw-r--r--count.go12
-rw-r--r--count_test.go6
-rw-r--r--flag.go4
-rw-r--r--flag_test.go2
4 files changed, 17 insertions, 7 deletions
diff --git a/count.go b/count.go
index 250a438..aa126e4 100644
--- a/count.go
+++ b/count.go
@@ -11,13 +11,13 @@ func newCountValue(val int, p *int) *countValue {
}
func (i *countValue) Set(s string) error {
- v, err := strconv.ParseInt(s, 0, 64)
- // -1 means that no specific value was passed, so increment
- if v == -1 {
+ // "+1" means that no specific value was passed, so increment
+ if s == "+1" {
*i = countValue(*i + 1)
- } else {
- *i = countValue(v)
+ return nil
}
+ v, err := strconv.ParseInt(s, 0, 0)
+ *i = countValue(v)
return err
}
@@ -54,7 +54,7 @@ func (f *FlagSet) CountVar(p *int, name string, usage string) {
// CountVarP is like CountVar only take a shorthand for the flag name.
func (f *FlagSet) CountVarP(p *int, name, shorthand string, usage string) {
flag := f.VarPF(newCountValue(0, p), name, shorthand, usage)
- flag.NoOptDefVal = "-1"
+ flag.NoOptDefVal = "+1"
}
// CountVar like CountVar only the flag is placed on the CommandLine instead of a given flag set
diff --git a/count_test.go b/count_test.go
index 460d96a..3785d37 100644
--- a/count_test.go
+++ b/count_test.go
@@ -17,10 +17,14 @@ func TestCount(t *testing.T) {
success bool
expected int
}{
+ {[]string{}, true, 0},
+ {[]string{"-v"}, true, 1},
{[]string{"-vvv"}, true, 3},
{[]string{"-v", "-v", "-v"}, true, 3},
{[]string{"-v", "--verbose", "-v"}, true, 3},
{[]string{"-v=3", "-v"}, true, 4},
+ {[]string{"--verbose=0"}, true, 0},
+ {[]string{"-v=0"}, true, 0},
{[]string{"-v=a"}, false, 0},
}
@@ -45,7 +49,7 @@ func TestCount(t *testing.T) {
t.Errorf("Got error trying to fetch the counter flag")
}
if c != tc.expected {
- t.Errorf("expected %q, got %q", tc.expected, c)
+ t.Errorf("expected %d, got %d", tc.expected, c)
}
}
}
diff --git a/flag.go b/flag.go
index b0eb4ff..187e4c9 100644
--- a/flag.go
+++ b/flag.go
@@ -672,6 +672,10 @@ func (f *FlagSet) FlagUsagesWrapped(cols int) string {
if flag.NoOptDefVal != "true" {
line += fmt.Sprintf("[=%s]", flag.NoOptDefVal)
}
+ case "count":
+ if flag.NoOptDefVal != "+1" {
+ line += fmt.Sprintf("[=%s]", flag.NoOptDefVal)
+ }
default:
line += fmt.Sprintf("[=%s]", flag.NoOptDefVal)
}
diff --git a/flag_test.go b/flag_test.go
index fe9a4a3..4f7310d 100644
--- a/flag_test.go
+++ b/flag_test.go
@@ -1052,6 +1052,7 @@ const defaultOutput = ` --A for bootstrapping, allo
--custom custom custom Value implementation
--customP custom a VarP with default (default 10)
--maxT timeout set timeout for dial
+ -v, --verbose count verbosity
`
// Custom value that satisfies the Value interface.
@@ -1092,6 +1093,7 @@ func TestPrintDefaults(t *testing.T) {
fs.ShorthandLookup("E").NoOptDefVal = "1234"
fs.StringSlice("StringSlice", []string{}, "string slice with zero default")
fs.StringArray("StringArray", []string{}, "string array with zero default")
+ fs.CountP("verbose", "v", "verbosity")
var cv customValue
fs.Var(&cv, "custom", "custom Value implementation")