| 
									
										
										
										
											2015-03-11 17:18:03 +02:00
										 |  |  | from builtins import open as _orig_open | 
					
						
							| 
									
										
										
										
											1998-08-25 14:06:55 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-20 09:21:59 +02:00
										 |  |  | def open(file, mode='r', bufsize=-1): | 
					
						
							| 
									
										
										
										
											2004-07-18 06:16:08 +00:00
										 |  |  |     if 'w' not in mode: | 
					
						
							|  |  |  |         return _orig_open(file, mode, bufsize) | 
					
						
							| 
									
										
										
										
											2015-03-20 09:21:59 +02:00
										 |  |  |     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 |