1
0
mirror of https://github.com/node-red/node-red.git synced 2023-10-10 13:36:53 +02:00

Fix duplicate subflow detection on import

This commit is contained in:
Nick O'Leary 2018-10-26 23:07:48 +01:00
parent 4d27ba1bda
commit 49fe13f22f
No known key found for this signature in database
GPG Key ID: 4F2157149161A6C9

View File

@ -649,42 +649,39 @@ RED.nodes = (function() {
} }
function checkForMatchingSubflow(subflow,subflowNodes) { function checkForMatchingSubflow(subflow,subflowNodes) {
subflowNodes = subflowNodes || [];
var i; var i;
var match = null; var match = null;
try { RED.nodes.eachSubflow(function(sf) {
RED.nodes.eachSubflow(function(sf) { if (sf.name != subflow.name ||
if (sf.name != subflow.name || sf.info != subflow.info ||
sf.info != subflow.info || sf.in.length != subflow.in.length ||
sf.in.length != subflow.in.length || sf.out.length != subflow.out.length) {
sf.out.length != subflow.out.length) {
return;
}
var sfNodes = RED.nodes.filterNodes({z:sf.id});
if (sfNodes.length != subflowNodes.length) {
return; return;
} }
var sfNodes = RED.nodes.filterNodes({z:sf.id});
if (sfNodes.length != subflowNodes.length) {
return;
}
var subflowNodeSet = [subflow].concat(subflowNodes); var subflowNodeSet = [subflow].concat(subflowNodes);
var sfNodeSet = [sf].concat(sfNodes); var sfNodeSet = [sf].concat(sfNodes);
var exportableSubflowNodes = JSON.stringify(subflowNodeSet); var exportableSubflowNodes = JSON.stringify(subflowNodeSet);
var exportableSFNodes = JSON.stringify(createExportableNodeSet(sfNodeSet)); var exportableSFNodes = JSON.stringify(createExportableNodeSet(sfNodeSet));
var nodeMap = {}; var nodeMap = {};
for (i=0;i<sfNodes.length;i++) { for (i=0;i<sfNodes.length;i++) {
exportableSubflowNodes = exportableSubflowNodes.replace(new RegExp("\""+subflowNodes[i].id+"\"","g"),'"'+sfNodes[i].id+'"'); exportableSubflowNodes = exportableSubflowNodes.replace(new RegExp("\""+subflowNodes[i].id+"\"","g"),'"'+sfNodes[i].id+'"');
} }
exportableSubflowNodes = exportableSubflowNodes.replace(new RegExp("\""+subflow.id+"\"","g"),'"'+sf.id+'"'); exportableSubflowNodes = exportableSubflowNodes.replace(new RegExp("\""+subflow.id+"\"","g"),'"'+sf.id+'"');
if (exportableSubflowNodes !== exportableSFNodes) { if (exportableSubflowNodes !== exportableSFNodes) {
return; return;
} }
match = sf; match = sf;
throw new Error(); return false;
}); });
} catch(err) {
console.log(err.stack);
}
return match; return match;
} }
function compareNodes(nodeA,nodeB,idMustMatch) { function compareNodes(nodeA,nodeB,idMustMatch) {
@ -1381,31 +1378,41 @@ RED.nodes = (function() {
eachNode: function(cb) { eachNode: function(cb) {
for (var n=0;n<nodes.length;n++) { for (var n=0;n<nodes.length;n++) {
cb(nodes[n]); if (cb(nodes[n]) === false) {
break;
}
} }
}, },
eachLink: function(cb) { eachLink: function(cb) {
for (var l=0;l<links.length;l++) { for (var l=0;l<links.length;l++) {
cb(links[l]); if (cb(links[l]) === false) {
break;
}
} }
}, },
eachConfig: function(cb) { eachConfig: function(cb) {
for (var id in configNodes) { for (var id in configNodes) {
if (configNodes.hasOwnProperty(id)) { if (configNodes.hasOwnProperty(id)) {
cb(configNodes[id]); if (cb(configNodes[id]) === false) {
break;
}
} }
} }
}, },
eachSubflow: function(cb) { eachSubflow: function(cb) {
for (var id in subflows) { for (var id in subflows) {
if (subflows.hasOwnProperty(id)) { if (subflows.hasOwnProperty(id)) {
cb(subflows[id]); if (cb(subflows[id]) === false) {
break;
}
} }
} }
}, },
eachWorkspace: function(cb) { eachWorkspace: function(cb) {
for (var i=0;i<workspacesOrder.length;i++) { for (var i=0;i<workspacesOrder.length;i++) {
cb(workspaces[workspacesOrder[i]]); if (cb(workspaces[workspacesOrder[i]]) === false) {
break;
}
} }
}, },