diff options
author | Antoine Pitrou <solipsis@pitrou.net> | 2014-10-30 18:37:07 (GMT) |
---|---|---|
committer | Antoine Pitrou <solipsis@pitrou.net> | 2014-10-30 18:37:07 (GMT) |
commit | ed14c86facb62c4fb3fcff73c8ea3860c7dc8d29 (patch) | |
tree | 21fccec2a2ffc24248752c1ecb3e9be227e3a79f /Lib/distutils/tests | |
parent | 5e78f4daa8d4d6b2813401fbb6846929941e9a57 (diff) | |
download | cpython-ed14c86facb62c4fb3fcff73c8ea3860c7dc8d29.zip cpython-ed14c86facb62c4fb3fcff73c8ea3860c7dc8d29.tar.gz cpython-ed14c86facb62c4fb3fcff73c8ea3860c7dc8d29.tar.bz2 |
Issue #8876: distutils now falls back to copying files when hard linking doesn't work.
This allows use with special filesystems such as VirtualBox shared folders.
Diffstat (limited to 'Lib/distutils/tests')
-rw-r--r-- | Lib/distutils/tests/test_file_util.py | 32 |
1 files changed, 31 insertions, 1 deletions
diff --git a/Lib/distutils/tests/test_file_util.py b/Lib/distutils/tests/test_file_util.py index d3db5ce..a6d04f0 100644 --- a/Lib/distutils/tests/test_file_util.py +++ b/Lib/distutils/tests/test_file_util.py @@ -5,7 +5,7 @@ import shutil import errno from unittest.mock import patch -from distutils.file_util import move_file +from distutils.file_util import move_file, copy_file from distutils import log from distutils.tests import support from distutils.errors import DistutilsFileError @@ -78,6 +78,36 @@ class FileUtilTestCase(support.TempdirManager, unittest.TestCase): fobj.write('spam eggs') move_file(self.source, self.target, verbose=0) + def test_copy_file_hard_link(self): + with open(self.source, 'w') as f: + f.write('some content') + st = os.stat(self.source) + copy_file(self.source, self.target, link='hard') + st2 = os.stat(self.source) + st3 = os.stat(self.target) + self.assertTrue(os.path.samestat(st, st2), (st, st2)) + self.assertTrue(os.path.samestat(st2, st3), (st2, st3)) + with open(self.source, 'r') as f: + self.assertEqual(f.read(), 'some content') + + def test_copy_file_hard_link_failure(self): + # If hard linking fails, copy_file() falls back on copying file + # (some special filesystems don't support hard linking even under + # Unix, see issue #8876). + with open(self.source, 'w') as f: + f.write('some content') + st = os.stat(self.source) + with patch("os.link", side_effect=OSError(0, "linking unsupported")): + copy_file(self.source, self.target, link='hard') + st2 = os.stat(self.source) + st3 = os.stat(self.target) + self.assertTrue(os.path.samestat(st, st2), (st, st2)) + self.assertFalse(os.path.samestat(st2, st3), (st2, st3)) + for fn in (self.source, self.target): + with open(fn, 'r') as f: + self.assertEqual(f.read(), 'some content') + + def test_suite(): return unittest.makeSuite(FileUtilTestCase) |