mirror of https://github.com/python/cpython
bpo-35652: shutil.copytree(copy_function=...) erroneously pass DirEntry instead of path str (GH-11997)
This commit is contained in:
parent
d5a551c269
commit
c606a9cbd4
|
@ -472,7 +472,7 @@ def _copytree(entries, src, dst, symlinks, ignore, copy_function,
|
|||
dirs_exist_ok=dirs_exist_ok)
|
||||
else:
|
||||
# Will raise a SpecialFileError for unsupported file types
|
||||
copy_function(srcentry, dstname)
|
||||
copy_function(srcobj, dstname)
|
||||
# catch the Error from the recursive copytree so that we can
|
||||
# continue with other files
|
||||
except Error as err:
|
||||
|
|
|
@ -859,6 +859,24 @@ class TestShutil(unittest.TestCase):
|
|||
with self.assertRaises(shutil.Error):
|
||||
shutil.copytree(src_dir, dst_dir)
|
||||
|
||||
def test_copytree_custom_copy_function(self):
|
||||
# See: https://bugs.python.org/issue35648
|
||||
def custom_cpfun(a, b):
|
||||
flag.append(None)
|
||||
self.assertIsInstance(a, str)
|
||||
self.assertIsInstance(b, str)
|
||||
self.assertEqual(a, os.path.join(src, 'foo'))
|
||||
self.assertEqual(b, os.path.join(dst, 'foo'))
|
||||
|
||||
flag = []
|
||||
src = tempfile.mkdtemp()
|
||||
dst = tempfile.mktemp()
|
||||
self.addCleanup(shutil.rmtree, src)
|
||||
with open(os.path.join(src, 'foo'), 'w') as f:
|
||||
f.close()
|
||||
shutil.copytree(src, dst, copy_function=custom_cpfun)
|
||||
self.assertEqual(len(flag), 1)
|
||||
|
||||
@unittest.skipIf(os.name == 'nt', 'temporarily disabled on Windows')
|
||||
@unittest.skipUnless(hasattr(os, 'link'), 'requires os.link')
|
||||
def test_dont_copy_file_onto_link_to_itself(self):
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
shutil.copytree(copy_function=...) erroneously pass DirEntry instead of a
|
||||
path string.
|
Loading…
Reference in New Issue