+++ /dev/null
-_orig_open = open\r
-\r
-class _BkFile:\r
- def __init__(self, file, mode, bufsize):\r
- import os\r
- self.__filename = file\r
- self.__backup = file + '~'\r
- try:\r
- os.unlink(self.__backup)\r
- except os.error:\r
- pass\r
- try:\r
- os.rename(file, self.__backup)\r
- except os.error:\r
- self.__backup = None\r
- self.__file = _orig_open(file, mode, bufsize)\r
- self.closed = self.__file.closed\r
- self.fileno = self.__file.fileno\r
- self.flush = self.__file.flush\r
- self.isatty = self.__file.isatty\r
- self.mode = self.__file.mode\r
- self.name = self.__file.name\r
- self.read = self.__file.read\r
- self.readinto = self.__file.readinto\r
- self.readline = self.__file.readline\r
- self.readlines = self.__file.readlines\r
- self.seek = self.__file.seek\r
- self.softspace = self.__file.softspace\r
- self.tell = self.__file.tell\r
- self.truncate = self.__file.truncate\r
- self.write = self.__file.write\r
- self.writelines = self.__file.writelines\r
-\r
- def close(self):\r
- self.__file.close()\r
- if self.__backup is None:\r
- return\r
- import filecmp\r
- if filecmp.cmp(self.__backup, self.__filename, shallow = 0):\r
- import os\r
- os.unlink(self.__filename)\r
- os.rename(self.__backup, self.__filename)\r
-\r
-def open(file, mode = 'r', bufsize = -1):\r
- if 'w' not in mode:\r
- return _orig_open(file, mode, bufsize)\r
- return _BkFile(file, mode, bufsize)\r