summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJürg Billeter <j@bitron.ch>2020-06-10 08:04:52 +0200
committerJürg Billeter <j@bitron.ch>2020-06-10 10:39:41 +0200
commitab8257abb6b2b0e30033550362b5dbd31dd4bc65 (patch)
treecc68a43131773669bb3cdafd9d54d858b428130e
parentd9fc31bc51ef7bf5e5cbebffd345082487416338 (diff)
downloadbuildstream-ab8257abb6b2b0e30033550362b5dbd31dd4bc65.tar.gz
utils.py: Fix error handling in safe_copy()
Catch errors raised by `shutil.copyfile()`.
-rw-r--r--src/buildstream/utils.py9
1 files changed, 5 insertions, 4 deletions
diff --git a/src/buildstream/utils.py b/src/buildstream/utils.py
index 99c22d169..9591951e8 100644
--- a/src/buildstream/utils.py
+++ b/src/buildstream/utils.py
@@ -385,7 +385,11 @@ def safe_copy(src: str, dest: str, *, result: Optional[FileListResult] = None) -
if e.errno != errno.ENOENT:
raise UtilError("Failed to remove destination file '{}': {}".format(dest, e)) from e
- shutil.copyfile(src, dest)
+ try:
+ shutil.copyfile(src, dest)
+ except (OSError, shutil.Error) as e:
+ raise UtilError("Failed to copy '{} -> {}': {}".format(src, dest, e)) from e
+
try:
shutil.copystat(src, dest)
except PermissionError:
@@ -398,9 +402,6 @@ def safe_copy(src: str, dest: str, *, result: Optional[FileListResult] = None) -
if result:
result.failed_attributes.append(dest)
- except shutil.Error as e:
- raise UtilError("Failed to copy '{} -> {}': {}".format(src, dest, e)) from e
-
def safe_link(src: str, dest: str, *, result: Optional[FileListResult] = None, _unlink=False) -> None:
"""Try to create a hardlink, but resort to copying in the case of cross device links.