Commit 78d6cb66 authored by Martin v. Löwis's avatar Martin v. Löwis

Don't copy directory stat times in shutil.copytree on Windows

Fixes #1525866.
parent a8a6210a
......@@ -127,7 +127,13 @@ def copytree(src, dst, symlinks=False):
# continue with other files
except Error, err:
errors.extend(err.args[0])
copystat(src, dst)
try:
copystat(src, dst)
except WindowsError:
# can't copy file access times on Windows
pass
except OSError, why:
errors.extend((src, dst, str(why)))
if errors:
raise Error, errors
......
......@@ -74,6 +74,33 @@ class TestShutil(unittest.TestCase):
except:
pass
def test_copytree_simple(self):
src_dir = tempfile.mkdtemp()
dst_dir = os.path.join(tempfile.mkdtemp(), 'destination')
open(os.path.join(src_dir, 'test.txt'), 'w').write('123')
os.mkdir(os.path.join(src_dir, 'test_dir'))
open(os.path.join(src_dir, 'test_dir', 'test.txt'), 'w').write('456')
#
try:
shutil.copytree(src_dir, dst_dir)
self.assertTrue(os.path.isfile(os.path.join(dst_dir, 'test.txt')))
self.assertTrue(os.path.isdir(os.path.join(dst_dir, 'test_dir')))
self.assertTrue(os.path.isfile(os.path.join(dst_dir, 'test_dir', 'test.txt')))
self.assertEqual(open(os.path.join(dst_dir, 'test.txt')).read(), '123')
self.assertEqual(open(os.path.join(dst_dir, 'test_dir', 'test.txt')).read(), '456')
finally:
try:
os.remove(os.path.join(src_dir, 'test.txt'))
os.remove(os.path.join(dst_dir, 'test.txt'))
os.remove(os.path.join(src_dir, 'test_dir', 'test.txt'))
os.remove(os.path.join(dst_dir, 'test_dir', 'test.txt'))
os.removedirs(src_dir)
os.removedirs(dst_dir)
except:
pass
if hasattr(os, "symlink"):
def test_dont_copy_file_onto_link_to_itself(self):
# bug 851123.
......
......@@ -61,6 +61,9 @@ Core and builtins
Library
-------
- Bug #1525866: Don't copy directory stat times in
shutil.copytree on Windows
- Bug #1002398: The documentation for os.path.sameopenfile now correctly
refers to file descriptors, not file objects.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment