changeset 47804:5ad37164a8fe stable

testing: make sure write_file is "atomic" This make sure viewer cannot see the new file with partial content. This was likely the cause of some flakiness in `test-nointerrupt.t` Differential Revision: https://phab.mercurial-scm.org/D11250
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Tue, 03 Aug 2021 19:26:26 +0200
parents 580bca200874
children 8892f604e242
files mercurial/testing/__init__.py
diffstat 1 files changed, 7 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/testing/__init__.py	Wed Aug 04 19:45:13 2021 +0200
+++ b/mercurial/testing/__init__.py	Tue Aug 03 19:26:26 2021 +0200
@@ -33,5 +33,11 @@
 
 
 def write_file(path, content=b''):
-    with open(path, 'wb') as f:
+    if content:
+        write_path = b'%s.tmp' % path
+    else:
+        write_path = path
+    with open(write_path, 'wb') as f:
         f.write(content)
+    if path != write_path:
+        os.rename(write_path, path)