From 4e262060ddb37d9c5d0a519d664be68b81aa1a96 Mon Sep 17 00:00:00 2001 From: liuji Date: Sat, 10 Oct 2026 18:03:47 +0800 Subject: [PATCH] Initialize data freshness from Git history --- sync.py | 34 ++++++++++++++++++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/sync.py b/sync.py index c1fe686..5ee2879 100755 --- a/sync.py +++ b/sync.py @@ -186,6 +186,31 @@ def read_sync_log() -> dict[str, object]: return payload if isinstance(payload, dict) else {} +def git_data_update_times() -> tuple[str, str] | None: + """Return the latest committed data time in UTC and Shanghai time.""" + try: + result = subprocess.run( + ["git", "log", "-1", "--format=%cI", "--", str(PUBLISH_PATH)], + cwd=ROOT, + check=True, + text=True, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + ) + committed_at = result.stdout.strip() + if not committed_at: + return None + timestamp = datetime.fromisoformat(committed_at) + if timestamp.tzinfo is None: + return None + return ( + timestamp.astimezone(timezone.utc).isoformat().replace("+00:00", "Z"), + timestamp.astimezone(ZoneInfo("Asia/Shanghai")).isoformat(), + ) + except (OSError, subprocess.SubprocessError, ValueError): + return None + + def publish(content: bytes, sync_log: dict[str, object]) -> None: log_content = (json.dumps(sync_log, ensure_ascii=False, indent=2) + "\n").encode("utf-8") targets = { @@ -270,8 +295,13 @@ def sync() -> None: last_data_update_at = previous_sync_log.get("last_data_update_at") last_data_update_at_shanghai = previous_sync_log.get("last_data_update_at_shanghai") if not isinstance(last_data_update_at, str) or not last_data_update_at: - last_data_update_at = None - if not isinstance(last_data_update_at_shanghai, str) or not last_data_update_at_shanghai: + historical_times = git_data_update_times() + if historical_times is None: + last_data_update_at = None + last_data_update_at_shanghai = None + else: + last_data_update_at, last_data_update_at_shanghai = historical_times + elif not isinstance(last_data_update_at_shanghai, str) or not last_data_update_at_shanghai: last_data_update_at_shanghai = None sync_log = { "last_success_at": success_at.isoformat().replace("+00:00", "Z"),