From efa49bfbb7cb0184ac98f3a5d022ff376bb30f35 Mon Sep 17 00:00:00 2001 From: Larpon Date: Fri, 4 Sep 2020 13:08:47 +0200 Subject: [PATCH] os: make behave more like Unix "mv" command (#6300) --- vlib/os/os.v | 8 ++++++-- vlib/os/os_test.v | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+), 2 deletions(-) diff --git a/vlib/os/os.v b/vlib/os/os.v index 32226c2547..efb144a822 100644 --- a/vlib/os/os.v +++ b/vlib/os/os.v @@ -58,10 +58,14 @@ pub fn file_size(path string) int { // mv moves files or folders from `src` to `dst`. pub fn mv(src, dst string) { + mut rdst := dst + if is_dir(rdst) { + rdst = join_path(rdst,file_name(src.trim_right(path_separator))) + } $if windows { - C._wrename(src.to_wide(), dst.to_wide()) + C._wrename(src.to_wide(), rdst.to_wide()) } $else { - C.rename(charptr(src.str), charptr(dst.str)) + C.rename(charptr(src.str), charptr(rdst.str)) } } diff --git a/vlib/os/os_test.v b/vlib/os/os_test.v index d87efa04d2..92d3782a76 100644 --- a/vlib/os/os_test.v +++ b/vlib/os/os_test.v @@ -156,6 +156,52 @@ fn test_cp() { os.rm(new_file_name) } +/* +fn test_mv() { + work_dir := os.join_path(os.temp_dir(),'v','mv_test') + if os.exists(work_dir) { + os.rmdir_all(work_dir) + } + mkdir_all(work_dir) + // Setup test files + tfile1 := os.join_path(work_dir,'file') + tfile2 := os.join_path(work_dir,'file.test') + tfile3 := os.join_path(work_dir,'file.3') + tfile_content := 'temporary file' + os.write_file(tfile1, tfile_content) + os.write_file(tfile2, tfile_content) + // Setup test dirs + tdir1 := os.join_path(work_dir,'dir') + tdir2 := os.join_path(work_dir,'dir2') + tdir3 := os.join_path(work_dir,'dir3') + mkdir(tdir1) + mkdir(tdir2) + // Move file with no extension to dir + os.mv(tfile1,tdir1) + mut expected := os.join_path(tdir1,'file') + assert os.exists(expected) && !is_dir(expected) == true + // Move dir with contents to other dir + os.mv(tdir1,tdir2) + expected = os.join_path(tdir2,'dir') + assert os.exists(expected) && is_dir(expected) == true + expected = os.join_path(tdir2,'dir','file') + assert os.exists(expected) && !is_dir(expected) == true + // Move dir with contents to other dir (by renaming) + os.mv(os.join_path(tdir2,'dir'),tdir3) + expected = tdir3 + assert os.exists(expected) && is_dir(expected) == true + assert os.is_dir_empty(tdir2) == true + // Move file with extension to dir + os.mv(tfile2,tdir2) + expected = os.join_path(tdir2,'file.test') + assert os.exists(expected) && !is_dir(expected) == true + // Move file to dir (by renaming) + os.mv(os.join_path(tdir2,'file.test'),tfile3) + expected = tfile3 + assert os.exists(expected) && !is_dir(expected) == true +} +*/ + fn test_cp_r() { // fileX -> dir/fileX // NB: clean up of the files happens inside the cleanup_leftovers function