Skip to content

Commit 4c7de64

Browse files
authored
fsync() parent directory on POSIX (untitaker#15)
Fix untitaker#12
1 parent 00d50e5 commit 4c7de64

File tree

1 file changed

+15
-0
lines changed

1 file changed

+15
-0
lines changed

atomicwrites/__init__.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,27 @@ def _path_to_unicode(x):
1818

1919

2020
if sys.platform != 'win32':
21+
def _sync_directory(directory):
22+
# Ensure that filenames are written to disk
23+
fd = os.open(directory, 0)
24+
try:
25+
os.fsync(fd)
26+
finally:
27+
os.close(fd)
28+
2129
def _replace_atomic(src, dst):
2230
os.rename(src, dst)
31+
_sync_directory(os.path.dirname(dst))
2332

2433
def _move_atomic(src, dst):
2534
os.link(src, dst)
2635
os.unlink(src)
36+
37+
src_dir = os.path.dirname(src)
38+
dst_dir = os.path.dirname(dst)
39+
_sync_directory(dst_dir)
40+
if src_dir != dst_dir:
41+
_sync_directory(src_dir)
2742
else:
2843
from ctypes import windll, WinError
2944

0 commit comments

Comments
 (0)