diff --git a/cmd/tools/vdoctor.v b/cmd/tools/vdoctor.v index 20d7deff56..4a9734485a 100644 --- a/cmd/tools/vdoctor.v +++ b/cmd/tools/vdoctor.v @@ -15,6 +15,8 @@ fn (mut a App) println(s string) { } fn (mut a App) collect_info() { + a.line('V full version', version.full_v_version(true)) + // mut os_kind := os.user_os() mut arch_details := []string{} arch_details << '${runtime.nr_cpus()} cpus' @@ -96,34 +98,32 @@ fn (mut a App) collect_info() { } a.line('OS', '${os_kind}, ${os_details}') a.line('Processor', arch_details.join(', ')) - a.line('CC version', a.cmd(command: 'cc --version')) a.println('') getwd := os.getwd() vmodules := os.vmodules_dir() + vtmp_dir := os.vtmp_dir() vexe := os.getenv('VEXE') vroot := os.dir(vexe) os.chdir(vroot) or {} a.line('getwd', getwd) - a.line('vmodules', vmodules) - a.line('vroot', vroot) a.line('vexe', vexe) a.line('vexe mtime', time.unix(os.file_last_mod_unix(vexe)).str()) - a.line('is vroot writable', is_writable_dir(vroot).str()) - a.line('is vmodules writable', is_writable_dir(vmodules).str()) - a.line('V full version', version.full_v_version(true)) - vtmp := os.getenv('VTMP') - if vtmp != '' { - a.line('env VTMP', '"${vtmp}"') - } + a.println('') + a.line2('vroot', diagnose_dir(vroot), vroot) + a.line2('VMODULES', diagnose_dir(vmodules), vmodules) + a.line2('VTMP', diagnose_dir(vtmp_dir), vtmp_dir) vflags := os.getenv('VFLAGS') + a.println('') if vflags != '' { a.line('env VFLAGS', '"${vflags}"') + a.println('') } - a.println('') a.line('Git version', a.cmd(command: 'git --version')) a.line('Git vroot status', a.git_info()) a.line('.git/config present', os.is_file('.git/config').str()) + a.println('') // + a.line('CC version', a.cmd(command: 'cc --version')) a.report_tcc_version('thirdparty/tcc') } @@ -153,6 +153,11 @@ fn (mut a App) line(label string, value string) { a.println('${label}: ${term.colorize(term.bold, value)}') } +fn (mut a App) line2(label string, value string, value2 string) { + a.println('${label}: ${term.colorize(term.bold, value)}, value: ${term.colorize(term.bold, + value2)}') +} + fn (app &App) parse(config string, sep string) map[string]string { mut m := map[string]string{} lines := config.split_into_lines() @@ -261,6 +266,24 @@ fn is_writable_dir(path string) bool { return true } +fn diagnose_dir(path string) string { + mut diagnostics := []string{} + if !is_writable_dir(path) { + diagnostics << 'NOT writable' + } + if path.contains(' ') { + diagnostics << 'contains spaces' + } + path_non_ascii_runes := path.runes().filter(it > 255) + if path_non_ascii_runes.len > 0 { + diagnostics << 'contains these non ASCII characters: ${path_non_ascii_runes}' + } + if diagnostics.len == 0 { + diagnostics << 'OK' + } + return diagnostics.join(', ') +} + fn main() { mut app := App{} app.collect_info()