mirror of https://github.com/jumpserver/jumpserver
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
53 lines
1.2 KiB
53 lines
1.2 KiB
2 years ago
|
import difflib
|
||
|
import json
|
||
|
import sys
|
||
|
|
||
|
|
||
|
def diff_list(f1, f2):
|
||
|
with open(f1) as f:
|
||
|
data1 = json.load(f)
|
||
|
|
||
|
data1_mapper = {
|
||
|
d['name']: d for d in data1
|
||
|
}
|
||
|
with open(f2) as f:
|
||
|
data2 = json.load(f)
|
||
|
|
||
|
data2_mapper = {
|
||
|
d['name']: d for d in data2
|
||
|
}
|
||
|
|
||
|
d1_names = set(data1_mapper.keys())
|
||
|
d2_names = set(data2_mapper.keys())
|
||
|
|
||
|
diff_names = d1_names - d2_names
|
||
|
if diff_names:
|
||
|
print("Diff Names1: ", diff_names)
|
||
|
|
||
|
diff_names = d2_names - d1_names
|
||
|
if diff_names:
|
||
|
print("Diff Names2: ", diff_names)
|
||
|
|
||
|
for name, data in data1_mapper.items():
|
||
|
if name not in data2_mapper:
|
||
|
continue
|
||
|
data2 = data2_mapper[name]
|
||
|
print("Diff: ", name)
|
||
|
diff = difflib.unified_diff(
|
||
|
json.dumps(data, indent=4, sort_keys=True).splitlines(),
|
||
|
json.dumps(data2, indent=4, sort_keys=True).splitlines()
|
||
|
)
|
||
|
print('\n'.join(diff))
|
||
|
print()
|
||
|
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
if len(sys.argv) != 3:
|
||
|
print('Usage: python diff.py file1 file2')
|
||
|
sys.exit(1)
|
||
|
|
||
|
f1 = sys.argv[1]
|
||
|
f2 = sys.argv[2]
|
||
|
|
||
|
diff = diff_list(f1, f2)
|