diff --git a/.travis.yml b/.travis.yml index 6eca128215..703a2a0747 100644 --- a/.travis.yml +++ b/.travis.yml @@ -87,3 +87,10 @@ script: git clone https://github.com/vlang/vid cd vid && ../v -debug -o vid . fi + - | + if [[ "${TRAVIS_OS_NAME}" != "windows" ]]; then + v install nedpals.args + # ensure nedpals.args is installed + [[ -d ~/.vmodules/nedpals/args]] + git remote -v | grep 'https://github.com/nedpals/v-args (fetch)' + fi diff --git a/tools/vget.v b/tools/vget.v index c2a4a54a2e..3cba94489f 100644 --- a/tools/vget.v +++ b/tools/vget.v @@ -1,62 +1,76 @@ module main import ( - http - os + http + os json -) +) const ( - //url = 'http://localhost:8089' - url = 'https://vpm.best' -) + //url = 'http://localhost:8089' + url = 'https://vpm.best' +) struct Mod { - id int - name string + id int + name string url string - nr_downloads int + nr_downloads int +} + +fn get_vmodules_dir_path() string { + home := os.home_dir() + + return '${home}.vmodules' +} + +fn ensure_vmodules_dir_exist() { + home_vmodules := get_vmodules_dir_path() + + 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] [...]') - return - } - - home := os.home_dir() - home_vmodules := '${home}.vmodules' - if !os.dir_exists( home_vmodules ) { - println('Creating $home_vmodules/ ...') - os.mkdir(home_vmodules) + exit(2) } - os.chdir(home_vmodules) + + ensure_vmodules_dir_exist() + change_to_vmodules_dir() 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 { + } + + 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 { errors++ println('Skipping module "$name", since its information is not in json format.') continue } - + if( '' == mod.url || '' == mod.name ){ errors++ // a possible 404 error, which means a missing module? @@ -64,7 +78,7 @@ fn main() { continue } - final_module_path := '$home_vmodules/' + mod.name.replace('.', '/') + final_module_path := get_vmodules_dir_path() + '/' + mod.name.replace('.', '/') println('Installing module "$name" from $mod.url to $final_module_path ...') _ = os.exec('git clone --depth=1 $mod.url $final_module_path') or {