mirror of
https://github.com/rclone/rclone.git
synced 2024-11-22 00:13:49 +01:00
gofile: fix server side copying over existing object
This was creating a duplicate.
This commit is contained in:
parent
2f7a30cf61
commit
3e14ba54b8
@ -1214,7 +1214,7 @@ func (f *Fs) copyTo(ctx context.Context, srcID, srcLeaf, dstLeaf, dstDirectoryID
|
|||||||
// Will only be called if src.Fs().Name() == f.Name()
|
// Will only be called if src.Fs().Name() == f.Name()
|
||||||
//
|
//
|
||||||
// If it isn't possible then return fs.ErrorCantCopy
|
// If it isn't possible then return fs.ErrorCantCopy
|
||||||
func (f *Fs) Copy(ctx context.Context, src fs.Object, remote string) (fs.Object, error) {
|
func (f *Fs) Copy(ctx context.Context, src fs.Object, remote string) (dst fs.Object, err error) {
|
||||||
srcObj, ok := src.(*Object)
|
srcObj, ok := src.(*Object)
|
||||||
if !ok {
|
if !ok {
|
||||||
fs.Debugf(src, "Can't copy - not same remote type")
|
fs.Debugf(src, "Can't copy - not same remote type")
|
||||||
@ -1228,6 +1228,19 @@ func (f *Fs) Copy(ctx context.Context, src fs.Object, remote string) (fs.Object,
|
|||||||
return nil, fmt.Errorf("can't copy %q -> %q as are same name", srcPath, dstPath)
|
return nil, fmt.Errorf("can't copy %q -> %q as are same name", srcPath, dstPath)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Find existing object
|
||||||
|
existingObj, err := f.NewObject(ctx, remote)
|
||||||
|
if err == nil {
|
||||||
|
defer func() {
|
||||||
|
// Don't remove existing object if returning an error
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
fs.Debugf(existingObj, "Server side copy: removing existing object after successful copy")
|
||||||
|
err = existingObj.Remove(ctx)
|
||||||
|
}()
|
||||||
|
}
|
||||||
|
|
||||||
// Create temporary object
|
// Create temporary object
|
||||||
dstObj, dstLeaf, dstDirectoryID, err := f.createObject(ctx, remote, srcObj.modTime, srcObj.size)
|
dstObj, dstLeaf, dstDirectoryID, err := f.createObject(ctx, remote, srcObj.modTime, srcObj.size)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
Loading…
Reference in New Issue
Block a user