test: execute shell directly for refresh() · nodejs/node@de77371
@@ -5,17 +5,28 @@ const fs = require('fs');
55const path = require('path');
66const { pathToFileURL } = require('url');
77const { isMainThread } = require('worker_threads');
8+const isUnixLike = process.platform !== 'win32';
9+let escapePOSIXShell;
810911function rmSync(pathname, useSpawn) {
1012if (useSpawn) {
11-const escapedPath = pathname.replaceAll('\\', '\\\\');
12-spawnSync(
13-process.execPath,
14-[
15-'-e',
16-`require("fs").rmSync("${escapedPath}", { maxRetries: 3, recursive: true, force: true });`,
17-],
18-);
13+if (isUnixLike) {
14+escapePOSIXShell ??= require('./index.js').escapePOSIXShell;
15+for (let i = 0; i < 3; i++) {
16+const { status } = spawnSync(...escapePOSIXShell`rm -rf "${pathname}"`);
17+if (status === 0) {
18+break;
19+}
20+}
21+} else {
22+spawnSync(
23+process.execPath,
24+[
25+'-e',
26+`fs.rmSync(${JSON.stringify(pathname)}, { maxRetries: 3, recursive: true, force: true });`,
27+],
28+);
29+}
1930} else {
2031fs.rmSync(pathname, { maxRetries: 3, recursive: true, force: true });
2132}