From 607d9750a472eef6c89a3334e6c6c411f45ba203 Mon Sep 17 00:00:00 2001 From: medimedi Date: Sat, 8 Aug 2026 23:42:33 +0800 Subject: [PATCH 1/2] Fix empty progress log handling --- app/logger.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/logger.py b/app/logger.py index fe82c40c9..4168e2ed0 100644 --- a/app/logger.py +++ b/app/logger.py @@ -64,7 +64,7 @@ class LogInterceptor(io.TextIOWrapper): # Simple handling for cr to overwrite the last output if it isnt a full line # else logs just get full of progress messages - if isinstance(data, str) and data.startswith("\r") and not logs[-1]["m"].endswith("\n"): + if isinstance(data, str) and data.startswith("\r") and logs and not logs[-1]["m"].endswith("\n"): logs.pop() logs.append(entry) super().write(data) From e5e8b1d3b02e6719169dca17e1bb8f814fbe59ab Mon Sep 17 00:00:00 2001 From: medimedi Date: Sat, 8 Aug 2026 23:42:41 +0800 Subject: [PATCH 2/2] Add progress log regression test --- tests-unit/app_test/logger_test.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 tests-unit/app_test/logger_test.py diff --git a/tests-unit/app_test/logger_test.py b/tests-unit/app_test/logger_test.py new file mode 100644 index 000000000..0da33133c --- /dev/null +++ b/tests-unit/app_test/logger_test.py @@ -0,0 +1,15 @@ +from collections import deque +import io + +import app.logger + + +def test_carriage_return_can_be_first_log_entry(monkeypatch): + monkeypatch.setattr(app.logger, "logs", deque()) + stream = io.TextIOWrapper(io.BytesIO(), encoding="utf-8") + interceptor = app.logger.LogInterceptor(stream) + + interceptor.write("\rprogress") + + assert len(app.logger.logs) == 1 + assert app.logger.logs[0]["m"] == "\rprogress"