v.util: make mod_path_to_full_name more robust
parent
894da4b40b
commit
b11ce91141
|
@ -3,7 +3,7 @@
|
||||||
// that can be found in the LICENSE file.
|
// that can be found in the LICENSE file.
|
||||||
module main
|
module main
|
||||||
|
|
||||||
import help
|
import cmd.v.help
|
||||||
import os
|
import os
|
||||||
import term
|
import term
|
||||||
import v.pref
|
import v.pref
|
||||||
|
|
|
@ -113,6 +113,7 @@ fn mod_path_to_full_name(pref &pref.Preferences, mod string, path string) ?strin
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// start_info := '> in_vmod_path: ${in_vmod_path:-6} | mod: ${mod:-21} | path: ${path:-58}'
|
||||||
path_parts := path.split(os.path_separator)
|
path_parts := path.split(os.path_separator)
|
||||||
mod_path := mod.replace('.', os.path_separator)
|
mod_path := mod.replace('.', os.path_separator)
|
||||||
// go back through each parent in path_parts and join with `mod_path` to see the dir exists
|
// go back through each parent in path_parts and join with `mod_path` to see the dir exists
|
||||||
|
@ -128,6 +129,7 @@ fn mod_path_to_full_name(pref &pref.Preferences, mod string, path string) ?strin
|
||||||
// we reached a vmod folder
|
// we reached a vmod folder
|
||||||
if path_part in vmod_folders {
|
if path_part in vmod_folders {
|
||||||
mod_full_name := try_path.split(os.path_separator)[j + 1..].join('.')
|
mod_full_name := try_path.split(os.path_separator)[j + 1..].join('.')
|
||||||
|
// eprintln('$start_info >>>> mod_full_name 1: $mod_full_name , in vmod_folders')
|
||||||
return mod_full_name
|
return mod_full_name
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -139,19 +141,38 @@ fn mod_path_to_full_name(pref &pref.Preferences, mod string, path string) ?strin
|
||||||
mut last_v_mod := -1
|
mut last_v_mod := -1
|
||||||
for j := try_path_parts.len; j > 0; j-- {
|
for j := try_path_parts.len; j > 0; j-- {
|
||||||
parent := try_path_parts[0..j].join(os.path_separator)
|
parent := try_path_parts[0..j].join(os.path_separator)
|
||||||
|
// eprintln(' >>> i: $i | try_path: $try_path | trying parent $j: $parent')
|
||||||
if ls := os.ls(parent) {
|
if ls := os.ls(parent) {
|
||||||
|
mut found_stop := false
|
||||||
|
for x in ls {
|
||||||
|
if x in ['.git', '.hg', '.svn', '.v.mod.stop'] {
|
||||||
|
found_stop = true
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
// currently CI clones some modules into the v repo to test, the condition
|
// currently CI clones some modules into the v repo to test, the condition
|
||||||
// after `'v.mod' in ls` can be removed once a proper solution is added
|
// after `'v.mod' in ls` can be removed once a proper solution is added
|
||||||
if 'v.mod' in ls
|
if 'v.mod' in ls
|
||||||
&& (try_path_parts.len > i && try_path_parts[i] != 'v' && 'vlib' !in ls) {
|
&& (try_path_parts.len > i && try_path_parts[i] != 'v' && 'vlib' !in ls) {
|
||||||
|
// eprintln('>>> v.mod found')
|
||||||
last_v_mod = j
|
last_v_mod = j
|
||||||
}
|
}
|
||||||
|
if found_stop {
|
||||||
|
if last_v_mod > -1 {
|
||||||
|
mod_full_name := try_path_parts[last_v_mod..].join('.')
|
||||||
|
// eprintln('$start_info >>>> mod_full_name 2: $mod_full_name , .v.mod.stop reached in folder: $parent, last_v_mod: $last_v_mod')
|
||||||
|
return mod_full_name
|
||||||
|
}
|
||||||
|
mod_full_name := try_path_parts[j..].join('.')
|
||||||
|
return mod_full_name
|
||||||
|
}
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
if last_v_mod > -1 {
|
if last_v_mod > -1 {
|
||||||
mod_full_name := try_path_parts[last_v_mod..].join('.')
|
mod_full_name := try_path_parts[last_v_mod..].join('.')
|
||||||
|
// eprintln('$start_info >>>> mod_full_name 3: $mod_full_name , last_v_mod was $last_v_mod')
|
||||||
return mod_full_name
|
return mod_full_name
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -161,9 +182,11 @@ fn mod_path_to_full_name(pref &pref.Preferences, mod string, path string) ?strin
|
||||||
rel_mod_path := path.replace(pref.path.all_before_last(os.path_separator) +
|
rel_mod_path := path.replace(pref.path.all_before_last(os.path_separator) +
|
||||||
os.path_separator, '')
|
os.path_separator, '')
|
||||||
if rel_mod_path != path {
|
if rel_mod_path != path {
|
||||||
full_mod_name := rel_mod_path.replace(os.path_separator, '.')
|
mod_full_name := rel_mod_path.replace(os.path_separator, '.')
|
||||||
return full_mod_name
|
// eprintln('$start_info >>>> mod_full_name 4: $mod_full_name, abs_path: $pref.path')
|
||||||
|
return mod_full_name
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// eprintln('$start_info >>>> error module not found')
|
||||||
return error('module not found')
|
return error('module not found')
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue