-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathdiff.js
106 lines (106 loc) · 3.48 KB
/
diff.js
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
93
94
95
96
97
98
99
100
101
102
103
104
105
106
module.exports = function (o, n) {
let union = (l, r, f) => Array.from(new Set(f(l).concat(f(r))));
let find = (arr, n, key) => { for (p of arr) if(p[key] == n) return p; return null; }
log = ""
// site, ignore disk
let sitekeys = union(o, n, (e) => Object.keys(e.site));
for (k of sitekeys) {
if (k === "disk")
continue
if (k in o.site && !(k in n.site))
log += `- site.${k}:${o.site[k]}\n`
if (!(k in o.site) && k in n.site)
log += `+ site.${k}:${n.site[k]}\n`
if (k in o.site && k in n.site && o.site[k] !== n.site[k]) {
log += `- site.${k}:${o.site[k]}\n`
log += `+ site.${k}:${n.site[k]}\n`
}
}
// info
let infodistros = union(o, n, (e) => e.info.map((e) => e.distro));
for (d of infodistros) {
let od = find(o.info, d, "distro")
let nd = find(n.info, d, "distro")
if (nd === null)
log += `- info:${d}\n`
if (od === null)
log += `+ info:${d}\n`
if (od !== null && nd !== null) {
if (od.category != nd.category) {
log += `- info:${d}\n`
log += `+ info:${d}\n`
}
let urlsnames = union(od, nd, (e) => e.urls.map((e) => e.name));
for (na of urlsnames) {
let on = find(od.urls, na, "name")
let nn = find(nd.urls, na, "name")
if (nn === null)
log += `- info:${d}:name:${na}\n`
if (on === null)
log += `+ info:${d}:name:${na}\n`
if (on !== null && nn !== null && on.url !== nn.url) {
log += `- info:${d}:name:${na}:url:${on.url}\n`
log += `+ info:${d}:name:${na}:url:${nn.url}\n`
}
}
}
}
// mirrors, without comparing status and size
let mirrorscnames = union(o, n, (e) => e.mirrors.map((e) => e.cname));
for (c of mirrorscnames) {
let oc = find(o.mirrors, c, "cname")
let nc = find(n.mirrors, c, "cname")
if (nc === null)
log += `- mirrors:${c}\n`
if (oc === null)
log += `+ mirrors:${c}\n`
if (oc !== null && nc !== null) {
for (k of ["url", "desc", "help", "upstream"]) {
if (k in oc && !(k in nc))
log += `- mirrors:${c}:${k}:${oc[k]}\n`
if (k in nc && !(k in oc))
log += `+ mirrors:${c}:${k}:${nc[k]}\n`
if (k in oc && k in nc && oc[k] !== nc[k]) {
log += `- mirrors:${c}:${k}:${oc[k]}\n`
log += `+ mirrors:${c}:${k}:${nc[k]}\n`
}
}
}
}
// extension
let primarykeys = union(o, n, (e) => Object.keys(e));
let ext = "extension";
if (primarykeys.includes(ext)) {
if (ext in o && !(ext in n))
log += `- ${ext}:${o[ext]}\n`
if (!(ext in o) && ext in n)
log += `+ ${ext}:${n[ext]}\n`
if (ext in o && ext in n && o[ext] !== n[ext]) {
log += `- ${ext}:${o[ext]}\n`
log += `+ ${ext}:${n[ext]}\n`
}
if (ext in o && ext in n) {
// D extension
if (o[ext].includes("D") && n[ext].includes("D")) {
let edp = "endpoints";
if (edp in o && !(edp in n))
log += `- ${edp}\n`
if (!(edp in o) && edp in n)
log += `+ ${edp}\n`
if (edp in o && edp in n) {
// endpoints
let endpointslabels = union(o, n, (e) => e.endpoints.map((e) => e.label));
for (l of endpointslabels) {
let ol = find(o.endpoints, l, "label")
let nl = find(n.endpoints, l, "label")
if (nl === null)
log += `- endpoints:${l}\n`
if (ol === null)
log += `+ endpoints:${l}\n`
}
}
}
}
}
return log
}