diff --git a/src/calibre/utils/copy_files.py b/src/calibre/utils/copy_files.py index 7cddf9b9b0..540b96bf31 100644 --- a/src/calibre/utils/copy_files.py +++ b/src/calibre/utils/copy_files.py @@ -91,7 +91,7 @@ class WindowsFileCopier: for path, file_id in self.path_to_fileid_map.items(): self.fileid_to_paths_map[file_id].add(path) for src in self.copy_map: - self.path_to_handle_map = self._open_file(src) + self.path_to_handle_map[src] = self._open_file(src) def __exit__(self, *a) -> None: for h in self.path_to_handle_map.values(): diff --git a/src/calibre/utils/copy_files_test.py b/src/calibre/utils/copy_files_test.py index 2b0c979612..1d7394bb39 100644 --- a/src/calibre/utils/copy_files_test.py +++ b/src/calibre/utils/copy_files_test.py @@ -7,6 +7,7 @@ import tempfile import time import unittest +from calibre import walk from calibre.constants import iswindows from .copy_files import copy_tree @@ -79,6 +80,14 @@ class TestCopyFiles(unittest.TestCase): if not iswindows: self.ae(os.readlink(self.d('link.extra')), 'sub/a') + self.reset() + src, dest = self.s(), self.d() + if iswindows: + with open(self.s('sub/a')) as locked: + locked + self.assertRaises(IOError, copy_tree, src, dest) + self.ae(os.listdir(self.d()), ['sub']) + self.assertFalse(tuple(walk(self.d()))) def find_tests(): return unittest.defaultTestLoader.loadTestsFromTestCase(TestCopyFiles)