summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAntoine Pitrou <solipsis@pitrou.net>2014-01-01 01:50:45 (GMT)
committerAntoine Pitrou <solipsis@pitrou.net>2014-01-01 01:50:45 (GMT)
commit3f48ac98c04fc17f12c63dcf593dd0c19379c7df (patch)
tree8a1d5e168f064c978e9e0be42af168a0e75dc385
parentb075cc0d760650ec4b65184faa9b6eebb1c1f8b2 (diff)
downloadcpython-3f48ac98c04fc17f12c63dcf593dd0c19379c7df.zip
cpython-3f48ac98c04fc17f12c63dcf593dd0c19379c7df.tar.gz
cpython-3f48ac98c04fc17f12c63dcf593dd0c19379c7df.tar.bz2
Issue #20055: Fix test_shutil under Windows with symlink privileges held.
Patch by Vajrasky Kok.
-rw-r--r--Lib/test/test_shutil.py32
-rw-r--r--Misc/NEWS3
2 files changed, 22 insertions, 13 deletions
diff --git a/Lib/test/test_shutil.py b/Lib/test/test_shutil.py
index 96028a0..8a8ce86 100644
--- a/Lib/test/test_shutil.py
+++ b/Lib/test/test_shutil.py
@@ -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
diff --git a/Misc/NEWS b/Misc/NEWS
index 59ab760..f1e27c3 100644
--- 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.