v / vlib / cli / version.v
41 lines · 37 sloc · 932 bytes · 390efe46a1f46f302ae98c803b8ffbbb333fdb28
Raw
1module cli
2
3fn version_flag(with_abbrev bool) Flag {
4 sabbrev := if with_abbrev { 'v' } else { '' }
5 return Flag{
6 flag: .bool
7 name: 'version'
8 abbrev: sabbrev
9 description: 'Print version information'
10 }
11}
12
13fn version_cmd() Command {
14 return Command{
15 name: 'version'
16 description: 'Print version information'
17 execute: print_version_for_command
18 }
19}
20
21fn print_version_for_command(cmd Command) ! {
22 if cmd.args.len > 0 {
23 for sub_cmd in cmd.commands {
24 if sub_cmd.name == cmd.args[0] {
25 target := unsafe { &sub_cmd }
26 print(target.version())
27 return
28 }
29 }
30 println('Invalid command: ${cmd.args.join(' ')}')
31 } else if cmd.parent != unsafe { nil } {
32 println(cmd.parent.version())
33 } else {
34 println(cmd.version())
35 }
36}
37
38// version returns a generated version `string` for the `Command`.
39pub fn (cmd &Command) version() string {
40 return '${cmd.name} version ${cmd.version}'
41}
42