diff --git a/vlib/os/os.v b/vlib/os/os.v index b55ebdef31..d2a6de63a1 100644 --- a/vlib/os/os.v +++ b/vlib/os/os.v @@ -62,7 +62,9 @@ pub fn cp_all(src string, dst string, overwrite bool) ? { sp := join_path(source_path, file) dp := join_path(dest_path, file) if is_dir(sp) { - mkdir(dp) ? + if !exists(dp) { + mkdir(dp) ? + } } cp_all(sp, dp, overwrite) or { rmdir(dp) or { return error(err) } diff --git a/vlib/os/os_test.v b/vlib/os/os_test.v index 430e750e30..906964db88 100644 --- a/vlib/os/os_test.v +++ b/vlib/os/os_test.v @@ -250,7 +250,7 @@ fn test_mv() { assert os.exists(expected) && !is_dir(expected) == true } -fn test_cp_r() { +fn test_cp_all() { // fileX -> dir/fileX // NB: clean up of the files happens inside the cleanup_leftovers function os.write_file('ex1.txt', 'wow!') or { panic(err) } @@ -267,6 +267,8 @@ fn test_cp_r() { assert old2 == new2 // recurring on dir -> local dir os.cp_all('ex', './', true) or { panic(err) } + // regression test for executive runs with overwrite := true + os.cp_all('ex', './', true) or { panic(err) } } fn test_tmpdir() { @@ -274,7 +276,7 @@ fn test_tmpdir() { assert t.len > 0 assert os.is_dir(t) tfile := t + os.path_separator + 'tmpfile.txt' - os.rm(tfile) or { } // just in case + os.rm(tfile) or { } // just in case tfile_content := 'this is a temporary file' os.write_file(tfile, tfile_content) or { panic(err) } tfile_content_read := os.read_file(tfile) or { panic(err) }