summaryrefslogtreecommitdiff
path: root/parse.go
diff options
context:
space:
mode:
authorHugo Hromic <[email protected]>2023-07-14 20:12:47 +0100
committerHugo Hromic <[email protected]>2023-07-14 20:12:52 +0100
commitc73f38cd547cccc7930cf2e302c835e3f424ffd4 (patch)
treeeafc87355350d43926401b91abe98d4d2e1d4ec1 /parse.go
parent463902ef7d1219df0c6306a3838f4e003da92f91 (diff)
Improve handling of version flag
* Only use/show builtin `--version` flag if args are versioned with a non-empty `Version()` * If args define a `--version` flag, honor it and disable/hide the builtin version flag * Only return `ErrVersion` when using the builtin version flag
Diffstat (limited to 'parse.go')
-rw-r--r--parse.go17
1 files changed, 14 insertions, 3 deletions
diff --git a/parse.go b/parse.go
index 63cfab3..0bdddc7 100644
--- a/parse.go
+++ b/parse.go
@@ -69,10 +69,10 @@ type command struct {
parent *command
}
-// ErrHelp indicates that -h or --help were provided
+// ErrHelp indicates that the builtin -h or --help were provided
var ErrHelp = errors.New("help requested by user")
-// ErrVersion indicates that --version was provided
+// ErrVersion indicates that the builtin --version was provided
var ErrVersion = errors.New("version requested by user")
// for monkey patching in example code
@@ -591,6 +591,15 @@ func (p *Parser) process(args []string) error {
}
}
+ // determine if the current command has a version option spec
+ var hasVersionOption bool
+ for _, spec := range curCmd.specs {
+ if spec.long == "version" {
+ hasVersionOption = true
+ break
+ }
+ }
+
// process each string from the command line
var allpositional bool
var positionals []string
@@ -648,7 +657,9 @@ func (p *Parser) process(args []string) error {
case "-h", "--help":
return ErrHelp
case "--version":
- return ErrVersion
+ if !hasVersionOption && p.version != "" {
+ return ErrVersion
+ }
}
// check for an equals sign, as in "--foo=bar"