diff --git a/packages/node_modules/@node-red/registry/lib/localfilesystem.js b/packages/node_modules/@node-red/registry/lib/localfilesystem.js index 5f951fc0b..e564475ff 100644 --- a/packages/node_modules/@node-red/registry/lib/localfilesystem.js +++ b/packages/node_modules/@node-red/registry/lib/localfilesystem.js @@ -20,7 +20,8 @@ var path = require("path"); var events; var log; -var i18n = require("@node-red/util").i18n; // TODO: separate module +var log = require("@node-red/util").log; +var i18n = require("@node-red/util").i18n; var settings; var disableNodePathScan = false; @@ -29,7 +30,6 @@ var iconFileExtensions = [".png", ".gif", ".svg"]; function init(runtime) { settings = runtime.settings; events = runtime.events; - log = runtime.log; } function isIncluded(name) { @@ -289,6 +289,33 @@ function getNodeFiles(disableNodePathScan) { if (!disableNodePathScan) { var moduleFiles = scanTreeForNodesModules(); + + // Filter the module list to ignore global modules + // that have also been installed locally - allowing the user to + // update a module they may not otherwise be able to touch + + moduleFiles.sort(function(A,B) { + if (A.local && !B.local) { + return -1 + } else if (!A.local && B.local) { + return 1 + } + return 0; + }) + var knownModules = {}; + moduleFiles = moduleFiles.filter(function(mod) { + var result; + if (!knownModules[mod.package.name]) { + knownModules[mod.package.name] = true; + result = true; + } else { + result = false; + } + log.debug("Module: "+mod.package.name+" "+mod.package.version+(result?"":" *ignored due to local copy*")); + log.debug(" "+mod.dir); + return result; + }); + moduleFiles.forEach(function(moduleFile) { var nodeModuleFiles = getModuleNodeFiles(moduleFile); nodeList[moduleFile.package.name] = { diff --git a/test/unit/@node-red/registry/lib/localfilesystem_spec.js b/test/unit/@node-red/registry/lib/localfilesystem_spec.js index f26c1529c..41beb8df5 100644 --- a/test/unit/@node-red/registry/lib/localfilesystem_spec.js +++ b/test/unit/@node-red/registry/lib/localfilesystem_spec.js @@ -111,7 +111,6 @@ describe("red/nodes/registry/localfilesystem",function() { }); it("Finds nodes in settings.nodesDir (string,relative path)",function(done) { var relativeUserDir = path.join("test","unit","@node-red","registry","lib","resources","userDir"); - console.log(relativeUserDir) localfilesystem.init({settings:{nodesDir:relativeUserDir}}); var nodeList = localfilesystem.getNodeFiles(true); nodeList.should.have.a.property("node-red");