tools: improve error diagnostic for `v up` and `v self`. Make `v self` more robust.
parent
8162396783
commit
242d7d0fc0
|
@ -40,13 +40,18 @@ fn compile(vroot string, cmd string) {
|
|||
}
|
||||
}
|
||||
|
||||
fn backup_old_version_and_rename_newer() ? {
|
||||
fn backup_old_version_and_rename_newer() ?bool {
|
||||
mut errors := []string{}
|
||||
v_file := if os.user_os() == 'windows' { 'v.exe' } else { 'v' }
|
||||
v2_file := if os.user_os() == 'windows' { 'v2.exe' } else { 'v2' }
|
||||
bak_file := if os.user_os() == 'windows' { 'v_old.exe' } else { 'v_old' }
|
||||
if os.exists(bak_file) {
|
||||
os.rm(bak_file) ?
|
||||
os.rm(bak_file) or { errors << 'failed removing $bak_file: $err' }
|
||||
}
|
||||
os.mv(v_file, bak_file) ?
|
||||
os.mv(v2_file, v_file) ?
|
||||
os.mv(v_file, bak_file) or { errors << err }
|
||||
os.mv(v2_file, v_file) or { errors << err }
|
||||
if errors.len > 0 {
|
||||
return error('backup errors:\n >> ' + errors.join('\n >> '))
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
|
|
@ -43,10 +43,14 @@ fn main() {
|
|||
app.show_current_v_version()
|
||||
}
|
||||
|
||||
fn (app App) update_from_master() {
|
||||
fn (app App) vprintln(s string) {
|
||||
if app.is_verbose {
|
||||
println('> updating from master ...')
|
||||
println(s)
|
||||
}
|
||||
}
|
||||
|
||||
fn (app App) update_from_master() {
|
||||
app.vprintln('> updating from master ...')
|
||||
if !os.exists('.git') {
|
||||
// initialize as if it had been cloned
|
||||
app.git_command('init')
|
||||
|
@ -63,16 +67,14 @@ fn (app App) update_from_master() {
|
|||
fn (app App) recompile_v() {
|
||||
// NB: app.vexe is more reliable than just v (which may be a symlink)
|
||||
vself := '"$app.vexe" self'
|
||||
if app.is_verbose {
|
||||
println('> recompiling v itself with `$vself` ...')
|
||||
}
|
||||
app.vprintln('> recompiling v itself with `$vself` ...')
|
||||
if self_result := os.exec(vself) {
|
||||
if self_result.exit_code == 0 {
|
||||
println(self_result.output.trim_space())
|
||||
return
|
||||
} else if app.is_verbose {
|
||||
println('`$vself` failed, running `make`...')
|
||||
println(self_result.output.trim_space())
|
||||
} else {
|
||||
app.vprintln('`$vself` failed, running `make`...')
|
||||
app.vprintln(self_result.output.trim_space())
|
||||
}
|
||||
}
|
||||
app.make(vself)
|
||||
|
@ -84,9 +86,7 @@ fn (app App) make(vself string) {
|
|||
make = 'make.bat'
|
||||
}
|
||||
make_result := os.exec(make) or { panic(err) }
|
||||
if app.is_verbose {
|
||||
println(make_result.output)
|
||||
}
|
||||
app.vprintln(make_result.output)
|
||||
}
|
||||
|
||||
fn (app App) show_current_v_version() {
|
||||
|
@ -114,17 +114,11 @@ fn (app App) backup(file string) {
|
|||
}
|
||||
|
||||
fn (app App) git_command(command string) {
|
||||
app.vprintln('git_command: git $command')
|
||||
git_result := os.exec('git $command') or { panic(err) }
|
||||
if git_result.exit_code != 0 {
|
||||
if git_result.output.contains('Permission denied') {
|
||||
eprintln('No access to `$app.vroot`: Permission denied')
|
||||
} else {
|
||||
eprintln(git_result.output)
|
||||
}
|
||||
eprintln(git_result.output)
|
||||
exit(1)
|
||||
} else {
|
||||
if app.is_verbose {
|
||||
println(git_result.output)
|
||||
}
|
||||
}
|
||||
app.vprintln(git_result.output)
|
||||
}
|
||||
|
|
|
@ -168,6 +168,14 @@ pub fn launch_tool(is_verbose bool, tool_name string, args []string) {
|
|||
check_module_is_installed(emodule, is_verbose) or { panic(err) }
|
||||
}
|
||||
mut compilation_command := '"$vexe" '
|
||||
if tool_name in ['vself', 'vup', 'vdoctor', 'vsymlink'] {
|
||||
// These tools will be called by users in cases where there
|
||||
// is high chance of there being a problem somewhere. Thus
|
||||
// it is better to always compile them with -g, so that in
|
||||
// case these tools do crash/panic, their backtraces will have
|
||||
// .v line numbers, to ease diagnostic in #bugs and issues.
|
||||
compilation_command += ' -g '
|
||||
}
|
||||
compilation_command += '"$tool_source"'
|
||||
if is_verbose {
|
||||
println('Compiling $tool_name with: "$compilation_command"')
|
||||
|
|
Loading…
Reference in New Issue