You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
27 lines
664 B
27 lines
664 B
from builtins import open as _orig_open
|
|
|
|
def open(file, mode='r', bufsize=-1):
|
|
if 'w' not in mode:
|
|
return _orig_open(file, mode, bufsize)
|
|
import os
|
|
backup = file + '~'
|
|
try:
|
|
os.unlink(backup)
|
|
except OSError:
|
|
pass
|
|
try:
|
|
os.rename(file, backup)
|
|
except OSError:
|
|
return _orig_open(file, mode, bufsize)
|
|
f = _orig_open(file, mode, bufsize)
|
|
_orig_close = f.close
|
|
def close():
|
|
_orig_close()
|
|
import filecmp
|
|
if filecmp.cmp(backup, file, shallow=False):
|
|
import os
|
|
os.unlink(file)
|
|
os.rename(backup, file)
|
|
f.close = close
|
|
return f
|