diff options
author | R David Murray <rdmurray@bitdance.com> | 2014-06-11 18:40:13 (GMT) |
---|---|---|
committer | R David Murray <rdmurray@bitdance.com> | 2014-06-11 18:40:13 (GMT) |
commit | 6ffface4293f20e504de6a7ca012c482a203409d (patch) | |
tree | 06d09d0290dfdaa7c0c990a060dc958710126cdc /Lib/shutil.py | |
parent | 6fe56a329dd427f2a5363b43ad24f04785d2091d (diff) | |
download | cpython-6ffface4293f20e504de6a7ca012c482a203409d.zip cpython-6ffface4293f20e504de6a7ca012c482a203409d.tar.gz cpython-6ffface4293f20e504de6a7ca012c482a203409d.tar.bz2 |
#19840: Add copy_function to shutil.move.
Patch by Claudiu Popa.
Diffstat (limited to 'Lib/shutil.py')
-rw-r--r-- | Lib/shutil.py | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/Lib/shutil.py b/Lib/shutil.py index 508a368..b59017b 100644 --- a/Lib/shutil.py +++ b/Lib/shutil.py @@ -486,7 +486,7 @@ def _basename(path): sep = os.path.sep + (os.path.altsep or '') return os.path.basename(path.rstrip(sep)) -def move(src, dst): +def move(src, dst, copy_function=copy2): """Recursively move a file or directory to another location. This is similar to the Unix "mv" command. Return the file or directory's destination. @@ -503,6 +503,11 @@ def move(src, dst): recreated under the new name if os.rename() fails because of cross filesystem renames. + The optional `copy_function` argument is a callable that will be used + to copy the source or it will be delegated to `copytree`. + By default, copy2() is used, but any function that supports the same + signature (like copy()) can be used. + A lot more could be done here... A look at a mv.c shows a lot of the issues this implementation glosses over. @@ -527,11 +532,13 @@ def move(src, dst): os.unlink(src) elif os.path.isdir(src): if _destinsrc(src, dst): - raise Error("Cannot move a directory '%s' into itself '%s'." % (src, dst)) - copytree(src, real_dst, symlinks=True) + raise Error("Cannot move a directory '%s' into itself" + " '%s'." % (src, dst)) + copytree(src, real_dst, copy_function=copy_function, + symlinks=True) rmtree(src) else: - copy2(src, real_dst) + copy_function(src, real_dst) os.unlink(src) return real_dst |