-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsmart_differ.py
More file actions
executable file
·94 lines (83 loc) · 2.6 KB
/
Copy pathsmart_differ.py
File metadata and controls
executable file
·94 lines (83 loc) · 2.6 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
93
94
#!/usr/bin/python3
import os
import re
import sys
def prefjs_parser(prefsjs: str) -> dict[str, str]:
prefs = {}
for line in prefsjs.splitlines():
m = re.match(r"""^pref\("(?P<pref>.*?)", "?(?P<value>.*?)"?\);$""", line)
prefs[m.group("pref")] = m.group("value")
return prefs
def main(argv: list[str]) -> int:
old_version = argv[0]
new_version = argv[1]
with open(f"all-prefs-{old_version}.js") as file:
old_prefs = prefjs_parser(file.read())
with open(f"all-prefs-{new_version}.js") as file:
new_prefs = prefjs_parser(file.read())
added = new_prefs.keys() - old_prefs.keys()
removed = old_prefs.keys() - new_prefs.keys()
changed = set()
for pref in new_prefs.keys() & old_prefs.keys():
if new_prefs[pref] != old_prefs[pref]:
changed.add(pref)
print(f"# {new_version}")
print("")
print(f"{len(added) + len(removed) + len(changed)} diffs ({len(added)} new, {len(removed)} gone, {len(changed)} different)")
print("")
print(f"### new in {new_version}:")
print("")
print("```js")
for pref in sorted(added):
value = new_prefs[pref]
if re.match(r"""^(true|false|-?[0-9]+)$""", value):
print(f"""pref("{pref}", {value});""")
else:
print(f"""pref("{pref}", "{value}");""")
print("```")
print("")
print(f"### removed, renamed or hidden in {new_version}:")
print("")
print("```js")
for pref in sorted(removed):
value = old_prefs[pref]
if re.match(r"""^(true|false|-?[0-9]+)$""", value):
print(f"""pref("{pref}", {value});""")
else:
print(f"""pref("{pref}", "{value}");""")
print("```")
print("")
print(f"### changed in {new_version}:")
print("")
print("```js")
for pref in sorted(changed):
value = new_prefs[pref]
old_value = old_prefs[pref]
if re.match(r"""^(true|false|-?[0-9]+)$""", value):
print(f"""pref("{pref}", {value}); // {old_value}""")
else:
print(f"""pref("{pref}", "{value}"); // {old_value}""")
print("```")
print("")
print("---")
print("")
print("### ignore")
print("")
print("<details><summary>click me for details</summary><p>")
print("")
print("==NEW")
print("```js")
print("````")
print("")
print("==REMOVED, RENAMED or HIDDEN")
print("```js")
print("````")
print("")
print("==CHANGED")
print("```js")
print("````")
print("")
print("</p></details>")
return os.EX_OK
if __name__ == "__main__":
sys.exit(main(sys.argv[1:]))