summaryrefslogtreecommitdiffstats
path: root/scripts/debug_rebuilds/step2_analyze_py_files.py
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/debug_rebuilds/step2_analyze_py_files.py')
-rwxr-xr-xscripts/debug_rebuilds/step2_analyze_py_files.py58
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))