make moveto/copyto no-ops when source and destination are the same (fixes #1261)

This commit is contained in:
Stefan Breunig 2017-05-27 17:30:26 +02:00 committed by Nick Craig-Wood
parent 71028e0f06
commit decd960867
2 changed files with 15 additions and 0 deletions

View File

@ -1502,6 +1502,11 @@ func Rmdirs(f Fs, dir string) error {
// moveOrCopyFile moves or copies a single file possibly to a new name // moveOrCopyFile moves or copies a single file possibly to a new name
func moveOrCopyFile(fdst Fs, fsrc Fs, dstFileName string, srcFileName string, cp bool) (err error) { func moveOrCopyFile(fdst Fs, fsrc Fs, dstFileName string, srcFileName string, cp bool) (err error) {
if fdst.Name() == fsrc.Name() && dstFileName == srcFileName {
Debugf(fdst, "don't need to copy/move %s, it is already at target location", dstFileName)
return nil
}
// Choose operations // Choose operations
Op := Move Op := Move
if cp { if cp {

View File

@ -798,6 +798,11 @@ func TestMoveFile(t *testing.T) {
require.NoError(t, err) require.NoError(t, err)
fstest.CheckItems(t, r.flocal) fstest.CheckItems(t, r.flocal)
fstest.CheckItems(t, r.fremote, file2) fstest.CheckItems(t, r.fremote, file2)
err = fs.MoveFile(r.fremote, r.flocal, file2.Path, file2.Path)
require.NoError(t, err)
fstest.CheckItems(t, r.flocal)
fstest.CheckItems(t, r.fremote, file2)
} }
func TestCopyFile(t *testing.T) { func TestCopyFile(t *testing.T) {
@ -819,6 +824,11 @@ func TestCopyFile(t *testing.T) {
require.NoError(t, err) require.NoError(t, err)
fstest.CheckItems(t, r.flocal, file1) fstest.CheckItems(t, r.flocal, file1)
fstest.CheckItems(t, r.fremote, file2) fstest.CheckItems(t, r.fremote, file2)
err = fs.CopyFile(r.fremote, r.flocal, file2.Path, file2.Path)
require.NoError(t, err)
fstest.CheckItems(t, r.flocal, file1)
fstest.CheckItems(t, r.fremote, file2)
} }
// testFsInfo is for unit testing fs.Info // testFsInfo is for unit testing fs.Info