os: fix cp_all mkdir panic (#8680)

pull/8692/head
Larpon 2021-02-12 00:55:36 +01:00 committed by GitHub
parent 375efb0953
commit 65f2420516
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 7 additions and 3 deletions

View File

@ -62,8 +62,10 @@ pub fn cp_all(src string, dst string, overwrite bool) ? {
sp := join_path(source_path, file) sp := join_path(source_path, file)
dp := join_path(dest_path, file) dp := join_path(dest_path, file)
if is_dir(sp) { if is_dir(sp) {
if !exists(dp) {
mkdir(dp) ? mkdir(dp) ?
} }
}
cp_all(sp, dp, overwrite) or { cp_all(sp, dp, overwrite) or {
rmdir(dp) or { return error(err) } rmdir(dp) or { return error(err) }
return error(err) return error(err)

View File

@ -250,7 +250,7 @@ fn test_mv() {
assert os.exists(expected) && !is_dir(expected) == true assert os.exists(expected) && !is_dir(expected) == true
} }
fn test_cp_r() { fn test_cp_all() {
// fileX -> dir/fileX // fileX -> dir/fileX
// NB: clean up of the files happens inside the cleanup_leftovers function // NB: clean up of the files happens inside the cleanup_leftovers function
os.write_file('ex1.txt', 'wow!') or { panic(err) } os.write_file('ex1.txt', 'wow!') or { panic(err) }
@ -267,6 +267,8 @@ fn test_cp_r() {
assert old2 == new2 assert old2 == new2
// recurring on dir -> local dir // recurring on dir -> local dir
os.cp_all('ex', './', true) or { panic(err) } 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() { fn test_tmpdir() {