-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdiff.js
More file actions
92 lines (81 loc) · 2.64 KB
/
diff.js
File metadata and controls
92 lines (81 loc) · 2.64 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
"use strict";
var path = require('path');
var fs = require('fs');
var program = require('commander');
var _ = require('lodash');
program.parse(process.argv);
var res1 = JSON.parse(fs.readFileSync(program.args[0], {encoding: 'utf8'}));
var res2 = _.indexBy(JSON.parse(fs.readFileSync(program.args[1], {encoding: 'utf8'})), 'target');
var diffs = [];
res1.forEach(function(target1, index) {
var target2 = res2[target1.target];
if (!target2) {
return;
}
var targetDiff = {
target: target1.target,
files: [
_.difference(target1.files, target2.files),
_.difference(target2.files, target1.files)
],
packages: {}
};
if (!targetDiff.files[0].length && !targetDiff.files[1].length) {
delete targetDiff.files;
}
_.union(Object.keys(target1.packages || {}), Object.keys(target2.packages || {}))
.forEach(function(pack) {
var package1 = target1.packages && target1.packages[pack];
var package2 = target2.packages && target2.packages[pack];
if (!package1 || !package2) {
targetDiff.packages[pack] = !package1 ? 2 : 1;
}
else {
var diff1 = _.difference(package1, package2);
var diff2 = _.difference(package2, package1);
if (diff1.length || diff2.length) {
targetDiff.packages[pack] = [diff1, diff2];
}
}
});
if (targetDiff.files || !_.isEmpty(targetDiff.packages)) {
diffs.push(targetDiff);
}
});
console.log('\n\n');
if (!diffs.length) {
console.log('Результаты совпадают');
}
else {
var printDiff = function(diff) {
if (typeof diff === 'number') {
console.log(diff === 1 ? 'Удалён' : 'Добавлен');
}
else {
if (diff[0].length) {
console.log('Удалено:');
console.log(diff[0]);
}
if (diff[1].length) {
if (diff[0].length) {
console.log('\n');
}
console.log('Добавлено:');
console.log(diff[1]);
}
}
};
diffs.forEach(function(diff) {
console.log('-----\nTarget ' + diff.target + '\n\n');
if (diff.files) {
console.log('> core' + '\n');
printDiff(diff.files);
console.log('\n');
}
_.forOwn(diff.packages, function(packDif, pack) {
console.log('> ' + pack + '\n');
printDiff(packDif);
console.log('\n');
});
});
}