◐ Shell
clean mode source ↗

test: execute shell directly for refresh() · nodejs/node@de77371

@@ -5,17 +5,28 @@ const fs = require('fs');

55

const path = require('path');

66

const { pathToFileURL } = require('url');

77

const { isMainThread } = require('worker_threads');

8+

const isUnixLike = process.platform !== 'win32';

9+

let escapePOSIXShell;

810911

function rmSync(pathname, useSpawn) {

1012

if (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 {

2031

fs.rmSync(pathname, { maxRetries: 3, recursive: true, force: true });

2132

}