diff --git a/vlib/os/os.v b/vlib/os/os.v index 3399c3ecff..fe087725c6 100644 --- a/vlib/os/os.v +++ b/vlib/os/os.v @@ -142,8 +142,9 @@ pub fn rmdir_all(path string) ? { fullpath := join_path(path, item) if is_dir(fullpath) { rmdir_all(fullpath) or { ret_err = err.msg } + } else { + rm(fullpath) or { ret_err = err.msg } } - rm(fullpath) or { ret_err = err.msg } } rmdir(path) or { ret_err = err.msg } if ret_err.len > 0 { diff --git a/vlib/os/os_test.v b/vlib/os/os_test.v index a603ae72c3..6f76ade136 100644 --- a/vlib/os/os_test.v +++ b/vlib/os/os_test.v @@ -399,6 +399,21 @@ fn test_join() { } } +fn test_rmdir_all() { + mut dirs := ['some/dir', 'some/.hidden/directory'] + $if windows { + for mut d in dirs { + d = d.replace('/', '\\') + } + } + for d in dirs { + os.mkdir_all(d) or { panic(err) } + assert os.is_dir(d) + } + os.rmdir_all('some') or { assert false } + assert !os.exists('some') +} + fn test_dir() { $if windows { assert os.dir('C:\\a\\b\\c') == 'C:\\a\\b'