summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author张超杰 <1098626505@qq.com>2020-04-27 04:27:24 +0800
committerGitHub <noreply@github.com>2020-04-26 16:27:24 -0400
commit49cad79fb1f908131db2a7918f97b6d2e6275f90 (patch)
treeb0640c08bf86f23735570cdc794233bb699b85f3
parent4f9bb11444ba7236f28ef1e722100b485c185c7c (diff)
fix(std/fs): move dest if not exists and overwrite (#4910)
-rw-r--r--std/fs/move.ts8
-rw-r--r--std/fs/move_test.ts40
2 files changed, 46 insertions, 2 deletions
diff --git a/std/fs/move.ts b/std/fs/move.ts
index ee9498fd3..cf1e49193 100644
--- a/std/fs/move.ts
+++ b/std/fs/move.ts
@@ -21,7 +21,9 @@ export async function move(
}
if (overwrite) {
- await Deno.remove(dest, { recursive: true });
+ if (await exists(dest)) {
+ await Deno.remove(dest, { recursive: true });
+ }
await Deno.rename(src, dest);
} else {
if (await exists(dest)) {
@@ -48,7 +50,9 @@ export function moveSync(
}
if (overwrite) {
- Deno.removeSync(dest, { recursive: true });
+ if (existsSync(dest)) {
+ Deno.removeSync(dest, { recursive: true });
+ }
Deno.renameSync(src, dest);
} else {
if (existsSync(dest)) {
diff --git a/std/fs/move_test.ts b/std/fs/move_test.ts
index 999b67cf0..ec899896c 100644
--- a/std/fs/move_test.ts
+++ b/std/fs/move_test.ts
@@ -42,6 +42,27 @@ Deno.test(async function moveDirectoryIfDestNotExists(): Promise<void> {
await Deno.remove(destDir);
});
+Deno.test(async function moveDirectoryIfDestNotExistsAndOverwrite(): Promise<
+ void
+> {
+ const srcDir = path.join(testdataDir, "move_test_src_2");
+ const destDir = path.join(testdataDir, "move_test_dest_2");
+
+ await Deno.mkdir(srcDir, { recursive: true });
+
+ // if dest directory not exist
+ await assertThrowsAsync(
+ async (): Promise<void> => {
+ await move(srcDir, destDir, { overwrite: true });
+ throw new Error("should not throw error");
+ },
+ Error,
+ "should not throw error"
+ );
+
+ await Deno.remove(destDir);
+});
+
Deno.test(async function moveFileIfSrcNotExists(): Promise<void> {
const srcFile = path.join(testdataDir, "move_test_src_3", "test.txt");
const destFile = path.join(testdataDir, "move_test_dest_3", "test.txt");
@@ -208,6 +229,25 @@ Deno.test(function moveSyncDirectoryIfDestNotExists(): void {
Deno.removeSync(destDir);
});
+Deno.test(function moveSyncDirectoryIfDestNotExistsAndOverwrite(): void {
+ const srcDir = path.join(testdataDir, "move_sync_test_src_2");
+ const destDir = path.join(testdataDir, "move_sync_test_dest_2");
+
+ Deno.mkdirSync(srcDir, { recursive: true });
+
+ // if dest directory not exist width overwrite
+ assertThrows(
+ (): void => {
+ moveSync(srcDir, destDir, { overwrite: true });
+ throw new Error("should not throw error");
+ },
+ Error,
+ "should not throw error"
+ );
+
+ Deno.removeSync(destDir);
+});
+
Deno.test(function moveSyncFileIfSrcNotExists(): void {
const srcFile = path.join(testdataDir, "move_sync_test_src_3", "test.txt");
const destFile = path.join(testdataDir, "move_sync_test_dest_3", "test.txt");