mirror of
https://github.com/denoland/deno.git
synced 2024-11-21 15:04:11 -05:00
fix(node/fs): copyFile with COPYFILE_EXCL
should not throw if the destination doesn't exist (#26360)
Fixes #26313. We were checking for the NotFound error, but still calling the callback with the error / throwing.
This commit is contained in:
parent
eca83fc9b4
commit
9fde5cb5e0
2 changed files with 24 additions and 3 deletions
|
@ -53,8 +53,9 @@ export function copyFile(
|
|||
}, (e) => {
|
||||
if (e instanceof Deno.errors.NotFound) {
|
||||
Deno.copyFile(srcStr, destStr).then(() => cb(null), cb);
|
||||
}
|
||||
} else {
|
||||
cb(e);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
Deno.copyFile(srcStr, destStr).then(() => cb(null), cb);
|
||||
|
@ -83,9 +84,10 @@ export function copyFileSync(
|
|||
} catch (e) {
|
||||
if (e instanceof Deno.errors.NotFound) {
|
||||
Deno.copyFileSync(srcStr, destStr);
|
||||
}
|
||||
} else {
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
Deno.copyFileSync(srcStr, destStr);
|
||||
}
|
||||
|
|
|
@ -1,11 +1,13 @@
|
|||
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
|
||||
|
||||
import { assert, assertEquals, assertThrows } from "@std/assert";
|
||||
/// <reference lib="deno.ns" />
|
||||
import { assert, assertEquals, assertRejects, assertThrows } from "@std/assert";
|
||||
import { join } from "node:path";
|
||||
import { tmpdir } from "node:os";
|
||||
import {
|
||||
closeSync,
|
||||
constants,
|
||||
copyFileSync,
|
||||
createWriteStream,
|
||||
existsSync,
|
||||
lstatSync,
|
||||
|
@ -20,6 +22,7 @@ import {
|
|||
} from "node:fs";
|
||||
import {
|
||||
constants as fsPromiseConstants,
|
||||
copyFile,
|
||||
cp,
|
||||
FileHandle,
|
||||
open,
|
||||
|
@ -212,3 +215,19 @@ Deno.test("[node/fs] readSync works", () => {
|
|||
assertEquals(bytesRead, 12);
|
||||
closeSync(fd!);
|
||||
});
|
||||
|
||||
Deno.test("[node/fs] copyFile COPYFILE_EXCL works", async () => {
|
||||
const dir = mkdtempSync(join(tmpdir(), "foo-"));
|
||||
const src = join(dir, "src.txt");
|
||||
const dest = join(dir, "dest.txt");
|
||||
await writeFile(src, "");
|
||||
await copyFile(src, dest, fsPromiseConstants.COPYFILE_EXCL);
|
||||
assert(existsSync(dest));
|
||||
assertRejects(() => copyFile(src, dest, fsPromiseConstants.COPYFILE_EXCL));
|
||||
const dest2 = join(dir, "dest2.txt");
|
||||
copyFileSync(src, dest2, fsPromiseConstants.COPYFILE_EXCL);
|
||||
assert(existsSync(dest2));
|
||||
assertThrows(() =>
|
||||
copyFileSync(src, dest2, fsPromiseConstants.COPYFILE_EXCL)
|
||||
);
|
||||
});
|
||||
|
|
Loading…
Reference in a new issue