sync: use operations.DirMove instead of sync.MoveDir for --fix-case - #7591

This should be more efficient for the purposes of --fix-case, as operations.DirMove
accepts `srcRemote` and `dstRemote` arguments, while sync.MoveDir does not.

This also factors the two-step-move logic to operations.DirMoveCaseInsensitive, so
that it is reusable by other commands.
This commit is contained in:
nielash
2024-02-09 10:37:14 -05:00
parent dfe76570a1
commit 137f7f62fb
2 changed files with 15 additions and 19 deletions

View File

@ -2288,6 +2288,17 @@ func DirMove(ctx context.Context, f fs.Fs, srcRemote, dstRemote string) (err err
return nil
}
// DirMoveCaseInsensitive does DirMove in two steps (to temp name, then real name)
// which is necessary for some case-insensitive backends
func DirMoveCaseInsensitive(ctx context.Context, f fs.Fs, srcRemote, dstRemote string) (err error) {
tmpDstRemote := dstRemote + "-rclone-move-" + random.String(8)
err = DirMove(ctx, f, srcRemote, tmpDstRemote)
if err != nil {
return err
}
return DirMove(ctx, f, tmpDstRemote, dstRemote)
}
// FsInfo provides information about a remote
type FsInfo struct {
// Name of the remote (as passed into NewFs)