From 4f1632e3cd3b09cf53782b57133b21d770c41501 Mon Sep 17 00:00:00 2001 From: Bastian Venthur Date: Sat, 6 Nov 2021 14:12:57 +0100 Subject: [PATCH] Immediately rebuild once when entering autoreload --- blag/devserver.py | 7 ++++++- tests/test_devserver.py | 43 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+), 1 deletion(-) diff --git a/blag/devserver.py b/blag/devserver.py index 2160709..c293633 100644 --- a/blag/devserver.py +++ b/blag/devserver.py @@ -55,6 +55,9 @@ def autoreload(args): last modified time). If the last modified time has changed, a rebuild is triggered. + A rebuild is also performed immediately when this method is called + to avoid serving stale contents. + Parameters ---------- args : argparse.Namespace @@ -62,7 +65,9 @@ def autoreload(args): """ dirs = [args.input_dir, args.template_dir, args.static_dir] logger.info(f'Monitoring {dirs} for changes...') - last_mtime = get_last_modified(dirs) + # make sure we trigger the rebuild immediately when we enter the + # loop to avoid serving stale contents + last_mtime = 0 while True: mtime = get_last_modified(dirs) if mtime > last_mtime: diff --git a/tests/test_devserver.py b/tests/test_devserver.py index f06d45c..604a517 100644 --- a/tests/test_devserver.py +++ b/tests/test_devserver.py @@ -1,4 +1,5 @@ import time +import threading from blag import devserver @@ -19,3 +20,45 @@ def test_get_last_modified(cleandir): assert t2 > t1 assert t2 == t3 + + +def test_autoreload_builds_immediately(args): + # create a dummy file that can be build + with open('content/test.md', 'w') as fh: + fh.write('boo') + + t = threading.Thread(target=devserver.autoreload, + args=(args, ), + daemon=True,) + t0 = devserver.get_last_modified(['build']) + t.start() + # try for 5 seconds... + for i in range(5): + time.sleep(1) + t1 = devserver.get_last_modified(['build']) + print(t1) + if t1 > t0: + break + assert t1 > t0 + + +def test_autoreload(args): + t = threading.Thread(target=devserver.autoreload, + args=(args, ), + daemon=True,) + t.start() + + t0 = devserver.get_last_modified(['build']) + + # create a dummy file that can be build + with open('content/test.md', 'w') as fh: + fh.write('boo') + + # try for 5 seconds... + for i in range(5): + time.sleep(1) + t1 = devserver.get_last_modified(['build']) + print(t1) + if t1 > t0: + break + assert t1 > t0