vpm: fix `v install GIT_REPO_URL`

pull/13185/head
Delyan Angelov 2022-01-15 16:37:54 +02:00
parent 57563599a7
commit d0bb810b42
No known key found for this signature in database
GPG Key ID: 66886C0F12D595ED
1 changed files with 37 additions and 26 deletions

View File

@ -140,7 +140,6 @@ fn vpm_search(keywords []string) {
joined := search_keys.join(', ')
mut index := 0
for mod in modules {
// TODO for some reason .filter results in substr error, so do it manually
for k in search_keys {
if !mod.contains(k) {
continue
@ -209,7 +208,7 @@ fn vpm_install_from_vpm(module_names []string) {
vpm_update([name])
continue
}
println('Installing module "$name" from $mod.url to $final_module_path ...')
println('Installing module "$name" from "$mod.url" to "$final_module_path" ...')
vcs_install_cmd := supported_vcs_install_cmds[vcs]
cmd := '$vcs_install_cmd "$mod.url" "$final_module_path"'
verbose_println(' command: $cmd')
@ -250,7 +249,7 @@ fn vpm_install_from_vcs(module_names []string, vcs_key string) {
first_cut_pos := url.last_index('/') or {
errors++
println('Errors while retrieving name for module $url:')
println('Errors while retrieving name for module "$url" :')
println(err)
continue
}
@ -259,7 +258,7 @@ fn vpm_install_from_vcs(module_names []string, vcs_key string) {
second_cut_pos := url.substr(0, first_cut_pos).last_index('/') or {
errors++
println('Errors while retrieving name for module $url:')
println('Errors while retrieving name for module "$url" :')
println(err)
continue
}
@ -277,7 +276,7 @@ fn vpm_install_from_vcs(module_names []string, vcs_key string) {
println('VPM needs `$vcs_key` to be installed.')
continue
}
println('Installing module "$name" from $url to $final_module_path ...')
println('Installing module "$name" from "$url" to "$final_module_path" ...')
vcs_install_cmd := supported_vcs_install_cmds[vcs_key]
cmd := '$vcs_install_cmd "$url" "$final_module_path"'
verbose_println(' command: $cmd')
@ -294,7 +293,7 @@ fn vpm_install_from_vcs(module_names []string, vcs_key string) {
vmod := parse_vmod(data)
mod_path := os.real_path(os.join_path(settings.vmodules_path, vmod.name.replace('.',
os.path_separator)))
println('Relocating module from "$name" to "$vmod.name" ( $mod_path ) ...')
println('Relocating module from "$name" to "$vmod.name" ( "$mod_path" ) ...')
if os.exists(mod_path) {
println('Warning module "$mod_path" already exsits!')
println('Removing module "$mod_path" ...')
@ -359,11 +358,14 @@ fn vpm_update(m []string) {
module_names = get_installed_modules()
}
mut errors := 0
for name in module_names {
final_module_path := valid_final_path_of_existing_module(name) or { continue }
for modulename in module_names {
mut zname := modulename
if mod := get_mod_by_url(modulename) {
zname = mod.name
}
final_module_path := valid_final_path_of_existing_module(modulename) or { continue }
os.chdir(final_module_path) or {}
println('Updating module "$name"...')
verbose_println(' work folder: $final_module_path')
println('Updating module "$zname" in "$final_module_path" ...')
vcs := vcs_used_in_dir(final_module_path) or { continue }
if !ensure_vcs_is_installed(vcs[0]) {
errors++
@ -375,13 +377,13 @@ fn vpm_update(m []string) {
vcs_res := os.execute('$vcs_cmd')
if vcs_res.exit_code != 0 {
errors++
println('Failed updating module "$name".')
println('Failed updating module "$zname" in "$final_module_path" .')
print_failed_cmd(vcs_cmd, vcs_res)
continue
} else {
verbose_println(' $vcs_res.output.trim_space()')
}
resolve_dependencies(name, final_module_path, module_names)
resolve_dependencies(modulename, final_module_path, module_names)
}
if errors > 0 {
exit(1)
@ -402,7 +404,7 @@ fn get_outdated() ?[]string {
if res.exit_code < 0 {
verbose_println('Error command: $step')
verbose_println('Error details:\n$res.output')
return error('Error while checking latest commits for "$name".')
return error('Error while checking latest commits for "$name" .')
}
if vcs[0] == 'hg' {
if res.exit_code == 1 {
@ -463,7 +465,7 @@ fn vpm_remove(module_names []string) {
}
for name in module_names {
final_module_path := valid_final_path_of_existing_module(name) or { continue }
println('Removing module "$name"...')
println('Removing module "$name" ...')
verbose_println('removing folder $final_module_path')
os.rmdir_all(final_module_path) or {
verbose_println('error while removing "$final_module_path": $err.msg')
@ -483,7 +485,11 @@ fn vpm_remove(module_names []string) {
}
}
fn valid_final_path_of_existing_module(name string) ?string {
fn valid_final_path_of_existing_module(modulename string) ?string {
mut name := modulename
if mod := get_mod_by_url(name) {
name = mod.name
}
mod_name_as_path := name.replace('.', os.path_separator).replace('-', '_').to_lower()
name_of_vmodules_folder := os.join_path(settings.vmodules_path, mod_name_as_path)
final_module_path := os.real_path(name_of_vmodules_folder)
@ -504,7 +510,7 @@ fn valid_final_path_of_existing_module(name string) ?string {
fn ensure_vmodules_dir_exist() {
if !os.is_dir(settings.vmodules_path) {
println('Creating $settings.vmodules_path/ ...')
println('Creating "$settings.vmodules_path/" ...')
os.mkdir(settings.vmodules_path) or { panic(err) }
}
}
@ -601,7 +607,7 @@ fn resolve_dependencies(name string, module_path string, module_names []string)
}
}
if deps.len > 0 {
println('Resolving $deps.len dependencies for module "$name"...')
println('Resolving $deps.len dependencies for module "$name" ...')
verbose_println('Found dependencies: $deps')
vpm_install(deps, Source.vpm)
}
@ -663,39 +669,44 @@ fn verbose_println(s string) {
}
}
fn get_module_meta_info(name string) ?Mod {
mut errors := []string{}
fn get_mod_by_url(name string) ?Mod {
if purl := urllib.parse(name) {
verbose_println('purl: $purl')
mod := Mod{
name: purl.path.trim_left('/').trim_right('/')
name: purl.path.trim_left('/').trim_right('/').replace('/', '.')
url: name
}
verbose_println(mod.str())
return mod
}
return error('invalid url: $name')
}
fn get_module_meta_info(name string) ?Mod {
if mod := get_mod_by_url(name) {
return mod
}
mut errors := []string{}
for server_url in default_vpm_server_urls {
modurl := server_url + '/jsmod/$name'
verbose_println('Retrieving module metadata from: $modurl ...')
verbose_println('Retrieving module metadata from: "$modurl" ...')
r := http.get(modurl) or {
errors << 'Http server did not respond to our request for ${modurl}.'
errors << 'Http server did not respond to our request for "${modurl}" .'
errors << 'Error details: $err'
continue
}
if r.status_code == 404 || r.text.trim_space() == '404' {
errors << 'Skipping module "$name", since $server_url reported that "$name" does not exist.'
errors << 'Skipping module "$name", since "$server_url" reported that "$name" does not exist.'
continue
}
if r.status_code != 200 {
errors << 'Skipping module "$name", since $server_url responded with $r.status_code http status code. Please try again later.'
errors << 'Skipping module "$name", since "$server_url" responded with $r.status_code http status code. Please try again later.'
continue
}
s := r.text
if s.len > 0 && s[0] != `{` {
errors << 'Invalid json data'
errors << s.trim_space().limit(100) + '...'
errors << s.trim_space().limit(100) + ' ...'
continue
}
mod := json.decode(Mod, s) or {