Compare commits

...

2 Commits

Author SHA1 Message Date
Electroid
8320ad1e3c bun run zig-format 2025-03-13 17:32:22 +00:00
Ashcon Partovi
5d1a74bd8f Fix fs.rm() not deleting empty directory when recursive is false 2025-03-13 10:29:51 -07:00
2 changed files with 31 additions and 3 deletions

View File

@@ -5685,9 +5685,7 @@ pub const NodeFS = struct {
bun.handleErrorReturnTrace(err1, @errorReturnTrace());
// empircally, it seems to return AccessDenied when the
// file is actually a directory on macOS.
if (args.recursive and
(err1 == error.IsDir or err1 == error.NotDir or err1 == error.AccessDenied))
{
if (err1 == error.IsDir or err1 == error.NotDir or err1 == error.AccessDenied) {
std.posix.rmdirZ(dest) catch |err2| {
bun.handleErrorReturnTrace(err2, @errorReturnTrace());
const code: E = switch (err2) {

View File

@@ -0,0 +1,30 @@
import { describe, test, expect } from "bun:test";
import { existsSync, rmSync, rmdirSync } from "node:fs";
import { rm } from "node:fs/promises";
import { tmpdirSync } from "harness";
describe("rm() with empty directories", () => {
test("rmSync(): recursive false should remove empty directory", () => {
const dir = tmpdirSync("rmSync-false");
rmSync(dir, { recursive: false });
expect(existsSync(dir)).toBe(false);
});
test("rm(): recursive false should remove empty directory", async () => {
const dir = tmpdirSync("rm-false");
await rm(dir, { recursive: false });
expect(existsSync(dir)).toBe(false);
});
test("rmSync(): recursive true should remove empty directory", () => {
const dir = tmpdirSync("rmSync-true");
rmSync(dir, { recursive: true });
expect(existsSync(dir)).toBe(false);
});
test("rmdirSync(): should remove empty directory", () => {
const dir = tmpdirSync("rmdir");
rmdirSync(dir);
expect(existsSync(dir)).toBe(false);
});
});