diff options
Diffstat (limited to 'scripts/debug_rebuilds/step1_build_and_dumpdb.py')
| -rwxr-xr-x | scripts/debug_rebuilds/step1_build_and_dumpdb.py | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/scripts/debug_rebuilds/step1_build_and_dumpdb.py b/scripts/debug_rebuilds/step1_build_and_dumpdb.py new file mode 100755 index 0000000..69f952d --- /dev/null +++ b/scripts/debug_rebuilds/step1_build_and_dumpdb.py @@ -0,0 +1,50 @@ +import dbm +import json +import subprocess +import sys + + +def dbm_iter(db): + # try dictionary interface - ok in python2 and dumbdb + try: + return db.items() + except Exception: + # try firstkey/nextkey - ok for py3 dbm.gnu + def iter_gdbm(db): + k = db.firstkey() + while k is not None: + yield k, db[k] + k = db.nextkey(k) + return iter_gdbm(db) + + +def dumpdb(): + with dbm.open('.doit.db') as data: + return {key: json.loads(value_str.decode('utf-8')) + for key, value_str in dbm_iter(data)} + + +print_ = print + + +def print(*args, **kwargs): + print_(*args, file=sys.stdout) + sys.stdout.flush() + + +print("==> Removing stuff...") +subprocess.call(['rm', '-rf', '.doit.db', 'output', 'cache', 'cc_debug.sqlite3']) +print("==> Running first build...") +subprocess.call(['nikola', 'build']) +print("==> Fetching database...") +first = dumpdb() +print("==> Running second build...") +subprocess.call(['nikola', 'build']) +print("==> Fetching database...") +second = dumpdb() +print("==> Saving dumps...") +with open('first_dump.py', 'w', encoding='utf-8') as fh: + fh.write(repr(first)) + +with open('second_dump.py', 'w', encoding='utf-8') as fh: + fh.write(repr(second)) |
