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.
52 lines
1.2 KiB
52 lines
1.2 KiB
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)
|
|
|