v/vlib/cli/version.v

42 lines
946 B
V

module cli
fn version_flag(with_abbrev bool) Flag {
sabbrev := if with_abbrev { 'v' } else { '' }
return Flag{
flag: .bool
name: 'version'
abbrev: sabbrev
description: 'Prints version information.'
}
}
fn version_cmd() Command {
return Command{
name: 'version'
description: 'Prints version information.'
execute: print_version_for_command
}
}
fn print_version_for_command(cmd Command) ! {
if cmd.args.len > 0 {
for sub_cmd in cmd.commands {
if sub_cmd.name == cmd.args[0] {
version_cmd := unsafe { &sub_cmd }
print(version_cmd.version())
return
}
}
println('Invalid command: ${cmd.args.join(' ')}')
} else if cmd.parent != unsafe { nil } {
println(cmd.parent.version())
} else {
println(cmd.version())
}
}
// version returns a generated version `string` for the `Command`.
pub fn (cmd &Command) version() string {
return '${cmd.name} version ${cmd.version}'
}