aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/Lib/pathlib/_abc.py
diff options
context:
space:
mode:
Diffstat (limited to 'Lib/pathlib/_abc.py')
-rw-r--r--Lib/pathlib/_abc.py52
1 files changed, 19 insertions, 33 deletions
diff --git a/Lib/pathlib/_abc.py b/Lib/pathlib/_abc.py
index 2c246430a69..11c8018b28f 100644
--- a/Lib/pathlib/_abc.py
+++ b/Lib/pathlib/_abc.py
@@ -865,48 +865,35 @@ class PathBase(PurePathBase):
raise
def copy(self, target, *, follow_symlinks=True, dirs_exist_ok=False,
- preserve_metadata=False, ignore=None, on_error=None):
+ preserve_metadata=False):
"""
Recursively copy this file or directory tree to the given destination.
"""
if not isinstance(target, PathBase):
target = self.with_segments(target)
- try:
- self._ensure_distinct_path(target)
- except OSError as err:
- if on_error is None:
- raise
- on_error(err)
- return
+ self._ensure_distinct_path(target)
stack = [(self, target)]
while stack:
src, dst = stack.pop()
- try:
- if not follow_symlinks and src.is_symlink():
- dst._symlink_to_target_of(src)
- if preserve_metadata:
- src._copy_metadata(dst, follow_symlinks=False)
- elif src.is_dir():
- children = src.iterdir()
- dst.mkdir(exist_ok=dirs_exist_ok)
- for child in children:
- if not (ignore and ignore(child)):
- stack.append((child, dst.joinpath(child.name)))
- if preserve_metadata:
- src._copy_metadata(dst)
- else:
- src._copy_file(dst)
- if preserve_metadata:
- src._copy_metadata(dst)
- except OSError as err:
- if on_error is None:
- raise
- on_error(err)
+ if not follow_symlinks and src.is_symlink():
+ dst._symlink_to_target_of(src)
+ if preserve_metadata:
+ src._copy_metadata(dst, follow_symlinks=False)
+ elif src.is_dir():
+ children = src.iterdir()
+ dst.mkdir(exist_ok=dirs_exist_ok)
+ stack.extend((child, dst.joinpath(child.name))
+ for child in children)
+ if preserve_metadata:
+ src._copy_metadata(dst)
+ else:
+ src._copy_file(dst)
+ if preserve_metadata:
+ src._copy_metadata(dst)
return target
def copy_into(self, target_dir, *, follow_symlinks=True,
- dirs_exist_ok=False, preserve_metadata=False, ignore=None,
- on_error=None):
+ dirs_exist_ok=False, preserve_metadata=False):
"""
Copy this file or directory tree into the given existing directory.
"""
@@ -919,8 +906,7 @@ class PathBase(PurePathBase):
target = self.with_segments(target_dir, name)
return self.copy(target, follow_symlinks=follow_symlinks,
dirs_exist_ok=dirs_exist_ok,
- preserve_metadata=preserve_metadata, ignore=ignore,
- on_error=on_error)
+ preserve_metadata=preserve_metadata)
def rename(self, target):
"""