mirror of
https://github.com/python/cpython.git
synced 2025-07-29 14:15:07 +00:00
Don't copy directory stat times in shutil.copytree on Windows
Fixes #1525866.
This commit is contained in:
parent
e34ac7ce7a
commit
4e67838d6c
3 changed files with 37 additions and 1 deletions
|
@ -127,7 +127,13 @@ def copytree(src, dst, symlinks=False):
|
||||||
# continue with other files
|
# continue with other files
|
||||||
except Error, err:
|
except Error, err:
|
||||||
errors.extend(err.args[0])
|
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:
|
if errors:
|
||||||
raise Error, errors
|
raise Error, errors
|
||||||
|
|
||||||
|
|
|
@ -74,6 +74,33 @@ class TestShutil(unittest.TestCase):
|
||||||
except:
|
except:
|
||||||
pass
|
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"):
|
if hasattr(os, "symlink"):
|
||||||
def test_dont_copy_file_onto_link_to_itself(self):
|
def test_dont_copy_file_onto_link_to_itself(self):
|
||||||
# bug 851123.
|
# bug 851123.
|
||||||
|
|
|
@ -61,6 +61,9 @@ Core and builtins
|
||||||
Library
|
Library
|
||||||
-------
|
-------
|
||||||
|
|
||||||
|
- Bug #1525866: Don't copy directory stat times in
|
||||||
|
shutil.copytree on Windows
|
||||||
|
|
||||||
- Bug #1002398: The documentation for os.path.sameopenfile now correctly
|
- Bug #1002398: The documentation for os.path.sameopenfile now correctly
|
||||||
refers to file descriptors, not file objects.
|
refers to file descriptors, not file objects.
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue