tools: fix file_edit and file_write to write directly, not via temp+rename

The temp file + os.replace() (rename) pattern fails on FUSE-mounted paths
(e.g. $OLLIE/sk/, $OLLIE/pl/) because the 9P server doesn't implement Twstat.
Write directly to file_path instead.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Levi Neely 2026-04-14 18:12:59 +02:00
parent 5686be7997
commit ce1688efb8
2 changed files with 6 additions and 15 deletions

View File

@ -6,7 +6,6 @@ import sys
import os
import hashlib
import difflib
import tempfile
def marker_path(file_path):
h = hashlib.sha256(file_path.encode()).hexdigest()[:64]
@ -114,13 +113,10 @@ if err:
print(f"error: {err}")
sys.exit(1)
tmp = tempfile.NamedTemporaryFile(mode='w', dir=os.path.dirname(file_path) or '.', delete=False)
try:
tmp.write(new_content)
tmp.close()
os.replace(tmp.name, file_path)
except Exception as e:
os.unlink(tmp.name)
with open(file_path, 'w') as f:
f.write(new_content)
except OSError as e:
print(f"error: {e}")
sys.exit(1)

View File

@ -6,7 +6,6 @@ import sys
import os
import hashlib
import difflib
import tempfile
def marker_path(file_path):
h = hashlib.sha256(file_path.encode()).hexdigest()[:64]
@ -40,14 +39,10 @@ if exists:
with open(file_path, 'r', errors='replace') as f:
old_content = f.read()
os.makedirs(os.path.dirname(file_path) or '.', exist_ok=True)
tmp = tempfile.NamedTemporaryFile(mode='w', dir=os.path.dirname(file_path) or '.', delete=False)
try:
tmp.write(content)
tmp.close()
os.replace(tmp.name, file_path)
except Exception as e:
os.unlink(tmp.name)
with open(file_path, 'w') as f:
f.write(content)
except OSError as e:
print(f"error: {e}")
sys.exit(1)