From e34f4acb220eff70272b27a4ff80fdedda1ccbd0 Mon Sep 17 00:00:00 2001 From: Nick O'Leary Date: Thu, 15 Oct 2020 16:21:28 +0100 Subject: [PATCH] Fix race condition in .config file migration Fixes #2724 --- .../lib/storage/localfilesystem/index.js | 37 ++++++++----------- 1 file changed, 15 insertions(+), 22 deletions(-) diff --git a/packages/node_modules/@node-red/runtime/lib/storage/localfilesystem/index.js b/packages/node_modules/@node-red/runtime/lib/storage/localfilesystem/index.js index 9cd89e972..024ae21e5 100644 --- a/packages/node_modules/@node-red/runtime/lib/storage/localfilesystem/index.js +++ b/packages/node_modules/@node-red/runtime/lib/storage/localfilesystem/index.js @@ -34,11 +34,9 @@ function checkForConfigFile(dir) { } var localfilesystem = { - init: function(_settings, runtime) { + init: async function(_settings, runtime) { settings = _settings; - var promises = []; - if (!settings.userDir) { if (checkForConfigFile(process.env.NODE_RED_HOME)) { settings.userDir = process.env.NODE_RED_HOME @@ -49,33 +47,28 @@ var localfilesystem = { } } if (!settings.readOnly) { - promises.push(fs.ensureDir(fspath.join(settings.userDir,"node_modules"))); + await fs.ensureDir(fspath.join(settings.userDir,"node_modules")); } sessions.init(settings); - promises.push(runtimeSettings.init(settings)); - promises.push(library.init(settings)); - promises.push(projects.init(settings, runtime)); + await runtimeSettings.init(settings); + await library.init(settings); + await projects.init(settings, runtime); var packageFile = fspath.join(settings.userDir,"package.json"); - var packagePromise = Promise.resolve(); if (!settings.readOnly) { - packagePromise = function() { - try { - fs.statSync(packageFile); - } catch(err) { - var defaultPackage = { - "name": "node-red-project", - "description": "A Node-RED Project", - "version": "0.0.1", - "private": true - }; - return util.writeFile(packageFile,JSON.stringify(defaultPackage,"",4)); - } - return true; + try { + fs.statSync(packageFile); + } catch(err) { + var defaultPackage = { + "name": "node-red-project", + "description": "A Node-RED Project", + "version": "0.0.1", + "private": true + }; + return util.writeFile(packageFile,JSON.stringify(defaultPackage,"",4)); } } - return Promise.all(promises).then(packagePromise); },