def move(src, dst):
"""Rewrite of shutil.move() that uses our copy of copytree()."""
# If dst is a directory, then we try to move src into it.
if os.path.isdir(dst):
dst = os.path.join(dst,
os.path.basename(src).rstrip(os.path.sep))
try:
os.rename(src, dst)
except EnvironmentError as e:
# Access to protected member; pylint: disable=W0212
s = os.lstat(src)
if e.errno == errno.EXDEV:
if S_ISDIR(s.st_mode):
copytree(src, dst)
shutil.rmtree(src)
else:
shutil.copyfile(src, dst)
os.chmod(dst, S_IMODE(s.st_mode))
os.chown(dst, s.st_uid, s.st_gid)
os.utime(dst, (s.st_atime, s.st_mtime))
os.unlink(src)
elif e.errno == errno.EINVAL and S_ISDIR(s.st_mode):
raise shutil.Error("Cannot move a directory '{0}' "
"into itself '{1}'.".format(src, dst))
elif e.errno == errno.ENOTDIR and S_ISDIR(s.st_mode):
raise shutil.Error("Destination path '{0}' already "
"exists".format(dst))
else:
raise api_errors._convert_error(e)
评论列表
文章目录