summaryrefslogtreecommitdiffstats
path: root/Lib/shutil.py
diff options
context:
space:
mode:
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>2021-09-21 22:14:40 (GMT)
committerGitHub <noreply@github.com>2021-09-21 22:14:40 (GMT)
commit41d48bc038b254cc4a78a2d840097196b9545a84 (patch)
treece4d3793d9fd8918baabdaf32182f6f99ddf1830 /Lib/shutil.py
parente6b6c1d23b3702052637f70551451d12695403a1 (diff)
downloadcpython-41d48bc038b254cc4a78a2d840097196b9545a84.zip
cpython-41d48bc038b254cc4a78a2d840097196b9545a84.tar.gz
cpython-41d48bc038b254cc4a78a2d840097196b9545a84.tar.bz2
bpo-45234: Fix FileNotFound exception raised instead of IsADirectoryError in shutil.copyfile() (GH-28421) (GH-28508)
This was a regression from fixing BPO-43219. (cherry picked from commit b7eac52b466f697d3e89f47508e0df0196a98970) Co-authored-by: andrei kulakov <andrei.avk@gmail.com>
Diffstat (limited to 'Lib/shutil.py')
-rw-r--r--Lib/shutil.py59
1 files changed, 30 insertions, 29 deletions
diff --git a/Lib/shutil.py b/Lib/shutil.py
index d749b84..0056a1b 100644
--- a/Lib/shutil.py
+++ b/Lib/shutil.py
@@ -251,36 +251,37 @@ def copyfile(src, dst, *, follow_symlinks=True):
if not follow_symlinks and _islink(src):
os.symlink(os.readlink(src), dst)
else:
- try:
- with open(src, 'rb') as fsrc, open(dst, 'wb') as fdst:
- # macOS
- if _HAS_FCOPYFILE:
- try:
- _fastcopy_fcopyfile(fsrc, fdst, posix._COPYFILE_DATA)
- return dst
- except _GiveupOnFastCopy:
- pass
- # Linux
- elif _USE_CP_SENDFILE:
- try:
- _fastcopy_sendfile(fsrc, fdst)
+ with open(src, 'rb') as fsrc:
+ try:
+ with open(dst, 'wb') as fdst:
+ # macOS
+ if _HAS_FCOPYFILE:
+ try:
+ _fastcopy_fcopyfile(fsrc, fdst, posix._COPYFILE_DATA)
+ return dst
+ except _GiveupOnFastCopy:
+ pass
+ # Linux
+ elif _USE_CP_SENDFILE:
+ try:
+ _fastcopy_sendfile(fsrc, fdst)
+ return dst
+ except _GiveupOnFastCopy:
+ pass
+ # Windows, see:
+ # https://github.com/python/cpython/pull/7160#discussion_r195405230
+ elif _WINDOWS and file_size > 0:
+ _copyfileobj_readinto(fsrc, fdst, min(file_size, COPY_BUFSIZE))
return dst
- except _GiveupOnFastCopy:
- pass
- # Windows, see:
- # https://github.com/python/cpython/pull/7160#discussion_r195405230
- elif _WINDOWS and file_size > 0:
- _copyfileobj_readinto(fsrc, fdst, min(file_size, COPY_BUFSIZE))
- return dst
-
- copyfileobj(fsrc, fdst)
-
- # Issue 43219, raise a less confusing exception
- except IsADirectoryError as e:
- if os.path.exists(dst):
- raise
- else:
- raise FileNotFoundError(f'Directory does not exist: {dst}') from e
+
+ copyfileobj(fsrc, fdst)
+
+ # Issue 43219, raise a less confusing exception
+ except IsADirectoryError as e:
+ if not os.path.exists(dst):
+ raise FileNotFoundError(f'Directory does not exist: {dst}') from e
+ else:
+ raise
return dst