[Python-checkins] cpython (3.3): Issue #1666318: Add a test that shutil.copytree() retains directory permissions.

antoine.pitrou python-checkins at python.org
Fri Aug 16 19:36:30 CEST 2013


http://hg.python.org/cpython/rev/c388e93879c4
changeset:   85193:c388e93879c4
branch:      3.3
parent:      85190:9df0501fab35
user:        Antoine Pitrou <solipsis at pitrou.net>
date:        Fri Aug 16 19:35:02 2013 +0200
summary:
  Issue #1666318: Add a test that shutil.copytree() retains directory permissions.
Patch by Catherine Devlin.

files:
  Lib/test/test_shutil.py |  26 ++++++++++++++++++++++++++
  Misc/NEWS               |   3 +++
  2 files changed, 29 insertions(+), 0 deletions(-)


diff --git a/Lib/test/test_shutil.py b/Lib/test/test_shutil.py
--- a/Lib/test/test_shutil.py
+++ b/Lib/test/test_shutil.py
@@ -726,6 +726,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 --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -258,6 +258,9 @@
 Tests
 -----
 
+- Issue #1666318: Add a test that shutil.copytree() retains directory
+  permissions.  Patch by Catherine Devlin.
+
 - Issue #18357: add tests for dictview set difference.
   Patch by Fraser Tweedale.
 

-- 
Repository URL: http://hg.python.org/cpython


More information about the Python-checkins mailing list