mirror of
				https://github.com/python/cpython.git
				synced 2025-11-03 19:34:08 +00:00 
			
		
		
		
	compatible with regular files (in particular it now supports the context management protocol).
		
			
				
	
	
		
			26 lines
		
	
	
	
		
			664 B
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			26 lines
		
	
	
	
		
			664 B
		
	
	
	
		
			Python
		
	
	
	
	
	
from builtins import open as _orig_open
 | 
						|
 | 
						|
def open(file, mode='r', bufsize=-1):
 | 
						|
    if 'w' not in mode:
 | 
						|
        return _orig_open(file, mode, bufsize)
 | 
						|
    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
 |