From dcdfdf4dd8ccfcfef4764c4152f3b0c37501113a Mon Sep 17 00:00:00 2001 From: Delyan Angelov Date: Sat, 30 Apr 2022 10:08:31 +0300 Subject: [PATCH] tools: make `v up` more informative on failure --- cmd/tools/vup.v | 39 ++++++++++++++++++++++++++------------- 1 file changed, 26 insertions(+), 13 deletions(-) diff --git a/cmd/tools/vup.v b/cmd/tools/vup.v index 89bda387f9..e953d72e26 100644 --- a/cmd/tools/vup.v +++ b/cmd/tools/vup.v @@ -34,13 +34,19 @@ fn main() { // println(v_hash) // println(current_hash) if v_hash == current_hash { + println('V is already updated.') app.show_current_v_version() return } $if windows { app.backup('cmd/tools/vup.exe') } - app.recompile_v() + if !app.recompile_v() { + app.show_current_v_version() + eprintln('Recompiling V *failed*.') + eprintln('Try running `$get_make_cmd_name()` .') + exit(1) + } app.recompile_vup() app.show_current_v_version() } @@ -66,7 +72,7 @@ fn (app App) update_from_master() { } } -fn (app App) recompile_v() { +fn (app App) recompile_v() bool { // Note: app.vexe is more reliable than just v (which may be a symlink) opts := if app.is_prod { '-prod' } else { '' } vself := '${os.quoted_path(app.vexe)} $opts self' @@ -74,35 +80,35 @@ fn (app App) recompile_v() { self_result := os.execute(vself) if self_result.exit_code == 0 { println(self_result.output.trim_space()) - return + return true } else { app.vprintln('`$vself` failed, running `make`...') app.vprintln(self_result.output.trim_space()) } - app.make(vself) + return app.make(vself) } -fn (app App) recompile_vup() { +fn (app App) recompile_vup() bool { vup_result := os.execute('${os.quoted_path(app.vexe)} -g cmd/tools/vup.v') if vup_result.exit_code != 0 { eprintln('recompiling vup.v failed:') eprintln(vup_result.output) + return false } + return true } -fn (app App) make(vself string) { - mut make := 'make' - $if windows { - make = 'make.bat' - } +fn (app App) make(vself string) bool { + make := get_make_cmd_name() make_result := os.execute(make) if make_result.exit_code != 0 { eprintln('> $make failed:') eprintln('> make output:') eprintln(make_result.output) - return + return false } app.vprintln(make_result.output) + return true } fn (app App) show_current_v_version() { @@ -116,8 +122,7 @@ fn (app App) show_current_v_version() { vversion += ', timestamp: ' + latest_v_commit_time.output.trim_space() } } - println('Current V version:') - println(vversion) + println('Current V version: $vversion') } } @@ -162,3 +167,11 @@ fn (app App) get_git() { eprintln("error: Install `git` using your system's package manager") } } + +fn get_make_cmd_name() string { + $if windows { + return 'make.bat' + } $else { + return 'make' + } +}