(original) (raw)
changeset: 85194:8906713d5704 parent: 85191:04b50a1eb013 parent: 85193:c388e93879c4 user: Antoine Pitrou solipsis@pitrou.net date: Fri Aug 16 19:36:18 2013 +0200 files: Lib/test/test_shutil.py Misc/NEWS description: Issue #1666318: Add a test that shutil.copytree() retains directory permissions. Patch by Catherine Devlin. diff -r 04b50a1eb013 -r 8906713d5704 Lib/test/test_shutil.py --- a/Lib/test/test_shutil.py Fri Aug 16 19:20:04 2013 +0200 +++ b/Lib/test/test_shutil.py Fri Aug 16 19:36:18 2013 +0200 @@ -727,6 +727,32 @@ shutil.rmtree(src_dir) shutil.rmtree(os.path.dirname(dst_dir)) + def test_copytree_retains_permissions(self): + tmp_dir = tempfile.mkdtemp() + src_dir = os.path.join(tmp_dir, 'source') + os.mkdir(src_dir) + dst_dir = os.path.join(tmp_dir, 'destination') + self.addCleanup(shutil.rmtree, tmp_dir) + + os.chmod(src_dir, 0o777) + write_file((src_dir, 'permissive.txt'), '123') + os.chmod(os.path.join(src_dir, 'permissive.txt'), 0o777) + write_file((src_dir, 'restrictive.txt'), '456') + os.chmod(os.path.join(src_dir, 'restrictive.txt'), 0o600) + restrictive_subdir = tempfile.mkdtemp(dir=src_dir) + os.chmod(restrictive_subdir, 0o600) + + shutil.copytree(src_dir, dst_dir) + self.assertEquals(os.stat(src_dir).st_mode, os.stat(dst_dir).st_mode) + self.assertEquals(os.stat(os.path.join(src_dir, 'permissive.txt')).st_mode, + os.stat(os.path.join(dst_dir, 'permissive.txt')).st_mode) + self.assertEquals(os.stat(os.path.join(src_dir, 'restrictive.txt')).st_mode, + os.stat(os.path.join(dst_dir, 'restrictive.txt')).st_mode) + restrictive_subdir_dst = os.path.join(dst_dir, + os.path.split(restrictive_subdir)[1]) + self.assertEquals(os.stat(restrictive_subdir).st_mode, + os.stat(restrictive_subdir_dst).st_mode) + @unittest.skipUnless(hasattr(os, 'link'), 'requires os.link') def test_dont_copy_file_onto_link_to_itself(self): # Temporarily disable test on Windows. diff -r 04b50a1eb013 -r 8906713d5704 Misc/NEWS --- a/Misc/NEWS Fri Aug 16 19:20:04 2013 +0200 +++ b/Misc/NEWS Fri Aug 16 19:36:18 2013 +0200 @@ -682,6 +682,9 @@ Tests ----- +- Issue #1666318: Add a test that shutil.copytree() retains directory + permissions. Patch by Catherine Devlin. + - Issue #18273: move the tests in Lib/test/json_tests to Lib/test/test_json and make them discoverable by unittest. Patch by Zachary Ware. /solipsis@pitrou.net