mirror of
https://github.com/python/cpython.git
synced 2025-08-04 00:48:58 +00:00
Fixed #6547: Added the ignore_dangling_symlinks option to shutil.copytree
This commit is contained in:
parent
0d2fa4a612
commit
fb437513d6
4 changed files with 52 additions and 5 deletions
|
@ -13,7 +13,7 @@ from os.path import splitdrive
|
|||
from distutils.spawn import find_executable, spawn
|
||||
from shutil import (_make_tarball, _make_zipfile, make_archive,
|
||||
register_archive_format, unregister_archive_format,
|
||||
get_archive_formats)
|
||||
get_archive_formats, Error)
|
||||
import tarfile
|
||||
import warnings
|
||||
|
||||
|
@ -351,6 +351,26 @@ class TestShutil(unittest.TestCase):
|
|||
shutil.copytree(src_dir, dst_dir, copy_function=_copy)
|
||||
self.assertEquals(len(copied), 2)
|
||||
|
||||
def test_copytree_dangling_symlinks(self):
|
||||
|
||||
# a dangling symlink raises an error at the end
|
||||
src_dir = self.mkdtemp()
|
||||
dst_dir = os.path.join(self.mkdtemp(), 'destination')
|
||||
os.symlink('IDONTEXIST', os.path.join(src_dir, 'test.txt'))
|
||||
os.mkdir(os.path.join(src_dir, 'test_dir'))
|
||||
self._write_data(os.path.join(src_dir, 'test_dir', 'test.txt'), '456')
|
||||
self.assertRaises(Error, shutil.copytree, src_dir, dst_dir)
|
||||
|
||||
# a dangling symlink is ignored with the proper flag
|
||||
dst_dir = os.path.join(self.mkdtemp(), 'destination2')
|
||||
shutil.copytree(src_dir, dst_dir, ignore_dangling_symlinks=True)
|
||||
self.assertNotIn('test.txt', os.listdir(dst_dir))
|
||||
|
||||
# a dangling symlink is copied if symlinks=True
|
||||
dst_dir = os.path.join(self.mkdtemp(), 'destination3')
|
||||
shutil.copytree(src_dir, dst_dir, symlinks=True)
|
||||
self.assertIn('test.txt', os.listdir(dst_dir))
|
||||
|
||||
@unittest.skipUnless(zlib, "requires zlib")
|
||||
def test_make_tarball(self):
|
||||
# creating something to tar
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue