blob: 20a70b0639d2f1a1efc909fa96a5f055f2d66de3 [file] [log] [blame]
Serhiy Storchakacf4a2f22015-03-11 17:18:03 +02001from builtins import open as _orig_open
Guido van Rossumbaf06031998-08-25 14:06:55 +00002
Serhiy Storchaka53c3fb12015-03-20 09:21:59 +02003def open(file, mode='r', bufsize=-1):
Tim Peters182b5ac2004-07-18 06:16:08 +00004 if 'w' not in mode:
5 return _orig_open(file, mode, bufsize)
Serhiy Storchaka53c3fb12015-03-20 09:21:59 +02006 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