]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Issue #20055: Fix test_shutil under Windows with symlink privileges held.
authorAntoine Pitrou <solipsis@pitrou.net>
Wed, 1 Jan 2014 01:50:45 +0000 (02:50 +0100)
committerAntoine Pitrou <solipsis@pitrou.net>
Wed, 1 Jan 2014 01:50:45 +0000 (02:50 +0100)
Patch by Vajrasky Kok.

Lib/test/test_shutil.py
Misc/NEWS

index 96028a0aab4240b89bd416caeb114c62bfc4a080..8a8ce868b72038fd8e13e8f53332fa43882d7aae 100644 (file)
@@ -287,18 +287,20 @@ class TestShutil(unittest.TestCase):
         self.assertNotEqual(os.stat(src).st_mode, os.stat(dst).st_mode)
         shutil.copymode(src, dst)
         self.assertEqual(os.stat(src).st_mode, os.stat(dst).st_mode)
-        # follow src link
-        os.chmod(dst, stat.S_IRWXO)
-        shutil.copymode(src_link, dst)
-        self.assertEqual(os.stat(src).st_mode, os.stat(dst).st_mode)
-        # follow dst link
-        os.chmod(dst, stat.S_IRWXO)
-        shutil.copymode(src, dst_link)
-        self.assertEqual(os.stat(src).st_mode, os.stat(dst).st_mode)
-        # follow both links
-        os.chmod(dst, stat.S_IRWXO)
-        shutil.copymode(src_link, dst)
-        self.assertEqual(os.stat(src).st_mode, os.stat(dst).st_mode)
+        # On Windows, os.chmod does not follow symlinks (issue #15411)
+        if os.name != 'nt':
+            # follow src link
+            os.chmod(dst, stat.S_IRWXO)
+            shutil.copymode(src_link, dst)
+            self.assertEqual(os.stat(src).st_mode, os.stat(dst).st_mode)
+            # follow dst link
+            os.chmod(dst, stat.S_IRWXO)
+            shutil.copymode(src, dst_link)
+            self.assertEqual(os.stat(src).st_mode, os.stat(dst).st_mode)
+            # follow both links
+            os.chmod(dst, stat.S_IRWXO)
+            shutil.copymode(src_link, dst_link)
+            self.assertEqual(os.stat(src).st_mode, os.stat(dst).st_mode)
 
     @unittest.skipUnless(hasattr(os, 'lchmod'), 'requires os.lchmod')
     @support.skip_unless_symlink
@@ -1543,7 +1545,11 @@ class TestMove(unittest.TestCase):
         dst_link = os.path.join(self.dst_dir, 'quux')
         shutil.move(dst, dst_link)
         self.assertTrue(os.path.islink(dst_link))
-        self.assertEqual(os.path.realpath(src), os.path.realpath(dst_link))
+        # On Windows, os.path.realpath does not follow symlinks (issue #9949)
+        if os.name == 'nt':
+            self.assertEqual(os.path.realpath(src), os.readlink(dst_link))
+        else:
+            self.assertEqual(os.path.realpath(src), os.path.realpath(dst_link))
 
     @support.skip_unless_symlink
     @mock_rename
index 59ab7608da304c479cfcd3d702844aae36e1383c..f1e27c3dc129cb7c517d61416fcbe23b79c3bbea 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -197,6 +197,9 @@ IDLE
 Tests
 -----
 
+- Issue #20055: Fix test_shutil under Windows with symlink privileges held.
+  Patch by Vajrasky Kok.
+
 - Issue #19938: Re-enabled test_bug_1333982 in test_dis, which had been
   disabled since 3.0 due to the changes in listcomp handling.