Skip to content

Commit

Permalink
pref: fix version flag handling (#21377)
Browse files Browse the repository at this point in the history
  • Loading branch information
ttytm committed Apr 29, 2024
1 parent ec59760 commit 08da3cd
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 16 deletions.
26 changes: 10 additions & 16 deletions vlib/v/pref/pref.c.v
Original file line number Diff line number Diff line change
Expand Up @@ -401,17 +401,16 @@ pub fn parse_args_and_show_errors(known_external_commands []string, args []strin
}
res.is_quiet = true
}
'-v' {
if command_pos != -1 {
// a -v flag after the command, is intended for the command, not for V itself
continue
}
// `-v` flag is for setting verbosity, but without any args it prints the version, like Clang
if args.len > 1 {
res.is_verbose = true
} else {
command = 'version'
command_pos = i
'-v', '-V', '--version', '-version' {
if command_pos == -1 {
// Version flags after a command are intended for the command, not for V itself.
if current_args.len > 1 && arg == '-v' {
// With additional args after the `-v` flag, it toggles verbosity, like Clang.
// E.g.: `v -v` VS `v -v run examples/hello_world.v`.
res.is_verbose = true
} else {
command = 'version'
}
}
}
'-progress' {
Expand Down Expand Up @@ -960,11 +959,6 @@ pub fn parse_args_and_show_errors(known_external_commands []string, args []strin
}
continue
}
if arg in ['-V', '-version', '--version'] {
command = 'version'
command_pos = i
continue
}
if command != '' && command != 'build-module' {
// arguments for e.g. fmt should be checked elsewhere
continue
Expand Down
32 changes: 32 additions & 0 deletions vlib/v/pref/pref_test.v
Original file line number Diff line number Diff line change
@@ -1,8 +1,40 @@
module pref

import v.vmod
import os

fn test_check_parametes() {
// reproducing issue https://github.com/vlang/v/issues/13983
_, cmd := parse_args_and_show_errors(['help'], [''], true)
// no command found from args
assert cmd == ''
}

fn test_version_falg() {
// Vars instead of consts to prevent dupl decls in pref.
vexe := @VEXE
vroot := os.dir(vexe)

v_ver := vmod.from_file(os.join_path(vroot, 'v.mod'))!.version
v_ver_cmd_res := os.execute_opt('${vexe} --version')!.output
assert v_ver_cmd_res.starts_with('V ${v_ver}'), v_ver_cmd_res

v_retry_ver_cmd_res := os.execute_opt('${vexe} retry --version')!.output
assert v_retry_ver_cmd_res != v_ver_cmd_res

v_git_ver_subcmd_res := os.execute_opt('${vexe} retry -- git --version')!.output
assert v_git_ver_subcmd_res !in [v_ver_cmd_res, v_retry_ver_cmd_res]

// Test version / verbosity toggle.
assert os.execute_opt('${vexe} -v')!.output == v_ver_cmd_res
assert os.execute_opt('${vexe} -cc tcc -v')!.output == v_ver_cmd_res

example_path := os.join_path(vroot, 'examples', 'hello_world.v')
v_verbose_cmd_res := os.execute_opt('${vexe} -v run ${example_path}')!.output
assert v_verbose_cmd_res != v_ver_cmd_res
assert v_verbose_cmd_res.contains('v.pref.lookup_path:')

v_verbose_cmd_with_additional_args_res := os.execute_opt('${vexe} -cc tcc -v run ${example_path}')!.output
assert v_verbose_cmd_with_additional_args_res != v_ver_cmd_res
assert v_verbose_cmd_with_additional_args_res.contains('v.pref.lookup_path:')
}

0 comments on commit 08da3cd

Please sign in to comment.