From 1c301f9f7ab8bf00d04331acc26b5195820ed1cf Mon Sep 17 00:00:00 2001 From: Nick Craig-Wood Date: Mon, 25 Mar 2019 17:12:10 +0000 Subject: [PATCH] drive: Fix creation of duplicates with server side copy - fixes #3067 --- backend/drive/drive.go | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/backend/drive/drive.go b/backend/drive/drive.go index 652c6b084..032e126fb 100644 --- a/backend/drive/drive.go +++ b/backend/drive/drive.go @@ -1872,6 +1872,9 @@ func (f *Fs) Copy(src fs.Object, remote string) (fs.Object, error) { remote = remote[:len(remote)-len(ext)] } + // Look to see if there is an existing object + existingObject, _ := f.NewObject(remote) + createInfo, err := f.createFileInfo(remote, src.ModTime()) if err != nil { return nil, err @@ -1889,7 +1892,17 @@ func (f *Fs) Copy(src fs.Object, remote string) (fs.Object, error) { if err != nil { return nil, err } - return f.newObjectWithInfo(remote, info) + newObject, err := f.newObjectWithInfo(remote, info) + if err != nil { + return nil, err + } + if existingObject != nil { + err = existingObject.Remove() + if err != nil { + fs.Errorf(existingObject, "Failed to remove existing object after copy: %v", err) + } + } + return newObject, nil } // Purge deletes all the files and the container