diff options
Diffstat (limited to 'Tools/freeze/bkfile.py')
-rw-r--r-- | Tools/freeze/bkfile.py | 67 |
1 files changed, 22 insertions, 45 deletions
diff --git a/Tools/freeze/bkfile.py b/Tools/freeze/bkfile.py index 6abacc9..20a70b0 100644 --- a/Tools/freeze/bkfile.py +++ b/Tools/freeze/bkfile.py @@ -1,49 +1,26 @@ from builtins import open as _orig_open -class _BkFile: - def __init__(self, file, mode, bufsize): - import os - self.__filename = file - self.__backup = file + '~' - try: - os.unlink(self.__backup) - except OSError: - pass - try: - os.rename(file, self.__backup) - except OSError: - self.__backup = None - self.__file = _orig_open(file, mode, bufsize) - self.closed = self.__file.closed - self.fileno = self.__file.fileno - self.flush = self.__file.flush - self.isatty = self.__file.isatty - self.mode = self.__file.mode - self.name = self.__file.name - self.read = self.__file.read - try: - self.readinto = self.__file.readinto - except AttributeError: - pass - self.readline = self.__file.readline - self.readlines = self.__file.readlines - self.seek = self.__file.seek - self.tell = self.__file.tell - self.truncate = self.__file.truncate - self.write = self.__file.write - self.writelines = self.__file.writelines - - def close(self): - self.__file.close() - if self.__backup is None: - return - import filecmp - if filecmp.cmp(self.__backup, self.__filename, shallow = 0): - import os - os.unlink(self.__filename) - os.rename(self.__backup, self.__filename) - -def open(file, mode = 'r', bufsize = -1): +def open(file, mode='r', bufsize=-1): if 'w' not in mode: return _orig_open(file, mode, bufsize) - return _BkFile(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 |