v/tools/vget.v

95 lines
1.9 KiB
V
Raw Normal View History

2019-08-01 01:34:28 +02:00
module main
import (
http
os
2019-08-01 01:34:28 +02:00
json
)
2019-08-01 01:34:28 +02:00
const (
//url = 'http://localhost:8089'
url = 'https://vpm.best'
)
2019-08-01 01:34:28 +02:00
struct Mod {
id int
name string
2019-08-01 01:34:28 +02:00
url string
nr_downloads int
2019-08-01 01:34:28 +02:00
}
fn get_vmodules_dir_path() string {
home := os.home_dir()
return '${home}.vmodules'
}
fn ensure_vmodules_dir_exist() {
home_vmodules := get_vmodules_dir_path()
2019-08-10 14:29:37 +02:00
if !os.dir_exists( home_vmodules ) {
println('Creating $home_vmodules/ ...')
os.mkdir(home_vmodules)
}
}
fn change_to_vmodules_dir() {
os.chdir(get_vmodules_dir_path())
}
fn main() {
if os.args.len <= 1 {
println('usage: vget module [module] [module] [...]')
exit(2)
}
ensure_vmodules_dir_exist()
change_to_vmodules_dir()
2019-08-10 14:29:37 +02:00
mut errors := 0
names := os.args.slice(1, os.args.len)
for name in names {
modurl := url + '/jsmod/$name'
r := http.get(modurl) or { panic(err) }
if r.status_code == 404 {
println('Skipping module "$name", since $url reported that "$name" does not exist.')
errors++
continue
}
if r.status_code != 200 {
println('Skipping module "$name", since $url responded with $r.status_code http status code. Please try again later.')
errors++
continue
}
s := r.text
mod := json.decode(Mod, s) or {
2019-08-10 14:29:37 +02:00
errors++
println('Skipping module "$name", since its information is not in json format.')
2019-08-10 14:29:37 +02:00
continue
}
2019-08-10 14:29:37 +02:00
if( '' == mod.url || '' == mod.name ){
errors++
// a possible 404 error, which means a missing module?
println('Skipping module "$name", since it is missing name or url information.')
2019-08-10 14:29:37 +02:00
continue
}
final_module_path := get_vmodules_dir_path() + '/' + mod.name.replace('.', '/')
2019-08-10 14:29:37 +02:00
println('Installing module "$name" from $mod.url to $final_module_path ...')
_ = os.exec('git clone --depth=1 $mod.url $final_module_path') or {
2019-08-10 14:29:37 +02:00
errors++
println('Could not install module "$name" to "$final_module_path" .')
println('Error details: $err')
continue
}
2019-08-10 14:29:37 +02:00
}
if errors > 0 {
exit(1)
}
}