|
|
|
@ -579,6 +579,48 @@ class TestCopyTree(BaseTest, unittest.TestCase): |
|
|
|
shutil.rmtree(src_dir) |
|
|
|
shutil.rmtree(os.path.dirname(dst_dir)) |
|
|
|
|
|
|
|
def test_copytree_arg_types_of_ignore(self): |
|
|
|
join = os.path.join |
|
|
|
exists = os.path.exists |
|
|
|
|
|
|
|
tmp_dir = self.mkdtemp() |
|
|
|
src_dir = join(tmp_dir, "source") |
|
|
|
|
|
|
|
os.mkdir(join(src_dir)) |
|
|
|
os.mkdir(join(src_dir, 'test_dir')) |
|
|
|
os.mkdir(os.path.join(src_dir, 'test_dir', 'subdir')) |
|
|
|
write_file((src_dir, 'test_dir', 'subdir', 'test.txt'), '456') |
|
|
|
|
|
|
|
invokations = [] |
|
|
|
|
|
|
|
def _ignore(src, names): |
|
|
|
invokations.append(src) |
|
|
|
self.assertIsInstance(src, str) |
|
|
|
self.assertIsInstance(names, list) |
|
|
|
self.assertEqual(len(names), len(set(names))) |
|
|
|
for name in names: |
|
|
|
self.assertIsInstance(name, str) |
|
|
|
return [] |
|
|
|
|
|
|
|
dst_dir = join(self.mkdtemp(), 'destination') |
|
|
|
shutil.copytree(src_dir, dst_dir, ignore=_ignore) |
|
|
|
self.assertTrue(exists(join(dst_dir, 'test_dir', 'subdir', |
|
|
|
'test.txt'))) |
|
|
|
|
|
|
|
dst_dir = join(self.mkdtemp(), 'destination') |
|
|
|
shutil.copytree(pathlib.Path(src_dir), dst_dir, ignore=_ignore) |
|
|
|
self.assertTrue(exists(join(dst_dir, 'test_dir', 'subdir', |
|
|
|
'test.txt'))) |
|
|
|
|
|
|
|
dst_dir = join(self.mkdtemp(), 'destination') |
|
|
|
src_dir_entry = list(os.scandir(tmp_dir))[0] |
|
|
|
self.assertIsInstance(src_dir_entry, os.DirEntry) |
|
|
|
shutil.copytree(src_dir_entry, dst_dir, ignore=_ignore) |
|
|
|
self.assertTrue(exists(join(dst_dir, 'test_dir', 'subdir', |
|
|
|
'test.txt'))) |
|
|
|
|
|
|
|
self.assertEqual(len(invokations), 9) |
|
|
|
|
|
|
|
def test_copytree_retains_permissions(self): |
|
|
|
tmp_dir = self.mkdtemp() |
|
|
|
src_dir = os.path.join(tmp_dir, 'source') |
|
|
|
|