From 53a8b5a2754e0abe2e89aec67a07fa98e9adde8a Mon Sep 17 00:00:00 2001 From: Nick Craig-Wood Date: Tue, 15 Jan 2019 11:45:44 +0000 Subject: [PATCH] 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. --- vfs/dir.go | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/vfs/dir.go b/vfs/dir.go index 82ff5693c..da857c70e 100644 --- a/vfs/dir.go +++ b/vfs/dir.go @@ -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