mirror of
https://github.com/rclone/rclone.git
synced 2025-01-09 15:58:28 +01:00
operations: fix move when dst is nil and fdst is case-insensitive
Before this change, the MoveCaseInsensitive logic in operations.move made the assumption that dst != nil && remote != "". After this change, it should work correctly when either one is present without the other.
This commit is contained in:
parent
f2e693f722
commit
5323a21898
@ -446,6 +446,7 @@ func move(ctx context.Context, fdst fs.Fs, dst fs.Object, remote string, src fs.
|
|||||||
if doMove := fdst.Features().Move; doMove != nil && (SameConfig(src.Fs(), fdst) || (SameRemoteType(src.Fs(), fdst) && (fdst.Features().ServerSideAcrossConfigs || ci.ServerSideAcrossConfigs))) {
|
if doMove := fdst.Features().Move; doMove != nil && (SameConfig(src.Fs(), fdst) || (SameRemoteType(src.Fs(), fdst) && (fdst.Features().ServerSideAcrossConfigs || ci.ServerSideAcrossConfigs))) {
|
||||||
// Delete destination if it exists and is not the same file as src (could be same file while seemingly different if the remote is case insensitive)
|
// Delete destination if it exists and is not the same file as src (could be same file while seemingly different if the remote is case insensitive)
|
||||||
if dst != nil {
|
if dst != nil {
|
||||||
|
remote = dst.Remote()
|
||||||
if !SameObject(src, dst) {
|
if !SameObject(src, dst) {
|
||||||
err = DeleteFile(ctx, dst)
|
err = DeleteFile(ctx, dst)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -456,6 +457,10 @@ func move(ctx context.Context, fdst fs.Fs, dst fs.Object, remote string, src fs.
|
|||||||
return MoveCaseInsensitive(ctx, fdst, fdst, remote, src.Remote(), false, src)
|
return MoveCaseInsensitive(ctx, fdst, fdst, remote, src.Remote(), false, src)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else if needsMoveCaseInsensitive(fdst, fdst, remote, src.Remote(), false) {
|
||||||
|
doMove = func(ctx context.Context, src fs.Object, remote string) (fs.Object, error) {
|
||||||
|
return MoveCaseInsensitive(ctx, fdst, fdst, remote, src.Remote(), false, src)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// Move dst <- src
|
// Move dst <- src
|
||||||
in := tr.Account(ctx, nil) // account the transfer
|
in := tr.Account(ctx, nil) // account the transfer
|
||||||
|
Loading…
Reference in New Issue
Block a user