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:
parent
5686be7997
commit
ce1688efb8
|
|
@ -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)
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue