forked from TrueCloudLab/rclone
vfs: Implement renaming of directories for backends without DirMove #2539
Previously to this change, backends without the optional interface DirMove could not rename directories. This change uses the new operations.DirMove call to implement renaming directories which will fall back to Move/Copy as necessary.
This commit is contained in:
parent
bbd03f49a4
commit
53a8b5a275
1 changed files with 5 additions and 4 deletions
|
@ -10,6 +10,7 @@ import (
|
|||
|
||||
"github.com/ncw/rclone/fs"
|
||||
"github.com/ncw/rclone/fs/list"
|
||||
"github.com/ncw/rclone/fs/operations"
|
||||
"github.com/ncw/rclone/fs/walk"
|
||||
"github.com/pkg/errors"
|
||||
)
|
||||
|
@ -576,15 +577,15 @@ func (d *Dir) Rename(oldName, newName string, destDir *Dir) error {
|
|||
return err
|
||||
}
|
||||
case fs.Directory:
|
||||
doDirMove := d.f.Features().DirMove
|
||||
if doDirMove == nil {
|
||||
err := errors.Errorf("Fs %q can't rename directories (no DirMove)", d.f)
|
||||
features := d.f.Features()
|
||||
if features.DirMove == nil && features.Move == nil && features.Copy == nil {
|
||||
err := errors.Errorf("Fs %q can't rename directories (no DirMove, Move or Copy)", d.f)
|
||||
fs.Errorf(oldPath, "Dir.Rename error: %v", err)
|
||||
return err
|
||||
}
|
||||
srcRemote := x.Remote()
|
||||
dstRemote := newPath
|
||||
err = doDirMove(d.f, srcRemote, dstRemote)
|
||||
err = operations.DirMove(d.f, srcRemote, dstRemote)
|
||||
if err != nil {
|
||||
fs.Errorf(oldPath, "Dir.Rename error: %v", err)
|
||||
return err
|
||||
|
|
Loading…
Add table
Reference in a new issue