gh-113803: Fix inaccurate documentation for shutil.move when dst is an existing directory (#113837)

* fix the usage of dst and destination in shutil.move doc
* update shutil.move doc
This commit is contained in:
Dai Wentao 2024-02-05 02:42:58 +08:00 committed by GitHub
parent d466052ad4
commit da8f9fb2ea
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 19 additions and 16 deletions

View File

@ -360,21 +360,24 @@ Directory and files operations
.. function:: move(src, dst, copy_function=copy2)
Recursively move a file or directory (*src*) to another location (*dst*)
and return the destination.
Recursively move a file or directory (*src*) to another location and return
the destination.
If the destination is an existing directory, then *src* is moved inside that
directory. If the destination already exists but is not a directory, it may
be overwritten depending on :func:`os.rename` semantics.
If *dst* is an existing directory or a symlink to a directory, then *src*
is moved inside that directory. The destination path in that directory must
not already exist.
If *dst* already exists but is not a directory, it may be overwritten
depending on :func:`os.rename` semantics.
If the destination is on the current filesystem, then :func:`os.rename` is
used. Otherwise, *src* is copied to *dst* using *copy_function* and then
removed. In case of symlinks, a new symlink pointing to the target of *src*
will be created in or as *dst* and *src* will be removed.
used. Otherwise, *src* is copied to the destination using *copy_function*
and then removed. In case of symlinks, a new symlink pointing to the target
of *src* will be created as the destination and *src* will be removed.
If *copy_function* is given, it must be a callable that takes two arguments
*src* and *dst*, and will be used to copy *src* to *dst* if
:func:`os.rename` cannot be used. If the source is a directory,
If *copy_function* is given, it must be a callable that takes two arguments,
*src* and the destination, and will be used to copy *src* to the destination
if :func:`os.rename` cannot be used. If the source is a directory,
:func:`copytree` is called, passing it the *copy_function*. The
default *copy_function* is :func:`copy2`. Using :func:`~shutil.copy` as the
*copy_function* allows the move to succeed when it is not possible to also

View File

@ -861,12 +861,12 @@ def move(src, dst, copy_function=copy2):
similar to the Unix "mv" command. Return the file or directory's
destination.
If the destination is a directory or a symlink to a directory, the source
is moved inside the directory. The destination path must not already
exist.
If dst is an existing directory or a symlink to a directory, then src is
moved inside that directory. The destination path in that directory must
not already exist.
If the destination already exists but is not a directory, it may be
overwritten depending on os.rename() semantics.
If dst already exists but is not a directory, it may be overwritten
depending on os.rename() semantics.
If the destination is on our current filesystem, then rename() is used.
Otherwise, src is copied to the destination and then removed. Symlinks are