diff options
Diffstat (limited to 'scripts/debug_rebuilds/step2_analyze_py_files.py')
| -rwxr-xr-x | scripts/debug_rebuilds/step2_analyze_py_files.py | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/scripts/debug_rebuilds/step2_analyze_py_files.py b/scripts/debug_rebuilds/step2_analyze_py_files.py new file mode 100755 index 0000000..cb5c954 --- /dev/null +++ b/scripts/debug_rebuilds/step2_analyze_py_files.py @@ -0,0 +1,58 @@ +import sqlite3 +import sys +print_ = print + + +def print(*args, **kwargs): + print_(*args, file=sys.stdout) + sys.stdout.flush() + + +with open('first_dump.py', 'r', encoding='utf-8') as fh: + first = eval(fh.read()) + +with open('second_dump.py', 'r', encoding='utf-8') as fh: + second = eval(fh.read()) + +if len(first) != len(second): + print(" [!] Databases differ in size.") + for k in first: + if k not in second: + print(" Item", k, "not found in second database.") + for k in second: + if k not in first: + print(" Item", k, "not found in first database.") + +conn = sqlite3.connect("cc_debug.sqlite3") + + +def get_from_db(value): + cursor = conn.cursor() + try: + cursor.execute("SELECT json_data FROM hashes WHERE hash = ?", (value,)) + return cursor.fetchone()[0] + except Exception: + print(" [!] Cannot find", value, "in database.") + return None + + +if first == second: + print("==> Both files are identical.") + exit(0) + +VAL_KEY = '_values_:' # yes, ends with a colon +for k in first: + fk, sk = first[k], second[k] + try: + first_values, second_values = fk[VAL_KEY], sk[VAL_KEY] + except KeyError: + print(" [!] Values not found for,", k) + continue + + if first_values != second_values: + print(" -> Difference:", k) + for vk in first_values: + fv, sv = first_values[vk], second_values[vk] + if fv != sv: + print(" first :", fv, get_from_db(fv)) + print(" second:", sv, get_from_db(sv)) |
