From 145f28ae453f8e31d05b06a1affdd6ac03794093 Mon Sep 17 00:00:00 2001 From: TekmonksGitHub Date: Wed, 29 May 2024 15:52:33 +0900 Subject: [PATCH] Fix rmrf --- backend/server/lib/utils.js | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/backend/server/lib/utils.js b/backend/server/lib/utils.js index 4f00e35..7b02926 100644 --- a/backend/server/lib/utils.js +++ b/backend/server/lib/utils.js @@ -76,18 +76,20 @@ async function rmrf(path) { else {LOG.error(`Can't access path for rmrf ${path}, error is ${err}.`); return false;} // can't operate on this path. } - if ((await fspromises.stat(path)).isFile()) { try{await fspromises.unlink(path); return true;} catch (err) { - LOG.error(`Error deleting path ${path}, error is ${err}.`); return false; } } + if ((await fspromises.stat(path)).isFile()) try{await fspromises.unlink(path); return true;} catch (err) { + if (err.code !== "ENOENT") {LOG.error(`Error deleting path ${path}, error is ${err}.`); return false; } } // multiprocessing can cause ENOENT if another processes deleted it midway const entries = await fspromises.readdir(path); for (const entry of entries) { const pathThis = `${path}/${entry}`, stats = await fspromises.stat(pathThis); - if (stats.isFile()) { try {await fspromises.unlink(pathThis);} catch (err) { - LOG.error(`Error deleting path ${pathThis}, error is ${err}.`); return false;} } - else if (stats.isDirectory()) if (!await rmrf(pathThis)) LOG.error(`Error deleting path ${path}.`); return false; + if (stats.isFile()) try {await fspromises.unlink(pathThis);} catch (err) { + if (err.code !== "ENOENT") {LOG.error(`Error deleting path ${pathThis}, error is ${err}.`); return false;} } + else if (stats.isDirectory()) { + const result = await rmrf(pathThis); if (!result) {LOG.error(`Error deleting path ${path}.`); return false;} + } } try {await fspromises.rmdir(path); return true;} catch (err) { - LOG.error(`Error deleting path ${pathThis}, error is ${err}.`); return false; } + if (err.code !== "ENOENT") {LOG.error(`Error deleting path ${pathThis}, error is ${err}.`); return false; }} } /**