mirror of
				https://github.com/python/cpython.git
				synced 2025-11-03 23:21:29 +00:00 
			
		
		
		
	Issue #25583: Merge makedirs fix from 3.4 into 3.5
This commit is contained in:
		
						commit
						97cabb9fa5
					
				
					 3 changed files with 11 additions and 3 deletions
				
			
		| 
						 | 
					@ -230,7 +230,7 @@ def makedirs(name, mode=0o777, exist_ok=False):
 | 
				
			||||||
        try:
 | 
					        try:
 | 
				
			||||||
            makedirs(head, mode, exist_ok)
 | 
					            makedirs(head, mode, exist_ok)
 | 
				
			||||||
        except FileExistsError:
 | 
					        except FileExistsError:
 | 
				
			||||||
            # be happy if someone already created the path
 | 
					            # Defeats race condition when another thread created the path
 | 
				
			||||||
            pass
 | 
					            pass
 | 
				
			||||||
        cdir = curdir
 | 
					        cdir = curdir
 | 
				
			||||||
        if isinstance(tail, bytes):
 | 
					        if isinstance(tail, bytes):
 | 
				
			||||||
| 
						 | 
					@ -239,8 +239,10 @@ def makedirs(name, mode=0o777, exist_ok=False):
 | 
				
			||||||
            return
 | 
					            return
 | 
				
			||||||
    try:
 | 
					    try:
 | 
				
			||||||
        mkdir(name, mode)
 | 
					        mkdir(name, mode)
 | 
				
			||||||
    except OSError as e:
 | 
					    except OSError:
 | 
				
			||||||
        if not exist_ok or e.errno != errno.EEXIST or not path.isdir(name):
 | 
					        # Cannot rely on checking for EEXIST, since the operating system
 | 
				
			||||||
 | 
					        # could give priority to other errors like EACCES or EROFS
 | 
				
			||||||
 | 
					        if not exist_ok or not path.isdir(name):
 | 
				
			||||||
            raise
 | 
					            raise
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def removedirs(name):
 | 
					def removedirs(name):
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1040,6 +1040,9 @@ def test_exist_ok_existing_directory(self):
 | 
				
			||||||
        os.makedirs(path, mode=mode, exist_ok=True)
 | 
					        os.makedirs(path, mode=mode, exist_ok=True)
 | 
				
			||||||
        os.umask(old_mask)
 | 
					        os.umask(old_mask)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # Issue #25583: A drive root could raise PermissionError on Windows
 | 
				
			||||||
 | 
					        os.makedirs(os.path.abspath('/'), exist_ok=True)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def test_exist_ok_s_isgid_directory(self):
 | 
					    def test_exist_ok_s_isgid_directory(self):
 | 
				
			||||||
        path = os.path.join(support.TESTFN, 'dir1')
 | 
					        path = os.path.join(support.TESTFN, 'dir1')
 | 
				
			||||||
        S_ISGID = stat.S_ISGID
 | 
					        S_ISGID = stat.S_ISGID
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -77,6 +77,9 @@ Core and Builtins
 | 
				
			||||||
Library
 | 
					Library
 | 
				
			||||||
-------
 | 
					-------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- Issue #25583: Avoid incorrect errors raised by os.makedirs(exist_ok=True)
 | 
				
			||||||
 | 
					  when the OS gives priority to errors such as EACCES over EEXIST.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- Issue #25593: Change semantics of EventLoop.stop() in asyncio.
 | 
					- Issue #25593: Change semantics of EventLoop.stop() in asyncio.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- Issue #6973: When we know a subprocess.Popen process has died, do
 | 
					- Issue #6973: When we know a subprocess.Popen process has died, do
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue