17db96d56Sopenharmony_cifrom builtins import open as _orig_open 27db96d56Sopenharmony_ci 37db96d56Sopenharmony_cidef open(file, mode='r', bufsize=-1): 47db96d56Sopenharmony_ci if 'w' not in mode: 57db96d56Sopenharmony_ci return _orig_open(file, mode, bufsize) 67db96d56Sopenharmony_ci import os 77db96d56Sopenharmony_ci backup = file + '~' 87db96d56Sopenharmony_ci try: 97db96d56Sopenharmony_ci os.unlink(backup) 107db96d56Sopenharmony_ci except OSError: 117db96d56Sopenharmony_ci pass 127db96d56Sopenharmony_ci try: 137db96d56Sopenharmony_ci os.rename(file, backup) 147db96d56Sopenharmony_ci except OSError: 157db96d56Sopenharmony_ci return _orig_open(file, mode, bufsize) 167db96d56Sopenharmony_ci f = _orig_open(file, mode, bufsize) 177db96d56Sopenharmony_ci _orig_close = f.close 187db96d56Sopenharmony_ci def close(): 197db96d56Sopenharmony_ci _orig_close() 207db96d56Sopenharmony_ci import filecmp 217db96d56Sopenharmony_ci if filecmp.cmp(backup, file, shallow=False): 227db96d56Sopenharmony_ci import os 237db96d56Sopenharmony_ci os.unlink(file) 247db96d56Sopenharmony_ci os.rename(backup, file) 257db96d56Sopenharmony_ci f.close = close 267db96d56Sopenharmony_ci return f 27