mirror of
https://github.com/python/cpython.git
synced 2025-08-04 00:48:58 +00:00
gh-88513: clarify shutil.copytree's dirs_exist_ok arg (GH-91434)
* add a paragraph to document this kwarg in detail * update docstring in the source accordingly
This commit is contained in:
parent
9ebcece82f
commit
f33e2c87a8
3 changed files with 17 additions and 9 deletions
|
@ -230,9 +230,8 @@ Directory and files operations
|
||||||
dirs_exist_ok=False)
|
dirs_exist_ok=False)
|
||||||
|
|
||||||
Recursively copy an entire directory tree rooted at *src* to a directory
|
Recursively copy an entire directory tree rooted at *src* to a directory
|
||||||
named *dst* and return the destination directory. *dirs_exist_ok* dictates
|
named *dst* and return the destination directory. All intermediate
|
||||||
whether to raise an exception in case *dst* or any missing parent directory
|
directories needed to contain *dst* will also be created by default.
|
||||||
already exists.
|
|
||||||
|
|
||||||
Permissions and times of directories are copied with :func:`copystat`,
|
Permissions and times of directories are copied with :func:`copystat`,
|
||||||
individual files are copied using :func:`~shutil.copy2`.
|
individual files are copied using :func:`~shutil.copy2`.
|
||||||
|
@ -263,8 +262,14 @@ Directory and files operations
|
||||||
|
|
||||||
If *copy_function* is given, it must be a callable that will be used to copy
|
If *copy_function* is given, it must be a callable that will be used to copy
|
||||||
each file. It will be called with the source path and the destination path
|
each file. It will be called with the source path and the destination path
|
||||||
as arguments. By default, :func:`~shutil.copy2` is used, but any function
|
as arguments. By default, :func:`~shutil.copy2` is used, but any function
|
||||||
that supports the same signature (like :func:`~shutil.copy`) can be used.
|
that supports the same signature (like :func:`~shutil.copy`) can be used.
|
||||||
|
|
||||||
|
If *dirs_exist_ok* is false (the default) and *dst* already exists, a
|
||||||
|
:exc:`FileExistsError` is raised. If *dirs_exist_ok* is true, the copying
|
||||||
|
operation will continue if it encounters existing directories, and files
|
||||||
|
within the *dst* tree will be overwritten by corresponding files from the
|
||||||
|
*src* tree.
|
||||||
|
|
||||||
.. audit-event:: shutil.copytree src,dst shutil.copytree
|
.. audit-event:: shutil.copytree src,dst shutil.copytree
|
||||||
|
|
||||||
|
@ -275,7 +280,7 @@ Directory and files operations
|
||||||
.. versionchanged:: 3.2
|
.. versionchanged:: 3.2
|
||||||
Added the *copy_function* argument to be able to provide a custom copy
|
Added the *copy_function* argument to be able to provide a custom copy
|
||||||
function.
|
function.
|
||||||
Added the *ignore_dangling_symlinks* argument to silent dangling symlinks
|
Added the *ignore_dangling_symlinks* argument to silence dangling symlinks
|
||||||
errors when *symlinks* is false.
|
errors when *symlinks* is false.
|
||||||
|
|
||||||
.. versionchanged:: 3.8
|
.. versionchanged:: 3.8
|
||||||
|
|
|
@ -518,9 +518,6 @@ def copytree(src, dst, symlinks=False, ignore=None, copy_function=copy2,
|
||||||
ignore_dangling_symlinks=False, dirs_exist_ok=False):
|
ignore_dangling_symlinks=False, dirs_exist_ok=False):
|
||||||
"""Recursively copy a directory tree and return the destination directory.
|
"""Recursively copy a directory tree and return the destination directory.
|
||||||
|
|
||||||
dirs_exist_ok dictates whether to raise an exception in case dst or any
|
|
||||||
missing parent directory already exists.
|
|
||||||
|
|
||||||
If exception(s) occur, an Error is raised with a list of reasons.
|
If exception(s) occur, an Error is raised with a list of reasons.
|
||||||
|
|
||||||
If the optional symlinks flag is true, symbolic links in the
|
If the optional symlinks flag is true, symbolic links in the
|
||||||
|
@ -551,6 +548,11 @@ def copytree(src, dst, symlinks=False, ignore=None, copy_function=copy2,
|
||||||
destination path as arguments. By default, copy2() is used, but any
|
destination path as arguments. By default, copy2() is used, but any
|
||||||
function that supports the same signature (like copy()) can be used.
|
function that supports the same signature (like copy()) can be used.
|
||||||
|
|
||||||
|
If dirs_exist_ok is false (the default) and `dst` already exists, a
|
||||||
|
`FileExistsError` is raised. If `dirs_exist_ok` is true, the copying
|
||||||
|
operation will continue if it encounters existing directories, and files
|
||||||
|
within the `dst` tree will be overwritten by corresponding files from the
|
||||||
|
`src` tree.
|
||||||
"""
|
"""
|
||||||
sys.audit("shutil.copytree", src, dst)
|
sys.audit("shutil.copytree", src, dst)
|
||||||
with os.scandir(src) as itr:
|
with os.scandir(src) as itr:
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
Clarify the meaning of *dirs_exist_ok*, a kwarg of :func:`shutil.copytree`.
|
Loading…
Add table
Add a link
Reference in a new issue