f1.forEach(function(p1){ var obj1 = info (p1); for (var i = 0; i < f2.length; i++) { var obj2 = info (f2[i]); if (obj2.name == obj1.name) { var cmp = vc(obj1.ver, obj2.ver); if (cmp == 1){ console.log (obj1, '<--', obj2); } break; } } });
function compare (arch, current, previous){ console.log ('comparing', arch, '...'); var result = { arch: arch, updated : [], downgraded : [], added : [], removed : []}; var a = current.split("\n"); var b = previous.split("\n"); var as = []; var bs = []; var dictA = {}; var dictB = {}; for (var i = 0; i < a.length; i++) { if (!a[i]) continue; var carr = a[i].split(' '); var cver = carr.pop(); var cname = carr.pop(); if (cname){ dictA[cname] = cver; } } for (var j = 0; j < b.length; j++) { if (!b[j]) continue; var parr = b[j].split(' '); var pver = parr.pop(); var pname = parr.pop(); if (pname) { dictB[pname] = pver; } } as = Object.keys (dictA); bs = Object.keys (dictB); var reversed = as.length < bs.length; var intersection = _.intersection(as, bs); var tmp = [as]; tmp = tmp.concat(intersection); var ao = _.without.apply (this, tmp); tmp = [bs]; tmp = tmp.concat(intersection); var bo = _.without.apply (this, tmp); for (var k in dictA) { if (dictB[k]) { var cmp = vercmp(dictA[k], dictB[k]); if (cmp > 0){ console.log ("updated", k, dictB[k], dictA[k]) result.updated.push({ name : k, from : dictB[k], to: dictA[k]}); } else if (cmp < 0) { console.log ("downgraded", k, dictB[k], dictA[k]) result.downgraded.push({ name : k, from : dictB[k], to: dictA[k]}); } } } for (var l = 0; l < ao.length; l++) { console.log ("added", ao[l], dictA[ao[l]]) result.added.push({ name : ao[l], from : dictA[ao[l]] }); } for (l = 0; l < bo.length; l++) { console.log ("removed", bo[l], dictB[bo[l]]) result.removed.push({ name : bo[l], from : dictB[bo[l]] }); } return result; }