From f78a71e8ed170b6cb81f939c3648bdf66cbeddb1 Mon Sep 17 00:00:00 2001 From: Nick O'Leary Date: Thu, 26 Feb 2015 11:30:20 +0000 Subject: [PATCH] Load flows file from userDir when appropriate --- red.js | 18 +++++--- red/storage/localfilesystem.js | 82 ++++++++++++++++++++-------------- 2 files changed, 61 insertions(+), 39 deletions(-) diff --git a/red.js b/red.js index 69032b73d..95a238e61 100755 --- a/red.js +++ b/red.js @@ -70,18 +70,24 @@ if (parsedArgs.settings) { // User-specified userDir that contains a settings.js settingsFile = path.join(parsedArgs.userDir,"settings.js"); } else { - var userSettingsFile = path.join(process.env.HOME || process.env.HOMEPATH || process.env.USERPROFILE,".node-red","settings.js"); - if (fs.existsSync(userSettingsFile)) { - // $HOME/.node-red/settings.js exists - settingsFile = userSettingsFile; + if (fs.existsSync(path.join(process.env.NODE_RED_HOME,".config.json"))) { + // NODE_RED_HOME contains user data - use its settings.js + settingsFile = path.join(process.env.NODE_RED_HOME,"settings.js"); } else { - // Use default settings.js - settingsFile = "./settings"; + var userSettingsFile = path.join(process.env.HOME || process.env.HOMEPATH || process.env.USERPROFILE,".node-red","settings.js"); + if (fs.existsSync(userSettingsFile)) { + // $HOME/.node-red/settings.js exists + settingsFile = userSettingsFile; + } else { + // Use default settings.js + settingsFile = "./settings"; + } } } try { var settings = require(settingsFile); + settings.settingsFile = settingsFile; } catch(err) { if (err.code == 'MODULE_NOT_FOUND') { console.log("Unable to load settings file: "+settingsFile); diff --git a/red/storage/localfilesystem.js b/red/storage/localfilesystem.js index e8af0e368..e73fd0087 100644 --- a/red/storage/localfilesystem.js +++ b/red/storage/localfilesystem.js @@ -158,7 +158,23 @@ var localfilesystem = { if (settings.flowFile) { flowsFile = settings.flowFile; - flowsFullPath = flowsFile; + + if (flowsFile[0] == "/") { + // Absolute path + flowsFullPath = flowsFile; + } else if (flowsFile.substring(0,2) === "./") { + // Relative to cwd + flowsFullPath = fspath.join(process.cwd(),flowsFile); + } else { + if (fs.existsSync(fspath.join(process.cwd(),flowsFile))) { + // Found in cwd + flowsFullPath = fspath.join(process.cwd(),flowsFile); + } else { + // Use userDir + flowsFullPath = fspath.join(settings.userDir,flowsFile); + } + } + } else { flowsFile = 'flows_'+require('os').hostname()+'.json'; flowsFullPath = fspath.join(settings.userDir,flowsFile); @@ -170,7 +186,7 @@ var localfilesystem = { credentialsFile = fspath.join(settings.userDir,ffBase+"_cred"+ffExt); credentialsFileBackup = fspath.join(settings.userDir,"."+ffBase+"_cred"+ffExt+".backup"); - + oldCredentialsFile = fspath.join(settings.userDir,"credentials.json"); flowsFileBackup = fspath.join(ffDir,"."+ffName+".backup"); @@ -186,20 +202,20 @@ var localfilesystem = { }, getFlows: function() { - var defer = when.defer(); - log.info("User Directory : "+settings.userDir); - fs.exists(flowsFullPath, function(exists) { - if (exists) { - log.info("Loading flows : "+flowsFile); - defer.resolve(nodeFn.call(fs.readFile,flowsFullPath,'utf8').then(function(data) { - return JSON.parse(data); - })); - } else { - log.info("Creating new flows file : "+flowsFile ); - defer.resolve([]); - } + return when.promise(function(resolve) { + log.info("User Directory : "+settings.userDir); + log.info("Flows file : "+flowsFullPath); + fs.exists(flowsFullPath, function(exists) { + if (exists) { + resolve(nodeFn.call(fs.readFile,flowsFullPath,'utf8').then(function(data) { + return JSON.parse(data); + })); + } else { + log.info("Creating new flows file"); + resolve([]); + } + }); }); - return defer.promise; }, saveFlows: function(flows) { @@ -218,25 +234,25 @@ var localfilesystem = { }, getCredentials: function() { - var defer = when.defer(); - fs.exists(credentialsFile, function(exists) { - if (exists) { - defer.resolve(nodeFn.call(fs.readFile, credentialsFile, 'utf8').then(function(data) { - return JSON.parse(data) - })); - } else { - fs.exists(oldCredentialsFile, function(exists) { - if (exists) { - defer.resolve(nodeFn.call(fs.readFile, oldCredentialsFile, 'utf8').then(function(data) { - return JSON.parse(data) - })); - } else { - defer.resolve({}); - } - }); - } + return when.promise(function(resolve) { + fs.exists(credentialsFile, function(exists) { + if (exists) { + resolve(nodeFn.call(fs.readFile, credentialsFile, 'utf8').then(function(data) { + return JSON.parse(data) + })); + } else { + fs.exists(oldCredentialsFile, function(exists) { + if (exists) { + resolve(nodeFn.call(fs.readFile, oldCredentialsFile, 'utf8').then(function(data) { + return JSON.parse(data) + })); + } else { + resolve({}); + } + }); + } + }); }); - return defer.promise; }, saveCredentials: function(credentials) {