os: remove base_dir(); dir() and base() fixes
parent
324d547cdb
commit
4879661f5a
39
vlib/os/os.v
39
vlib/os/os.v
|
@ -642,21 +642,46 @@ pub fn file_ext(path string) string {
|
||||||
return path[pos..]
|
return path[pos..]
|
||||||
}
|
}
|
||||||
|
|
||||||
// dir will return the part of `path` before the last occurence of a `path_separator`.
|
// dir returns all but the last element of path, typically the path's directory.
|
||||||
|
// After dropping the final element, trailing slashes are removed.
|
||||||
|
// If the path is empty, dir returns ".". If the path consists entirely of separators,
|
||||||
|
// dir returns a single separator.
|
||||||
|
// The returned path does not end in a separator unless it is the root directory.
|
||||||
pub fn dir(path string) string {
|
pub fn dir(path string) string {
|
||||||
pos := path.last_index(path_separator) or {
|
if path == '' {
|
||||||
return '.'
|
return '.'
|
||||||
}
|
}
|
||||||
|
mut pos := path.last_index(path_separator) or {
|
||||||
|
return '.'
|
||||||
|
}
|
||||||
|
if path.ends_with(path_separator) {
|
||||||
|
pos--
|
||||||
|
}
|
||||||
return path[..pos]
|
return path[..pos]
|
||||||
}
|
}
|
||||||
|
|
||||||
// base_dir will return the base directory of `path`.
|
// base returns the last element of path.
|
||||||
pub fn base_dir(path string) string {
|
// Trailing path separators are removed before extracting the last element.
|
||||||
posx := path.last_index(path_separator) or {
|
// If the path is empty, base returns ".". If the path consists entirely of separators, base returns a
|
||||||
|
// single separator.
|
||||||
|
pub fn base(path string) string {
|
||||||
|
if path == '' {
|
||||||
|
return '.'
|
||||||
|
}
|
||||||
|
if path == path_separator {
|
||||||
|
return path_separator
|
||||||
|
}
|
||||||
|
if path.ends_with(path_separator) {
|
||||||
|
path2 := path[..path.len-1]
|
||||||
|
pos := path2.last_index(path_separator) or {
|
||||||
|
return path2.clone()
|
||||||
|
}
|
||||||
|
return path2[pos+1..]
|
||||||
|
}
|
||||||
|
pos := path.last_index(path_separator) or {
|
||||||
return path.clone()
|
return path.clone()
|
||||||
}
|
}
|
||||||
// NB: *without* terminating /
|
return path[pos+1..]
|
||||||
return path[..posx]
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// file_name will return all characters found after the last occurence of `path_separator`.
|
// file_name will return all characters found after the last occurence of `path_separator`.
|
||||||
|
|
|
@ -446,13 +446,15 @@ fn test_dir() {
|
||||||
assert os.dir('os') == '.'
|
assert os.dir('os') == '.'
|
||||||
}
|
}
|
||||||
|
|
||||||
fn test_basedir() {
|
fn test_base() {
|
||||||
$if windows {
|
$if windows {
|
||||||
assert os.base_dir('v\\vlib\\os') == 'v\\vlib'
|
assert os.base('v\\vlib\\os') == 'os'
|
||||||
|
assert os.base('v\\vlib\\os\\') == 'os'
|
||||||
} $else {
|
} $else {
|
||||||
assert os.base_dir('v/vlib/os') == 'v/vlib'
|
assert os.base('v/vlib/os') == 'os'
|
||||||
|
assert os.base('v/vlib/os/') == 'os'
|
||||||
}
|
}
|
||||||
assert os.base_dir('filename') == 'filename'
|
assert os.base('filename') == 'filename'
|
||||||
}
|
}
|
||||||
|
|
||||||
fn test_uname() {
|
fn test_uname() {
|
||||||
|
|
|
@ -27,7 +27,7 @@ fn get_vtmp_filename(base_file_name, postfix string) string {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn compile(command string, pref &pref.Preferences) {
|
pub fn compile(command string, pref &pref.Preferences) {
|
||||||
odir := os.base_dir(pref.out_name)
|
odir := os.dir(pref.out_name)
|
||||||
// When pref.out_name is just the name of an executable, i.e. `./v -o executable main.v`
|
// When pref.out_name is just the name of an executable, i.e. `./v -o executable main.v`
|
||||||
// without a folder component, just use the current folder instead:
|
// without a folder component, just use the current folder instead:
|
||||||
mut output_folder := odir
|
mut output_folder := odir
|
||||||
|
@ -55,9 +55,7 @@ pub fn compile(command string, pref &pref.Preferences) {
|
||||||
println('compilation took: ${util.bold(sw.elapsed().milliseconds().str())} ms')
|
println('compilation took: ${util.bold(sw.elapsed().milliseconds().str())} ms')
|
||||||
}
|
}
|
||||||
// running does not require the parsers anymore
|
// running does not require the parsers anymore
|
||||||
unsafe {
|
unsafe {b.myfree()}
|
||||||
b.myfree()
|
|
||||||
}
|
|
||||||
if pref.is_test || pref.is_run {
|
if pref.is_test || pref.is_run {
|
||||||
b.run_compiled_executable_and_exit()
|
b.run_compiled_executable_and_exit()
|
||||||
}
|
}
|
||||||
|
@ -68,9 +66,7 @@ pub fn compile(command string, pref &pref.Preferences) {
|
||||||
fn (mut b Builder) myfree() {
|
fn (mut b Builder) myfree() {
|
||||||
// for file in b.parsed_files {
|
// for file in b.parsed_files {
|
||||||
// }
|
// }
|
||||||
unsafe {
|
unsafe {b.parsed_files.free()}
|
||||||
b.parsed_files.free()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn (mut b Builder) run_compiled_executable_and_exit() {
|
fn (mut b Builder) run_compiled_executable_and_exit() {
|
||||||
|
@ -142,7 +138,7 @@ fn (mut v Builder) set_module_lookup_paths() {
|
||||||
// 3.2) search in ~/.vmodules/ (i.e. modules installed with vpm)
|
// 3.2) search in ~/.vmodules/ (i.e. modules installed with vpm)
|
||||||
v.module_search_paths = []
|
v.module_search_paths = []
|
||||||
if v.pref.is_test {
|
if v.pref.is_test {
|
||||||
v.module_search_paths << os.base_dir(v.compiled_dir) // pdir of _test.v
|
v.module_search_paths << os.dir(v.compiled_dir) // pdir of _test.v
|
||||||
}
|
}
|
||||||
v.module_search_paths << v.compiled_dir
|
v.module_search_paths << v.compiled_dir
|
||||||
x := os.join_path(v.compiled_dir, 'modules')
|
x := os.join_path(v.compiled_dir, 'modules')
|
||||||
|
@ -263,7 +259,7 @@ pub fn (v &Builder) get_user_files() []string {
|
||||||
v.log('> That brings in all other ordinary .v files in the same module too .')
|
v.log('> That brings in all other ordinary .v files in the same module too .')
|
||||||
}
|
}
|
||||||
user_files << single_test_v_file
|
user_files << single_test_v_file
|
||||||
dir = os.base_dir(single_test_v_file)
|
dir = os.dir(single_test_v_file)
|
||||||
}
|
}
|
||||||
does_exist := os.exists(dir)
|
does_exist := os.exists(dir)
|
||||||
if !does_exist {
|
if !does_exist {
|
||||||
|
|
|
@ -109,7 +109,7 @@ fn (mut mcache ModFileCacher) traverse(mfolder string) ([]string, ModFileAndFold
|
||||||
if mcache.check_for_stop(cfolder, files) {
|
if mcache.check_for_stop(cfolder, files) {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
cfolder = os.base_dir(cfolder)
|
cfolder = os.dir(cfolder)
|
||||||
folders_so_far << cfolder
|
folders_so_far << cfolder
|
||||||
levels++
|
levels++
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue