• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1from builtins import open as _orig_open
2
3def open(file, mode='r', bufsize=-1):
4    if 'w' not in mode:
5        return _orig_open(file, mode, bufsize)
6    import os
7    backup = file + '~'
8    try:
9        os.unlink(backup)
10    except OSError:
11        pass
12    try:
13        os.rename(file, backup)
14    except OSError:
15        return _orig_open(file, mode, bufsize)
16    f = _orig_open(file, mode, bufsize)
17    _orig_close = f.close
18    def close():
19        _orig_close()
20        import filecmp
21        if filecmp.cmp(backup, file, shallow=False):
22            import os
23            os.unlink(file)
24            os.rename(backup, file)
25    f.close = close
26    return f
27