From bede75051eb681856699050c825520408a7c3c1e Mon Sep 17 00:00:00 2001 From: taoky Date: Mon, 5 Aug 2024 20:22:03 +0800 Subject: [PATCH] Overwrite index after package sync in SyncPlainHTTP do_update --- shadowmire.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/shadowmire.py b/shadowmire.py index 9f8d277..b45c55d 100755 --- a/shadowmire.py +++ b/shadowmire.py @@ -654,7 +654,8 @@ class SyncPlainHTTP(SyncBase): # directly fetch remote files for filename in ("index.html", "index.v1_html", "index.v1_json"): file_url = urljoin(self.upstream, f"/simple/{package_name}/{filename}") - success, code = download(self.session, file_url, package_simple_path / filename) + # Don't overwrite existing index first! + success, code = download(self.session, file_url, package_simple_path / (filename + ".new")) if not success: if filename != "index.html": logger.warning("index file %s fails", file_url) @@ -685,6 +686,15 @@ class SyncPlainHTTP(SyncBase): if not success: logger.warning("skipping %s as it fails downloading", package_name) return None + + # OK, now it's safe to rename + for filename in ("index.html", "index.v1_html", "index.v1_json"): + file_from = package_simple_path / (filename + ".new") + file_to = package_simple_path / filename + try: + file_from.rename(file_to) + except FileNotFoundError: + pass last_serial = get_local_serial(package_simple_path) if not last_serial: