Issue #21697: shutil.copytree() now correctly handles symbolic links that point to directories.
Patch by Eduardo Seabra and Thomas Kluyver.
This commit is contained in:
commit
940d69d444
|
@ -327,7 +327,11 @@ def copytree(src, dst, symlinks=False, ignore=None, copy_function=copy2,
|
|||
if not os.path.exists(linkto) and ignore_dangling_symlinks:
|
||||
continue
|
||||
# otherwise let the copy occurs. copy2 will raise an error
|
||||
copy_function(srcname, dstname)
|
||||
if os.path.isdir(srcname):
|
||||
copytree(srcname, dstname, symlinks, ignore,
|
||||
copy_function)
|
||||
else:
|
||||
copy_function(srcname, dstname)
|
||||
elif os.path.isdir(srcname):
|
||||
copytree(srcname, dstname, symlinks, ignore, copy_function)
|
||||
else:
|
||||
|
|
|
@ -901,6 +901,26 @@ class TestShutil(unittest.TestCase):
|
|||
shutil.copytree(src_dir, dst_dir, symlinks=True)
|
||||
self.assertIn('test.txt', os.listdir(dst_dir))
|
||||
|
||||
@support.skip_unless_symlink
|
||||
def test_copytree_symlink_dir(self):
|
||||
src_dir = self.mkdtemp()
|
||||
dst_dir = os.path.join(self.mkdtemp(), 'destination')
|
||||
os.mkdir(os.path.join(src_dir, 'real_dir'))
|
||||
with open(os.path.join(src_dir, 'real_dir', 'test.txt'), 'w'):
|
||||
pass
|
||||
os.symlink(os.path.join(src_dir, 'real_dir'),
|
||||
os.path.join(src_dir, 'link_to_dir'),
|
||||
target_is_directory=True)
|
||||
|
||||
shutil.copytree(src_dir, dst_dir, symlinks=False)
|
||||
self.assertFalse(os.path.islink(os.path.join(dst_dir, 'link_to_dir')))
|
||||
self.assertIn('test.txt', os.listdir(os.path.join(dst_dir, 'link_to_dir')))
|
||||
|
||||
dst_dir = os.path.join(self.mkdtemp(), 'destination2')
|
||||
shutil.copytree(src_dir, dst_dir, symlinks=True)
|
||||
self.assertTrue(os.path.islink(os.path.join(dst_dir, 'link_to_dir')))
|
||||
self.assertIn('test.txt', os.listdir(os.path.join(dst_dir, 'link_to_dir')))
|
||||
|
||||
def _copy_file(self, method):
|
||||
fname = 'test.txt'
|
||||
tmpdir = self.mkdtemp()
|
||||
|
|
|
@ -28,6 +28,9 @@ Core and Builtins
|
|||
Library
|
||||
-------
|
||||
|
||||
- Issue #21697: shutil.copytree() now correctly handles symbolic links that
|
||||
point to directories. Patch by Eduardo Seabra and Thomas Kluyver.
|
||||
|
||||
- Issue #14373: Fixed segmentation fault when gc.collect() is called during
|
||||
constructing lru_cache (C implementation).
|
||||
|
||||
|
|
Loading…
Reference in New Issue