101 lines
1.9 KiB
V
101 lines
1.9 KiB
V
module scripting
|
|
|
|
import os
|
|
|
|
pub fn set_verbose(on bool) {
|
|
// setting a global here would be the obvious solution,
|
|
// but V does not have globals normally.
|
|
if on {
|
|
os.setenv('VERBOSE', '1', true)
|
|
}
|
|
else {
|
|
os.unsetenv('VERBOSE')
|
|
}
|
|
}
|
|
|
|
pub fn verbose_trace(label string, message string) {
|
|
if os.getenv('VERBOSE').len > 0 {
|
|
slabel := 'scripting.${label}'
|
|
println('# ${slabel:-25s} : $message')
|
|
}
|
|
}
|
|
|
|
pub fn verbose_trace_exec_result(x os.Result) {
|
|
if os.getenv('VERBOSE').len > 0 {
|
|
println('# cmd.exit_code : ${x.exit_code.str():-4s} cmd.output:')
|
|
println('# ----------------------------------- #')
|
|
mut lnum := 1
|
|
lines := x.output.split_into_lines()
|
|
for line in lines {
|
|
println('# ${lnum:3d}: $line')
|
|
lnum++
|
|
}
|
|
println('# ----------------------------------- #')
|
|
}
|
|
}
|
|
|
|
pub fn chdir(path string) {
|
|
verbose_trace(@FN, 'cd $path')
|
|
os.chdir(path)
|
|
}
|
|
|
|
pub fn rmrf(path string) {
|
|
verbose_trace(@FN, 'rm -rf $path')
|
|
if os.exists(path) {
|
|
if os.is_dir(path) {
|
|
os.rmdir_all(path)
|
|
}else{
|
|
os.rm(path)
|
|
}
|
|
}
|
|
}
|
|
|
|
pub fn run(cmd string) string {
|
|
verbose_trace(@FN, cmd)
|
|
x := os.exec(cmd) or {
|
|
verbose_trace(@FN, '## failed.')
|
|
return ''
|
|
}
|
|
verbose_trace_exec_result(x)
|
|
if x.exit_code == 0 {
|
|
return x.output
|
|
}
|
|
return ''
|
|
}
|
|
|
|
pub fn exit_0_status(cmd string) bool {
|
|
verbose_trace(@FN, cmd)
|
|
x := os.exec(cmd) or {
|
|
verbose_trace(@FN, '## failed.')
|
|
return false
|
|
}
|
|
verbose_trace_exec_result(x)
|
|
if x.exit_code == 0 {
|
|
return true
|
|
}
|
|
return false
|
|
}
|
|
|
|
pub fn tool_must_exist (toolcmd string) {
|
|
verbose_trace(@FN, toolcmd)
|
|
if exit_0_status('type $toolcmd') {
|
|
return
|
|
}
|
|
eprintln('Missing tool: $toolcmd')
|
|
eprintln('Please try again after you install it.')
|
|
exit(1)
|
|
}
|
|
|
|
pub fn used_tools_must_exist(tools []string) {
|
|
for t in tools {
|
|
tool_must_exist(t)
|
|
}
|
|
}
|
|
|
|
pub fn show_sizes_of_files(files []string) {
|
|
for f in files {
|
|
size := os.file_size(f)
|
|
println('${size:10d} $f')
|
|
}
|
|
}
|