From 5bcd6db9917fa06c2f41ae2d1ac973cff3caf405 Mon Sep 17 00:00:00 2001 From: memsharded Date: Fri, 17 Jan 2025 10:19:42 +0100 Subject: [PATCH] make saving remotes file transactional --- conan/api/subapi/remotes.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/conan/api/subapi/remotes.py b/conan/api/subapi/remotes.py index 45a08d1342a..9e6ae90b1a3 100644 --- a/conan/api/subapi/remotes.py +++ b/conan/api/subapi/remotes.py @@ -290,7 +290,9 @@ def _save(remotes_file, remotes): if r.remote_type: remote["remote_type"] = r.remote_type remote_list.append(remote) - save(remotes_file, json.dumps({"remotes": remote_list}, indent=True)) + # This atomic replace avoids a corrupted remotes.json file if this is killed during the process + save(remotes_file + ".tmp", json.dumps({"remotes": remote_list}, indent=True)) + os.replace(remotes_file + ".tmp", remotes_file) def _filter(remotes, pattern, only_enabled=True):