forked from TrueCloudLab/rclone
docs: spelling: server-side
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com>
This commit is contained in:
parent
87e54f2dde
commit
bbe7eb35f1
53 changed files with 194 additions and 194 deletions
|
@ -680,7 +680,7 @@ func (f *Fs) Mkdir(ctx context.Context, dir string) error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// Move src to this remote using server side move operations.
|
// Move src to this remote using server-side move operations.
|
||||||
//
|
//
|
||||||
// This is stored with the remote path given
|
// This is stored with the remote path given
|
||||||
//
|
//
|
||||||
|
@ -745,7 +745,7 @@ func (f *Fs) DirCacheFlush() {
|
||||||
}
|
}
|
||||||
|
|
||||||
// DirMove moves src, srcRemote to this remote at dstRemote
|
// DirMove moves src, srcRemote to this remote at dstRemote
|
||||||
// using server side move operations.
|
// using server-side move operations.
|
||||||
//
|
//
|
||||||
// Will only be called if src.Fs().Name() == f.Name()
|
// Will only be called if src.Fs().Name() == f.Name()
|
||||||
//
|
//
|
||||||
|
@ -893,7 +893,7 @@ func (f *Fs) Hashes() hash.Set {
|
||||||
return hash.Set(hash.MD5)
|
return hash.Set(hash.MD5)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Copy src to this remote using server side copy operations.
|
// Copy src to this remote using server-side copy operations.
|
||||||
//
|
//
|
||||||
// This is stored with the remote path given
|
// This is stored with the remote path given
|
||||||
//
|
//
|
||||||
|
|
|
@ -976,7 +976,7 @@ func (f *Fs) Purge(ctx context.Context, dir string) error {
|
||||||
return f.deleteContainer(ctx, container)
|
return f.deleteContainer(ctx, container)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Copy src to this remote using server side copy operations.
|
// Copy src to this remote using server-side copy operations.
|
||||||
//
|
//
|
||||||
// This is stored with the remote path given
|
// This is stored with the remote path given
|
||||||
//
|
//
|
||||||
|
|
|
@ -121,7 +121,7 @@ This value should be set no larger than 4.657GiB (== 5GB).`,
|
||||||
Name: "copy_cutoff",
|
Name: "copy_cutoff",
|
||||||
Help: `Cutoff for switching to multipart copy
|
Help: `Cutoff for switching to multipart copy
|
||||||
|
|
||||||
Any files larger than this that need to be server side copied will be
|
Any files larger than this that need to be server-side copied will be
|
||||||
copied in chunks of this size.
|
copied in chunks of this size.
|
||||||
|
|
||||||
The minimum is 0 and the maximum is 4.6GB.`,
|
The minimum is 0 and the maximum is 4.6GB.`,
|
||||||
|
@ -1234,7 +1234,7 @@ func (f *Fs) CleanUp(ctx context.Context) error {
|
||||||
return f.purge(ctx, "", true)
|
return f.purge(ctx, "", true)
|
||||||
}
|
}
|
||||||
|
|
||||||
// copy does a server side copy from dstObj <- srcObj
|
// copy does a server-side copy from dstObj <- srcObj
|
||||||
//
|
//
|
||||||
// If newInfo is nil then the metadata will be copied otherwise it
|
// If newInfo is nil then the metadata will be copied otherwise it
|
||||||
// will be replaced with newInfo
|
// will be replaced with newInfo
|
||||||
|
@ -1291,7 +1291,7 @@ func (f *Fs) copy(ctx context.Context, dstObj *Object, srcObj *Object, newInfo *
|
||||||
return dstObj.decodeMetaDataFileInfo(&response)
|
return dstObj.decodeMetaDataFileInfo(&response)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Copy src to this remote using server side copy operations.
|
// Copy src to this remote using server-side copy operations.
|
||||||
//
|
//
|
||||||
// This is stored with the remote path given
|
// This is stored with the remote path given
|
||||||
//
|
//
|
||||||
|
|
|
@ -791,7 +791,7 @@ func (f *Fs) Precision() time.Duration {
|
||||||
return time.Second
|
return time.Second
|
||||||
}
|
}
|
||||||
|
|
||||||
// Copy src to this remote using server side copy operations.
|
// Copy src to this remote using server-side copy operations.
|
||||||
//
|
//
|
||||||
// This is stored with the remote path given
|
// This is stored with the remote path given
|
||||||
//
|
//
|
||||||
|
@ -909,7 +909,7 @@ func (f *Fs) About(ctx context.Context) (usage *fs.Usage, err error) {
|
||||||
return usage, nil
|
return usage, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Move src to this remote using server side move operations.
|
// Move src to this remote using server-side move operations.
|
||||||
//
|
//
|
||||||
// This is stored with the remote path given
|
// This is stored with the remote path given
|
||||||
//
|
//
|
||||||
|
@ -945,7 +945,7 @@ func (f *Fs) Move(ctx context.Context, src fs.Object, remote string) (fs.Object,
|
||||||
}
|
}
|
||||||
|
|
||||||
// DirMove moves src, srcRemote to this remote at dstRemote
|
// DirMove moves src, srcRemote to this remote at dstRemote
|
||||||
// using server side move operations.
|
// using server-side move operations.
|
||||||
//
|
//
|
||||||
// Will only be called if src.Fs().Name() == f.Name()
|
// Will only be called if src.Fs().Name() == f.Name()
|
||||||
//
|
//
|
||||||
|
|
6
backend/cache/cache.go
vendored
6
backend/cache/cache.go
vendored
|
@ -1236,7 +1236,7 @@ func (f *Fs) Rmdir(ctx context.Context, dir string) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
// DirMove moves src, srcRemote to this remote at dstRemote
|
// DirMove moves src, srcRemote to this remote at dstRemote
|
||||||
// using server side move operations.
|
// using server-side move operations.
|
||||||
func (f *Fs) DirMove(ctx context.Context, src fs.Fs, srcRemote, dstRemote string) error {
|
func (f *Fs) DirMove(ctx context.Context, src fs.Fs, srcRemote, dstRemote string) error {
|
||||||
fs.Debugf(f, "move dir '%s'/'%s' -> '%s'/'%s'", src.Root(), srcRemote, f.Root(), dstRemote)
|
fs.Debugf(f, "move dir '%s'/'%s' -> '%s'/'%s'", src.Root(), srcRemote, f.Root(), dstRemote)
|
||||||
|
|
||||||
|
@ -1517,7 +1517,7 @@ func (f *Fs) PutStream(ctx context.Context, in io.Reader, src fs.ObjectInfo, opt
|
||||||
return f.put(ctx, in, src, options, do)
|
return f.put(ctx, in, src, options, do)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Copy src to this remote using server side copy operations.
|
// Copy src to this remote using server-side copy operations.
|
||||||
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) (fs.Object, error) {
|
||||||
fs.Debugf(f, "copy obj '%s' -> '%s'", src, remote)
|
fs.Debugf(f, "copy obj '%s' -> '%s'", src, remote)
|
||||||
|
|
||||||
|
@ -1594,7 +1594,7 @@ func (f *Fs) Copy(ctx context.Context, src fs.Object, remote string) (fs.Object,
|
||||||
return co, nil
|
return co, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Move src to this remote using server side move operations.
|
// Move src to this remote using server-side move operations.
|
||||||
func (f *Fs) Move(ctx context.Context, src fs.Object, remote string) (fs.Object, error) {
|
func (f *Fs) Move(ctx context.Context, src fs.Object, remote string) (fs.Object, error) {
|
||||||
fs.Debugf(f, "moving obj '%s' -> %s", src, remote)
|
fs.Debugf(f, "moving obj '%s' -> %s", src, remote)
|
||||||
|
|
||||||
|
|
|
@ -253,7 +253,7 @@ func NewFs(name, rpath string, m configmap.Mapper) (fs.Fs, error) {
|
||||||
return nil, errors.Wrapf(err, "failed to make remote %q to wrap", baseName+remotePath)
|
return nil, errors.Wrapf(err, "failed to make remote %q to wrap", baseName+remotePath)
|
||||||
}
|
}
|
||||||
if !operations.CanServerSideMove(baseFs) {
|
if !operations.CanServerSideMove(baseFs) {
|
||||||
return nil, errors.New("can't use chunker on a backend which doesn't support server side move or copy")
|
return nil, errors.New("can't use chunker on a backend which doesn't support server-side move or copy")
|
||||||
}
|
}
|
||||||
|
|
||||||
f := &Fs{
|
f := &Fs{
|
||||||
|
@ -1578,7 +1578,7 @@ func (f *Fs) okForServerSide(ctx context.Context, src fs.Object, opName string)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// Copy src to this remote using server side copy operations.
|
// Copy src to this remote using server-side copy operations.
|
||||||
//
|
//
|
||||||
// This is stored with the remote path given
|
// This is stored with the remote path given
|
||||||
//
|
//
|
||||||
|
@ -1599,7 +1599,7 @@ func (f *Fs) Copy(ctx context.Context, src fs.Object, remote string) (fs.Object,
|
||||||
return f.copyOrMove(ctx, obj, remote, baseCopy, md5, sha1, "copy")
|
return f.copyOrMove(ctx, obj, remote, baseCopy, md5, sha1, "copy")
|
||||||
}
|
}
|
||||||
|
|
||||||
// Move src to this remote using server side move operations.
|
// Move src to this remote using server-side move operations.
|
||||||
//
|
//
|
||||||
// This is stored with the remote path given
|
// This is stored with the remote path given
|
||||||
//
|
//
|
||||||
|
@ -1644,7 +1644,7 @@ func (f *Fs) baseMove(ctx context.Context, src fs.Object, remote string, delMode
|
||||||
}
|
}
|
||||||
|
|
||||||
// DirMove moves src, srcRemote to this remote at dstRemote
|
// DirMove moves src, srcRemote to this remote at dstRemote
|
||||||
// using server side move operations.
|
// using server-side move operations.
|
||||||
//
|
//
|
||||||
// Will only be called if src.Fs().Name() == f.Name()
|
// Will only be called if src.Fs().Name() == f.Name()
|
||||||
//
|
//
|
||||||
|
|
|
@ -76,7 +76,7 @@ NB If filename_encryption is "off" then this option will do nothing.`,
|
||||||
}, {
|
}, {
|
||||||
Name: "server_side_across_configs",
|
Name: "server_side_across_configs",
|
||||||
Default: false,
|
Default: false,
|
||||||
Help: `Allow server side operations (eg copy) to work across different crypt configs.
|
Help: `Allow server-side operations (eg copy) to work across different crypt configs.
|
||||||
|
|
||||||
Normally this option is not what you want, but if you have two crypts
|
Normally this option is not what you want, but if you have two crypts
|
||||||
pointing to the same backend you can use it.
|
pointing to the same backend you can use it.
|
||||||
|
@ -444,7 +444,7 @@ func (f *Fs) Purge(ctx context.Context, dir string) error {
|
||||||
return do(ctx, f.cipher.EncryptDirName(dir))
|
return do(ctx, f.cipher.EncryptDirName(dir))
|
||||||
}
|
}
|
||||||
|
|
||||||
// Copy src to this remote using server side copy operations.
|
// Copy src to this remote using server-side copy operations.
|
||||||
//
|
//
|
||||||
// This is stored with the remote path given
|
// This is stored with the remote path given
|
||||||
//
|
//
|
||||||
|
@ -469,7 +469,7 @@ func (f *Fs) Copy(ctx context.Context, src fs.Object, remote string) (fs.Object,
|
||||||
return f.newObject(oResult), nil
|
return f.newObject(oResult), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Move src to this remote using server side move operations.
|
// Move src to this remote using server-side move operations.
|
||||||
//
|
//
|
||||||
// This is stored with the remote path given
|
// This is stored with the remote path given
|
||||||
//
|
//
|
||||||
|
@ -495,7 +495,7 @@ func (f *Fs) Move(ctx context.Context, src fs.Object, remote string) (fs.Object,
|
||||||
}
|
}
|
||||||
|
|
||||||
// DirMove moves src, srcRemote to this remote at dstRemote
|
// DirMove moves src, srcRemote to this remote at dstRemote
|
||||||
// using server side move operations.
|
// using server-side move operations.
|
||||||
//
|
//
|
||||||
// Will only be called if src.Fs().Name() == f.Name()
|
// Will only be called if src.Fs().Name() == f.Name()
|
||||||
//
|
//
|
||||||
|
|
|
@ -435,9 +435,9 @@ need to use --ignore size also.`,
|
||||||
}, {
|
}, {
|
||||||
Name: "server_side_across_configs",
|
Name: "server_side_across_configs",
|
||||||
Default: false,
|
Default: false,
|
||||||
Help: `Allow server side operations (eg copy) to work across different drive configs.
|
Help: `Allow server-side operations (eg copy) to work across different drive configs.
|
||||||
|
|
||||||
This can be useful if you wish to do a server side copy between two
|
This can be useful if you wish to do a server-side copy between two
|
||||||
different Google drives. Note that this isn't enabled by default
|
different Google drives. Note that this isn't enabled by default
|
||||||
because it isn't easy to tell if it will work between any two
|
because it isn't easy to tell if it will work between any two
|
||||||
configurations.`,
|
configurations.`,
|
||||||
|
@ -2273,7 +2273,7 @@ func (f *Fs) Precision() time.Duration {
|
||||||
return time.Millisecond
|
return time.Millisecond
|
||||||
}
|
}
|
||||||
|
|
||||||
// Copy src to this remote using server side copy operations.
|
// Copy src to this remote using server-side copy operations.
|
||||||
//
|
//
|
||||||
// This is stored with the remote path given
|
// This is stored with the remote path given
|
||||||
//
|
//
|
||||||
|
@ -2449,7 +2449,7 @@ func (f *Fs) About(ctx context.Context) (*fs.Usage, error) {
|
||||||
return usage, nil
|
return usage, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Move src to this remote using server side move operations.
|
// Move src to this remote using server-side move operations.
|
||||||
//
|
//
|
||||||
// This is stored with the remote path given
|
// This is stored with the remote path given
|
||||||
//
|
//
|
||||||
|
@ -2550,7 +2550,7 @@ func (f *Fs) PublicLink(ctx context.Context, remote string, expire fs.Duration,
|
||||||
}
|
}
|
||||||
|
|
||||||
// DirMove moves src, srcRemote to this remote at dstRemote
|
// DirMove moves src, srcRemote to this remote at dstRemote
|
||||||
// using server side move operations.
|
// using server-side move operations.
|
||||||
//
|
//
|
||||||
// Will only be called if src.Fs().Name() == f.Name()
|
// Will only be called if src.Fs().Name() == f.Name()
|
||||||
//
|
//
|
||||||
|
@ -3129,7 +3129,7 @@ The path should end with a / to indicate copy the file as named to
|
||||||
this directory. If it doesn't end with a / then the last path
|
this directory. If it doesn't end with a / then the last path
|
||||||
component will be used as the file name.
|
component will be used as the file name.
|
||||||
|
|
||||||
If the destination is a drive backend then server side copying will be
|
If the destination is a drive backend then server-side copying will be
|
||||||
attempted if possible.
|
attempted if possible.
|
||||||
|
|
||||||
Use the -i flag to see what would be copied before copying.
|
Use the -i flag to see what would be copied before copying.
|
||||||
|
|
|
@ -903,7 +903,7 @@ func (f *Fs) Precision() time.Duration {
|
||||||
return time.Second
|
return time.Second
|
||||||
}
|
}
|
||||||
|
|
||||||
// Copy src to this remote using server side copy operations.
|
// Copy src to this remote using server-side copy operations.
|
||||||
//
|
//
|
||||||
// This is stored with the remote path given
|
// This is stored with the remote path given
|
||||||
//
|
//
|
||||||
|
@ -964,7 +964,7 @@ func (f *Fs) Purge(ctx context.Context, dir string) (err error) {
|
||||||
return f.purgeCheck(ctx, dir, false)
|
return f.purgeCheck(ctx, dir, false)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Move src to this remote using server side move operations.
|
// Move src to this remote using server-side move operations.
|
||||||
//
|
//
|
||||||
// This is stored with the remote path given
|
// This is stored with the remote path given
|
||||||
//
|
//
|
||||||
|
@ -1069,7 +1069,7 @@ func (f *Fs) PublicLink(ctx context.Context, remote string, expire fs.Duration,
|
||||||
}
|
}
|
||||||
|
|
||||||
// DirMove moves src, srcRemote to this remote at dstRemote
|
// DirMove moves src, srcRemote to this remote at dstRemote
|
||||||
// using server side move operations.
|
// using server-side move operations.
|
||||||
//
|
//
|
||||||
// Will only be called if src.Fs().Name() == f.Name()
|
// Will only be called if src.Fs().Name() == f.Name()
|
||||||
//
|
//
|
||||||
|
|
|
@ -729,7 +729,7 @@ func (f *Fs) Move(ctx context.Context, src fs.Object, remote string) (fs.Object,
|
||||||
}
|
}
|
||||||
|
|
||||||
// DirMove moves src, srcRemote to this remote at dstRemote
|
// DirMove moves src, srcRemote to this remote at dstRemote
|
||||||
// using server side move operations.
|
// using server-side move operations.
|
||||||
//
|
//
|
||||||
// Will only be called if src.Fs().Name() == f.Name()
|
// Will only be called if src.Fs().Name() == f.Name()
|
||||||
//
|
//
|
||||||
|
|
|
@ -813,7 +813,7 @@ func (f *Fs) Precision() time.Duration {
|
||||||
return time.Nanosecond
|
return time.Nanosecond
|
||||||
}
|
}
|
||||||
|
|
||||||
// Copy src to this remote using server side copy operations.
|
// Copy src to this remote using server-side copy operations.
|
||||||
//
|
//
|
||||||
// This is stored with the remote path given
|
// This is stored with the remote path given
|
||||||
//
|
//
|
||||||
|
|
|
@ -1097,7 +1097,7 @@ func (f *Fs) copyOrMove(ctx context.Context, method, src, dest string) (info *ap
|
||||||
return info, nil
|
return info, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Copy src to this remote using server side copy operations.
|
// Copy src to this remote using server-side copy operations.
|
||||||
//
|
//
|
||||||
// This is stored with the remote path given
|
// This is stored with the remote path given
|
||||||
//
|
//
|
||||||
|
@ -1127,7 +1127,7 @@ func (f *Fs) Copy(ctx context.Context, src fs.Object, remote string) (fs.Object,
|
||||||
//return f.newObjectWithInfo(remote, &result)
|
//return f.newObjectWithInfo(remote, &result)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Move src to this remote using server side move operations.
|
// Move src to this remote using server-side move operations.
|
||||||
//
|
//
|
||||||
// This is stored with the remote path given
|
// This is stored with the remote path given
|
||||||
//
|
//
|
||||||
|
@ -1158,7 +1158,7 @@ func (f *Fs) Move(ctx context.Context, src fs.Object, remote string) (fs.Object,
|
||||||
}
|
}
|
||||||
|
|
||||||
// DirMove moves src, srcRemote to this remote at dstRemote
|
// DirMove moves src, srcRemote to this remote at dstRemote
|
||||||
// using server side move operations.
|
// using server-side move operations.
|
||||||
//
|
//
|
||||||
// Will only be called if src.Fs().Name() == f.Name()
|
// Will only be called if src.Fs().Name() == f.Name()
|
||||||
//
|
//
|
||||||
|
|
|
@ -637,7 +637,7 @@ func (f *Fs) Purge(ctx context.Context, dir string) error {
|
||||||
return os.RemoveAll(dir)
|
return os.RemoveAll(dir)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Move src to this remote using server side move operations.
|
// Move src to this remote using server-side move operations.
|
||||||
//
|
//
|
||||||
// This is stored with the remote path given
|
// This is stored with the remote path given
|
||||||
//
|
//
|
||||||
|
@ -701,7 +701,7 @@ func (f *Fs) Move(ctx context.Context, src fs.Object, remote string) (fs.Object,
|
||||||
}
|
}
|
||||||
|
|
||||||
// DirMove moves src, srcRemote to this remote at dstRemote
|
// DirMove moves src, srcRemote to this remote at dstRemote
|
||||||
// using server side move operations.
|
// using server-side move operations.
|
||||||
//
|
//
|
||||||
// Will only be called if src.Fs().Name() == f.Name()
|
// Will only be called if src.Fs().Name() == f.Name()
|
||||||
//
|
//
|
||||||
|
|
|
@ -1227,7 +1227,7 @@ func (f *Fs) delete(ctx context.Context, path string, hardDelete bool) error {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Copy src to this remote using server side copy operations.
|
// Copy src to this remote using server-side copy operations.
|
||||||
// This is stored with the remote path given.
|
// This is stored with the remote path given.
|
||||||
// It returns the destination Object and a possible error.
|
// It returns the destination Object and a possible error.
|
||||||
// Will only be called if src.Fs().Name() == f.Name()
|
// Will only be called if src.Fs().Name() == f.Name()
|
||||||
|
@ -1322,7 +1322,7 @@ func (f *Fs) Copy(ctx context.Context, src fs.Object, remote string) (fs.Object,
|
||||||
return dstObj, err
|
return dstObj, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// Move src to this remote using server side move operations.
|
// Move src to this remote using server-side move operations.
|
||||||
// This is stored with the remote path given.
|
// This is stored with the remote path given.
|
||||||
// It returns the destination Object and a possible error.
|
// It returns the destination Object and a possible error.
|
||||||
// Will only be called if src.Fs().Name() == f.Name()
|
// Will only be called if src.Fs().Name() == f.Name()
|
||||||
|
@ -1409,7 +1409,7 @@ func (f *Fs) moveItemBin(ctx context.Context, srcPath, dstPath, opName string) e
|
||||||
}
|
}
|
||||||
|
|
||||||
// DirMove moves src, srcRemote to this remote at dstRemote
|
// DirMove moves src, srcRemote to this remote at dstRemote
|
||||||
// using server side move operations.
|
// using server-side move operations.
|
||||||
// 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.ErrorCantDirMove
|
// If it isn't possible then return fs.ErrorCantDirMove
|
||||||
// If destination exists then return fs.ErrorDirExists
|
// If destination exists then return fs.ErrorDirExists
|
||||||
|
|
|
@ -11,7 +11,7 @@ Improvements:
|
||||||
* Uploads could be done in parallel
|
* Uploads could be done in parallel
|
||||||
* Downloads would be more efficient done in one go
|
* Downloads would be more efficient done in one go
|
||||||
* Uploads would be more efficient with bigger chunks
|
* Uploads would be more efficient with bigger chunks
|
||||||
* Looks like mega can support server side copy, but it isn't implemented in go-mega
|
* Looks like mega can support server-side copy, but it isn't implemented in go-mega
|
||||||
* Upload can set modtime... - set as int64_t - can set ctime and mtime?
|
* Upload can set modtime... - set as int64_t - can set ctime and mtime?
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -699,7 +699,7 @@ func (f *Fs) move(dstRemote string, srcFs *Fs, srcRemote string, info *mega.Node
|
||||||
dstDirNode, err = dstFs.mkdir(absRoot, dstParent)
|
dstDirNode, err = dstFs.mkdir(absRoot, dstParent)
|
||||||
}
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.Wrap(err, "server side move failed to make dst parent dir")
|
return errors.Wrap(err, "server-side move failed to make dst parent dir")
|
||||||
}
|
}
|
||||||
|
|
||||||
if srcRemote != "" {
|
if srcRemote != "" {
|
||||||
|
@ -712,7 +712,7 @@ func (f *Fs) move(dstRemote string, srcFs *Fs, srcRemote string, info *mega.Node
|
||||||
srcDirNode, err = f.findDir(absRoot, srcParent)
|
srcDirNode, err = f.findDir(absRoot, srcParent)
|
||||||
}
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.Wrap(err, "server side move failed to lookup src parent dir")
|
return errors.Wrap(err, "server-side move failed to lookup src parent dir")
|
||||||
}
|
}
|
||||||
|
|
||||||
// move the object into its new directory if required
|
// move the object into its new directory if required
|
||||||
|
@ -723,7 +723,7 @@ func (f *Fs) move(dstRemote string, srcFs *Fs, srcRemote string, info *mega.Node
|
||||||
return shouldRetry(err)
|
return shouldRetry(err)
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.Wrap(err, "server side move failed")
|
return errors.Wrap(err, "server-side move failed")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -737,7 +737,7 @@ func (f *Fs) move(dstRemote string, srcFs *Fs, srcRemote string, info *mega.Node
|
||||||
return shouldRetry(err)
|
return shouldRetry(err)
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.Wrap(err, "server side rename failed")
|
return errors.Wrap(err, "server-side rename failed")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -746,7 +746,7 @@ func (f *Fs) move(dstRemote string, srcFs *Fs, srcRemote string, info *mega.Node
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Move src to this remote using server side move operations.
|
// Move src to this remote using server-side move operations.
|
||||||
//
|
//
|
||||||
// This is stored with the remote path given
|
// This is stored with the remote path given
|
||||||
//
|
//
|
||||||
|
@ -781,7 +781,7 @@ func (f *Fs) Move(ctx context.Context, src fs.Object, remote string) (fs.Object,
|
||||||
}
|
}
|
||||||
|
|
||||||
// DirMove moves src, srcRemote to this remote at dstRemote
|
// DirMove moves src, srcRemote to this remote at dstRemote
|
||||||
// using server side move operations.
|
// using server-side move operations.
|
||||||
//
|
//
|
||||||
// Will only be called if src.Fs().Name() == f.Name()
|
// Will only be called if src.Fs().Name() == f.Name()
|
||||||
//
|
//
|
||||||
|
|
|
@ -462,7 +462,7 @@ func (f *Fs) Precision() time.Duration {
|
||||||
return time.Nanosecond
|
return time.Nanosecond
|
||||||
}
|
}
|
||||||
|
|
||||||
// Copy src to this remote using server side copy operations.
|
// Copy src to this remote using server-side copy operations.
|
||||||
//
|
//
|
||||||
// This is stored with the remote path given
|
// This is stored with the remote path given
|
||||||
//
|
//
|
||||||
|
|
|
@ -274,9 +274,9 @@ listing, set this option.`,
|
||||||
}, {
|
}, {
|
||||||
Name: "server_side_across_configs",
|
Name: "server_side_across_configs",
|
||||||
Default: false,
|
Default: false,
|
||||||
Help: `Allow server side operations (eg copy) to work across different onedrive configs.
|
Help: `Allow server-side operations (eg copy) to work across different onedrive configs.
|
||||||
|
|
||||||
This can be useful if you wish to do a server side copy between two
|
This can be useful if you wish to do a server-side copy between two
|
||||||
different Onedrives. Note that this isn't enabled by default
|
different Onedrives. Note that this isn't enabled by default
|
||||||
because it isn't easy to tell if it will work between any two
|
because it isn't easy to tell if it will work between any two
|
||||||
configurations.`,
|
configurations.`,
|
||||||
|
@ -1006,7 +1006,7 @@ func (f *Fs) waitForJob(ctx context.Context, location string, o *Object) error {
|
||||||
return errors.Errorf("async operation didn't complete after %v", fs.Config.Timeout)
|
return errors.Errorf("async operation didn't complete after %v", fs.Config.Timeout)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Copy src to this remote using server side copy operations.
|
// Copy src to this remote using server-side copy operations.
|
||||||
//
|
//
|
||||||
// This is stored with the remote path given
|
// This is stored with the remote path given
|
||||||
//
|
//
|
||||||
|
@ -1097,7 +1097,7 @@ func (f *Fs) Purge(ctx context.Context, dir string) error {
|
||||||
return f.purgeCheck(ctx, dir, false)
|
return f.purgeCheck(ctx, dir, false)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Move src to this remote using server side move operations.
|
// Move src to this remote using server-side move operations.
|
||||||
//
|
//
|
||||||
// This is stored with the remote path given
|
// This is stored with the remote path given
|
||||||
//
|
//
|
||||||
|
@ -1162,7 +1162,7 @@ func (f *Fs) Move(ctx context.Context, src fs.Object, remote string) (fs.Object,
|
||||||
}
|
}
|
||||||
|
|
||||||
// DirMove moves src, srcRemote to this remote at dstRemote
|
// DirMove moves src, srcRemote to this remote at dstRemote
|
||||||
// using server side move operations.
|
// using server-side move operations.
|
||||||
//
|
//
|
||||||
// Will only be called if src.Fs().Name() == f.Name()
|
// Will only be called if src.Fs().Name() == f.Name()
|
||||||
//
|
//
|
||||||
|
|
|
@ -338,7 +338,7 @@ func (f *Fs) Precision() time.Duration {
|
||||||
return time.Second
|
return time.Second
|
||||||
}
|
}
|
||||||
|
|
||||||
// Copy src to this remote using server side copy operations.
|
// Copy src to this remote using server-side copy operations.
|
||||||
//
|
//
|
||||||
// This is stored with the remote path given
|
// This is stored with the remote path given
|
||||||
//
|
//
|
||||||
|
@ -402,7 +402,7 @@ func (f *Fs) Copy(ctx context.Context, src fs.Object, remote string) (fs.Object,
|
||||||
return dstObj, nil
|
return dstObj, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Move src to this remote using server side move operations.
|
// Move src to this remote using server-side move operations.
|
||||||
//
|
//
|
||||||
// This is stored with the remote path given
|
// This is stored with the remote path given
|
||||||
//
|
//
|
||||||
|
@ -460,7 +460,7 @@ func (f *Fs) Move(ctx context.Context, src fs.Object, remote string) (fs.Object,
|
||||||
}
|
}
|
||||||
|
|
||||||
// DirMove moves src, srcRemote to this remote at dstRemote
|
// DirMove moves src, srcRemote to this remote at dstRemote
|
||||||
// using server side move operations.
|
// using server-side move operations.
|
||||||
//
|
//
|
||||||
// Will only be called if src.Fs().Name() == f.Name()
|
// Will only be called if src.Fs().Name() == f.Name()
|
||||||
//
|
//
|
||||||
|
|
|
@ -622,7 +622,7 @@ func (f *Fs) Precision() time.Duration {
|
||||||
return time.Second
|
return time.Second
|
||||||
}
|
}
|
||||||
|
|
||||||
// Copy src to this remote using server side copy operations.
|
// Copy src to this remote using server-side copy operations.
|
||||||
//
|
//
|
||||||
// This is stored with the remote path given
|
// This is stored with the remote path given
|
||||||
//
|
//
|
||||||
|
@ -705,7 +705,7 @@ func (f *Fs) CleanUp(ctx context.Context) error {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
// Move src to this remote using server side move operations.
|
// Move src to this remote using server-side move operations.
|
||||||
//
|
//
|
||||||
// This is stored with the remote path given
|
// This is stored with the remote path given
|
||||||
//
|
//
|
||||||
|
@ -755,7 +755,7 @@ func (f *Fs) Move(ctx context.Context, src fs.Object, remote string) (fs.Object,
|
||||||
}
|
}
|
||||||
|
|
||||||
// DirMove moves src, srcRemote to this remote at dstRemote
|
// DirMove moves src, srcRemote to this remote at dstRemote
|
||||||
// using server side move operations.
|
// using server-side move operations.
|
||||||
//
|
//
|
||||||
// Will only be called if src.Fs().Name() == f.Name()
|
// Will only be called if src.Fs().Name() == f.Name()
|
||||||
//
|
//
|
||||||
|
|
|
@ -682,7 +682,7 @@ func (f *Fs) move(ctx context.Context, isFile bool, id, oldLeaf, newLeaf, oldDir
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Move src to this remote using server side move operations.
|
// Move src to this remote using server-side move operations.
|
||||||
//
|
//
|
||||||
// This is stored with the remote path given
|
// This is stored with the remote path given
|
||||||
//
|
//
|
||||||
|
@ -718,7 +718,7 @@ func (f *Fs) Move(ctx context.Context, src fs.Object, remote string) (fs.Object,
|
||||||
}
|
}
|
||||||
|
|
||||||
// DirMove moves src, srcRemote to this remote at dstRemote
|
// DirMove moves src, srcRemote to this remote at dstRemote
|
||||||
// using server side move operations.
|
// using server-side move operations.
|
||||||
//
|
//
|
||||||
// Will only be called if src.Fs().Name() == f.Name()
|
// Will only be called if src.Fs().Name() == f.Name()
|
||||||
//
|
//
|
||||||
|
|
|
@ -525,7 +525,7 @@ func (f *Fs) Purge(ctx context.Context, dir string) (err error) {
|
||||||
return f.purgeCheck(ctx, dir, false)
|
return f.purgeCheck(ctx, dir, false)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Copy src to this remote using server side copy operations.
|
// Copy src to this remote using server-side copy operations.
|
||||||
//
|
//
|
||||||
// This is stored with the remote path given
|
// This is stored with the remote path given
|
||||||
//
|
//
|
||||||
|
@ -564,7 +564,7 @@ func (f *Fs) Copy(ctx context.Context, src fs.Object, remote string) (o fs.Objec
|
||||||
return f.NewObject(ctx, remote)
|
return f.NewObject(ctx, remote)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Move src to this remote using server side move operations.
|
// Move src to this remote using server-side move operations.
|
||||||
//
|
//
|
||||||
// This is stored with the remote path given
|
// This is stored with the remote path given
|
||||||
//
|
//
|
||||||
|
@ -604,7 +604,7 @@ func (f *Fs) Move(ctx context.Context, src fs.Object, remote string) (o fs.Objec
|
||||||
}
|
}
|
||||||
|
|
||||||
// DirMove moves src, srcRemote to this remote at dstRemote
|
// DirMove moves src, srcRemote to this remote at dstRemote
|
||||||
// using server side move operations.
|
// using server-side move operations.
|
||||||
//
|
//
|
||||||
// Will only be called if src.Fs().Name() == f.Name()
|
// Will only be called if src.Fs().Name() == f.Name()
|
||||||
//
|
//
|
||||||
|
|
|
@ -428,7 +428,7 @@ func (f *Fs) Put(ctx context.Context, in io.Reader, src fs.ObjectInfo, options .
|
||||||
return fsObj, fsObj.Update(ctx, in, src, options...)
|
return fsObj, fsObj.Update(ctx, in, src, options...)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Copy src to this remote using server side copy operations.
|
// Copy src to this remote using server-side copy operations.
|
||||||
//
|
//
|
||||||
// This is stored with the remote path given
|
// This is stored with the remote path given
|
||||||
//
|
//
|
||||||
|
|
|
@ -799,7 +799,7 @@ This ACL is used for creating objects and if bucket_acl isn't set, for creating
|
||||||
|
|
||||||
For more info visit https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#canned-acl
|
For more info visit https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#canned-acl
|
||||||
|
|
||||||
Note that this ACL is applied when server side copying objects as S3
|
Note that this ACL is applied when server-side copying objects as S3
|
||||||
doesn't copy the ACL from the source but rather writes a fresh one.`,
|
doesn't copy the ACL from the source but rather writes a fresh one.`,
|
||||||
Examples: []fs.OptionExample{{
|
Examples: []fs.OptionExample{{
|
||||||
Value: "default",
|
Value: "default",
|
||||||
|
@ -1055,7 +1055,7 @@ large file of a known size to stay below this number of chunks limit.
|
||||||
Name: "copy_cutoff",
|
Name: "copy_cutoff",
|
||||||
Help: `Cutoff for switching to multipart copy
|
Help: `Cutoff for switching to multipart copy
|
||||||
|
|
||||||
Any files larger than this that need to be server side copied will be
|
Any files larger than this that need to be server-side copied will be
|
||||||
copied in chunks of this size.
|
copied in chunks of this size.
|
||||||
|
|
||||||
The minimum is 0 and the maximum is 5GB.`,
|
The minimum is 0 and the maximum is 5GB.`,
|
||||||
|
@ -2139,7 +2139,7 @@ func pathEscape(s string) string {
|
||||||
return strings.Replace(rest.URLPathEscape(s), "+", "%2B", -1)
|
return strings.Replace(rest.URLPathEscape(s), "+", "%2B", -1)
|
||||||
}
|
}
|
||||||
|
|
||||||
// copy does a server side copy
|
// copy does a server-side copy
|
||||||
//
|
//
|
||||||
// It adds the boiler plate to the req passed in and calls the s3
|
// It adds the boiler plate to the req passed in and calls the s3
|
||||||
// method
|
// method
|
||||||
|
@ -2273,7 +2273,7 @@ func (f *Fs) copyMultipart(ctx context.Context, copyReq *s3.CopyObjectInput, dst
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
// Copy src to this remote using server side copy operations.
|
// Copy src to this remote using server-side copy operations.
|
||||||
//
|
//
|
||||||
// This is stored with the remote path given
|
// This is stored with the remote path given
|
||||||
//
|
//
|
||||||
|
|
|
@ -663,7 +663,7 @@ func (f *Fs) ListR(ctx context.Context, dir string, callback fs.ListRCallback) e
|
||||||
|
|
||||||
// ==================== Optional Interface fs.Copier ====================
|
// ==================== Optional Interface fs.Copier ====================
|
||||||
|
|
||||||
// Copy src to this remote using server side copy operations.
|
// Copy src to this remote using server-side copy operations.
|
||||||
//
|
//
|
||||||
// This is stored with the remote path given
|
// This is stored with the remote path given
|
||||||
//
|
//
|
||||||
|
@ -714,7 +714,7 @@ func (f *Fs) Copy(ctx context.Context, src fs.Object, remote string) (fs.Object,
|
||||||
|
|
||||||
// ==================== Optional Interface fs.Mover ====================
|
// ==================== Optional Interface fs.Mover ====================
|
||||||
|
|
||||||
// Move src to this remote using server side move operations.
|
// Move src to this remote using server-side move operations.
|
||||||
//
|
//
|
||||||
// This is stored with the remote path given
|
// This is stored with the remote path given
|
||||||
//
|
//
|
||||||
|
@ -804,7 +804,7 @@ func (f *Fs) adjustDestination(ctx context.Context, libraryID, srcFilename, dstP
|
||||||
// ==================== Optional Interface fs.DirMover ====================
|
// ==================== Optional Interface fs.DirMover ====================
|
||||||
|
|
||||||
// DirMove moves src, srcRemote to this remote at dstRemote
|
// DirMove moves src, srcRemote to this remote at dstRemote
|
||||||
// using server side move operations.
|
// using server-side move operations.
|
||||||
//
|
//
|
||||||
// Will only be called if src.Fs().Name() == f.Name()
|
// Will only be called if src.Fs().Name() == f.Name()
|
||||||
//
|
//
|
||||||
|
|
|
@ -895,7 +895,7 @@ func (f *Fs) Move(ctx context.Context, src fs.Object, remote string) (fs.Object,
|
||||||
}
|
}
|
||||||
|
|
||||||
// DirMove moves src, srcRemote to this remote at dstRemote
|
// DirMove moves src, srcRemote to this remote at dstRemote
|
||||||
// using server side move operations.
|
// using server-side move operations.
|
||||||
//
|
//
|
||||||
// Will only be called if src.Fs().Name() == f.Name()
|
// Will only be called if src.Fs().Name() == f.Name()
|
||||||
//
|
//
|
||||||
|
|
|
@ -964,7 +964,7 @@ func (f *Fs) move(ctx context.Context, isFile bool, id, oldLeaf, newLeaf, oldDir
|
||||||
return item, nil
|
return item, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Move src to this remote using server side move operations.
|
// Move src to this remote using server-side move operations.
|
||||||
//
|
//
|
||||||
// This is stored with the remote path given
|
// This is stored with the remote path given
|
||||||
//
|
//
|
||||||
|
@ -1006,7 +1006,7 @@ func (f *Fs) Move(ctx context.Context, src fs.Object, remote string) (fs.Object,
|
||||||
}
|
}
|
||||||
|
|
||||||
// DirMove moves src, srcRemote to this remote at dstRemote
|
// DirMove moves src, srcRemote to this remote at dstRemote
|
||||||
// using server side move operations.
|
// using server-side move operations.
|
||||||
//
|
//
|
||||||
// Will only be called if src.Fs().Name() == f.Name()
|
// Will only be called if src.Fs().Name() == f.Name()
|
||||||
//
|
//
|
||||||
|
@ -1034,7 +1034,7 @@ func (f *Fs) DirMove(ctx context.Context, src fs.Fs, srcRemote, dstRemote string
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Copy src to this remote using server side copy operations.
|
// Copy src to this remote using server-side copy operations.
|
||||||
//
|
//
|
||||||
// This is stored with the remote path given
|
// This is stored with the remote path given
|
||||||
//
|
//
|
||||||
|
|
|
@ -837,7 +837,7 @@ func (f *Fs) Precision() time.Duration {
|
||||||
return fs.ModTimeNotSupported
|
return fs.ModTimeNotSupported
|
||||||
}
|
}
|
||||||
|
|
||||||
// Copy src to this remote using server side copy operations.
|
// Copy src to this remote using server-side copy operations.
|
||||||
//
|
//
|
||||||
// This is stored with the remote path given
|
// This is stored with the remote path given
|
||||||
//
|
//
|
||||||
|
@ -923,7 +923,7 @@ func (f *Fs) Purge(ctx context.Context, dir string) error {
|
||||||
return f.purgeCheck(ctx, dir, false)
|
return f.purgeCheck(ctx, dir, false)
|
||||||
}
|
}
|
||||||
|
|
||||||
// moveFile moves a file server side
|
// moveFile moves a file server-side
|
||||||
func (f *Fs) moveFile(ctx context.Context, id, leaf, directoryID string) (info *api.File, err error) {
|
func (f *Fs) moveFile(ctx context.Context, id, leaf, directoryID string) (info *api.File, err error) {
|
||||||
opts := rest.Opts{
|
opts := rest.Opts{
|
||||||
Method: "PUT",
|
Method: "PUT",
|
||||||
|
@ -951,7 +951,7 @@ func (f *Fs) moveFile(ctx context.Context, id, leaf, directoryID string) (info *
|
||||||
return info, nil
|
return info, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// moveDir moves a folder server side
|
// moveDir moves a folder server-side
|
||||||
func (f *Fs) moveDir(ctx context.Context, id, leaf, directoryID string) (err error) {
|
func (f *Fs) moveDir(ctx context.Context, id, leaf, directoryID string) (err error) {
|
||||||
// Move the object
|
// Move the object
|
||||||
opts := rest.Opts{
|
opts := rest.Opts{
|
||||||
|
@ -970,7 +970,7 @@ func (f *Fs) moveDir(ctx context.Context, id, leaf, directoryID string) (err err
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
// Move src to this remote using server side move operations.
|
// Move src to this remote using server-side move operations.
|
||||||
//
|
//
|
||||||
// This is stored with the remote path given
|
// This is stored with the remote path given
|
||||||
//
|
//
|
||||||
|
@ -1006,7 +1006,7 @@ func (f *Fs) Move(ctx context.Context, src fs.Object, remote string) (fs.Object,
|
||||||
}
|
}
|
||||||
|
|
||||||
// DirMove moves src, srcRemote to this remote at dstRemote
|
// DirMove moves src, srcRemote to this remote at dstRemote
|
||||||
// using server side move operations.
|
// using server-side move operations.
|
||||||
//
|
//
|
||||||
// Will only be called if src.Fs().Name() == f.Name()
|
// Will only be called if src.Fs().Name() == f.Name()
|
||||||
//
|
//
|
||||||
|
|
|
@ -871,7 +871,7 @@ func (f *Fs) Purge(ctx context.Context, dir string) error {
|
||||||
return f.Rmdir(ctx, dir)
|
return f.Rmdir(ctx, dir)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Copy src to this remote using server side copy operations.
|
// Copy src to this remote using server-side copy operations.
|
||||||
//
|
//
|
||||||
// This is stored with the remote path given
|
// This is stored with the remote path given
|
||||||
//
|
//
|
||||||
|
|
|
@ -194,7 +194,7 @@ func (f *Fs) Purge(ctx context.Context, dir string) error {
|
||||||
return errs.Err()
|
return errs.Err()
|
||||||
}
|
}
|
||||||
|
|
||||||
// Copy src to this remote using server side copy operations.
|
// Copy src to this remote using server-side copy operations.
|
||||||
//
|
//
|
||||||
// This is stored with the remote path given
|
// This is stored with the remote path given
|
||||||
//
|
//
|
||||||
|
@ -234,7 +234,7 @@ func (f *Fs) Copy(ctx context.Context, src fs.Object, remote string) (fs.Object,
|
||||||
return wo.(*Object), err
|
return wo.(*Object), err
|
||||||
}
|
}
|
||||||
|
|
||||||
// Move src to this remote using server side move operations.
|
// Move src to this remote using server-side move operations.
|
||||||
//
|
//
|
||||||
// This is stored with the remote path given
|
// This is stored with the remote path given
|
||||||
//
|
//
|
||||||
|
@ -298,7 +298,7 @@ func (f *Fs) Move(ctx context.Context, src fs.Object, remote string) (fs.Object,
|
||||||
}
|
}
|
||||||
|
|
||||||
// DirMove moves src, srcRemote to this remote at dstRemote
|
// DirMove moves src, srcRemote to this remote at dstRemote
|
||||||
// using server side move operations.
|
// using server-side move operations.
|
||||||
//
|
//
|
||||||
// Will only be called if src.Fs().Name() == f.Name()
|
// Will only be called if src.Fs().Name() == f.Name()
|
||||||
//
|
//
|
||||||
|
|
|
@ -832,7 +832,7 @@ func (f *Fs) Precision() time.Duration {
|
||||||
return f.precision
|
return f.precision
|
||||||
}
|
}
|
||||||
|
|
||||||
// Copy or Move src to this remote using server side copy operations.
|
// Copy or Move src to this remote using server-side copy operations.
|
||||||
//
|
//
|
||||||
// This is stored with the remote path given
|
// This is stored with the remote path given
|
||||||
//
|
//
|
||||||
|
@ -886,7 +886,7 @@ func (f *Fs) copyOrMove(ctx context.Context, src fs.Object, remote string, metho
|
||||||
return dstObj, nil
|
return dstObj, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Copy src to this remote using server side copy operations.
|
// Copy src to this remote using server-side copy operations.
|
||||||
//
|
//
|
||||||
// This is stored with the remote path given
|
// This is stored with the remote path given
|
||||||
//
|
//
|
||||||
|
@ -908,7 +908,7 @@ func (f *Fs) Purge(ctx context.Context, dir string) error {
|
||||||
return f.purgeCheck(ctx, dir, false)
|
return f.purgeCheck(ctx, dir, false)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Move src to this remote using server side move operations.
|
// Move src to this remote using server-side move operations.
|
||||||
//
|
//
|
||||||
// This is stored with the remote path given
|
// This is stored with the remote path given
|
||||||
//
|
//
|
||||||
|
@ -922,7 +922,7 @@ func (f *Fs) Move(ctx context.Context, src fs.Object, remote string) (fs.Object,
|
||||||
}
|
}
|
||||||
|
|
||||||
// DirMove moves src, srcRemote to this remote at dstRemote
|
// DirMove moves src, srcRemote to this remote at dstRemote
|
||||||
// using server side move operations.
|
// using server-side move operations.
|
||||||
//
|
//
|
||||||
// Will only be called if src.Fs().Name() == f.Name()
|
// Will only be called if src.Fs().Name() == f.Name()
|
||||||
//
|
//
|
||||||
|
|
|
@ -678,7 +678,7 @@ func (f *Fs) copyOrMove(ctx context.Context, method, src, dst string, overwrite
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Copy src to this remote using server side copy operations.
|
// Copy src to this remote using server-side copy operations.
|
||||||
//
|
//
|
||||||
// This is stored with the remote path given
|
// This is stored with the remote path given
|
||||||
//
|
//
|
||||||
|
@ -708,7 +708,7 @@ func (f *Fs) Copy(ctx context.Context, src fs.Object, remote string) (fs.Object,
|
||||||
return f.NewObject(ctx, remote)
|
return f.NewObject(ctx, remote)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Move src to this remote using server side move operations.
|
// Move src to this remote using server-side move operations.
|
||||||
//
|
//
|
||||||
// This is stored with the remote path given
|
// This is stored with the remote path given
|
||||||
//
|
//
|
||||||
|
@ -739,7 +739,7 @@ func (f *Fs) Move(ctx context.Context, src fs.Object, remote string) (fs.Object,
|
||||||
}
|
}
|
||||||
|
|
||||||
// DirMove moves src, srcRemote to this remote at dstRemote
|
// DirMove moves src, srcRemote to this remote at dstRemote
|
||||||
// using server side move operations.
|
// using server-side move operations.
|
||||||
//
|
//
|
||||||
// Will only be called if src.Fs().Name() == f.Name()
|
// Will only be called if src.Fs().Name() == f.Name()
|
||||||
//
|
//
|
||||||
|
|
|
@ -29,15 +29,15 @@ var commandDefinition = &cobra.Command{
|
||||||
Long: `
|
Long: `
|
||||||
Moves the contents of the source directory to the destination
|
Moves the contents of the source directory to the destination
|
||||||
directory. Rclone will error if the source and destination overlap and
|
directory. Rclone will error if the source and destination overlap and
|
||||||
the remote does not support a server side directory move operation.
|
the remote does not support a server-side directory move operation.
|
||||||
|
|
||||||
If no filters are in use and if possible this will server side move
|
If no filters are in use and if possible this will server-side move
|
||||||
` + "`source:path`" + ` into ` + "`dest:path`" + `. After this ` + "`source:path`" + ` will no
|
` + "`source:path`" + ` into ` + "`dest:path`" + `. After this ` + "`source:path`" + ` will no
|
||||||
longer exist.
|
longer exist.
|
||||||
|
|
||||||
Otherwise for each file in ` + "`source:path`" + ` selected by the filters (if
|
Otherwise for each file in ` + "`source:path`" + ` selected by the filters (if
|
||||||
any) this will move it into ` + "`dest:path`" + `. If possible a server side
|
any) this will move it into ` + "`dest:path`" + `. If possible a server-side
|
||||||
move will be used, otherwise it will copy it (server side if possible)
|
move will be used, otherwise it will copy it (server-side if possible)
|
||||||
into ` + "`dest:path`" + ` then delete the original (if no errors on copy) in
|
into ` + "`dest:path`" + ` then delete the original (if no errors on copy) in
|
||||||
` + "`source:path`" + `.
|
` + "`source:path`" + `.
|
||||||
|
|
||||||
|
|
|
@ -37,7 +37,7 @@ verifies checksums at all times. Transfers over limited bandwidth;
|
||||||
intermittent connections, or subject to quota can be restarted, from
|
intermittent connections, or subject to quota can be restarted, from
|
||||||
the last good file transferred. You can
|
the last good file transferred. You can
|
||||||
[check](/commands/rclone_check/) the integrity of your files. Where
|
[check](/commands/rclone_check/) the integrity of your files. Where
|
||||||
possible, rclone employs server side transfers to minimise local
|
possible, rclone employs server-side transfers to minimise local
|
||||||
bandwidth use and transfers from one provider to another without
|
bandwidth use and transfers from one provider to another without
|
||||||
using local disk.
|
using local disk.
|
||||||
|
|
||||||
|
|
|
@ -417,7 +417,7 @@ This value should be set no larger than 4.657GiB (== 5GB).
|
||||||
|
|
||||||
Cutoff for switching to multipart copy
|
Cutoff for switching to multipart copy
|
||||||
|
|
||||||
Any files larger than this that need to be server side copied will be
|
Any files larger than this that need to be server-side copied will be
|
||||||
copied in chunks of this size.
|
copied in chunks of this size.
|
||||||
|
|
||||||
The minimum is 0 and the maximum is 4.6GB.
|
The minimum is 0 and the maximum is 4.6GB.
|
||||||
|
|
|
@ -192,7 +192,7 @@ description: "Rclone Changelog"
|
||||||
* Azure Blob
|
* Azure Blob
|
||||||
* Don't compile on < go1.13 after dependency update (Nick Craig-Wood)
|
* Don't compile on < go1.13 after dependency update (Nick Craig-Wood)
|
||||||
* B2
|
* B2
|
||||||
* Implement server side copy for files > 5GB (Nick Craig-Wood)
|
* Implement server-side copy for files > 5GB (Nick Craig-Wood)
|
||||||
* Cancel in progress multipart uploads and copies on rclone exit (Nick Craig-Wood)
|
* Cancel in progress multipart uploads and copies on rclone exit (Nick Craig-Wood)
|
||||||
* Note that b2's encoding now allows \ but rclone's hasn't changed (Nick Craig-Wood)
|
* Note that b2's encoding now allows \ but rclone's hasn't changed (Nick Craig-Wood)
|
||||||
* Fix transfers when using download_url (Nick Craig-Wood)
|
* Fix transfers when using download_url (Nick Craig-Wood)
|
||||||
|
@ -208,7 +208,7 @@ description: "Rclone Changelog"
|
||||||
* Work around drive bug which didn't set modtime of copied docs (Nick Craig-Wood)
|
* Work around drive bug which didn't set modtime of copied docs (Nick Craig-Wood)
|
||||||
* Added `--drive-starred-only` to only show starred files (Jay McEntire)
|
* Added `--drive-starred-only` to only show starred files (Jay McEntire)
|
||||||
* Deprecate `--drive-alternate-export` as it is no longer needed (themylogin)
|
* Deprecate `--drive-alternate-export` as it is no longer needed (themylogin)
|
||||||
* Fix duplication of Google docs on server side copy (Nick Craig-Wood)
|
* Fix duplication of Google docs on server-side copy (Nick Craig-Wood)
|
||||||
* Fix "panic: send on closed channel" when recycling dir entries (Nick Craig-Wood)
|
* Fix "panic: send on closed channel" when recycling dir entries (Nick Craig-Wood)
|
||||||
* Dropbox
|
* Dropbox
|
||||||
* Add copyright detector info in limitations section in the docs (Alex Guerrero)
|
* Add copyright detector info in limitations section in the docs (Alex Guerrero)
|
||||||
|
@ -798,7 +798,7 @@ all the docs and Edward Barker for helping re-write the front page.
|
||||||
* Free objects after they come out of the transfer pipe to save memory (Nick Craig-Wood)
|
* Free objects after they come out of the transfer pipe to save memory (Nick Craig-Wood)
|
||||||
* Fix `--files-from without --no-traverse` doing a recursive scan (Nick Craig-Wood)
|
* Fix `--files-from without --no-traverse` doing a recursive scan (Nick Craig-Wood)
|
||||||
* operations
|
* operations
|
||||||
* Fix accounting for server side copies (Nick Craig-Wood)
|
* Fix accounting for server-side copies (Nick Craig-Wood)
|
||||||
* Display 'All duplicates removed' only if dedupe successful (Sezal Agrawal)
|
* Display 'All duplicates removed' only if dedupe successful (Sezal Agrawal)
|
||||||
* Display 'Deleted X extra copies' only if dedupe successful (Sezal Agrawal)
|
* Display 'Deleted X extra copies' only if dedupe successful (Sezal Agrawal)
|
||||||
* accounting
|
* accounting
|
||||||
|
@ -997,10 +997,10 @@ all the docs and Edward Barker for helping re-write the front page.
|
||||||
* Make all operations work from the root (Nick Craig-Wood)
|
* Make all operations work from the root (Nick Craig-Wood)
|
||||||
* B2
|
* B2
|
||||||
* Implement link sharing (yparitcher)
|
* Implement link sharing (yparitcher)
|
||||||
* Enable server side copy to copy between buckets (Nick Craig-Wood)
|
* Enable server-side copy to copy between buckets (Nick Craig-Wood)
|
||||||
* Make all operations work from the root (Nick Craig-Wood)
|
* Make all operations work from the root (Nick Craig-Wood)
|
||||||
* Drive
|
* Drive
|
||||||
* Fix server side copy of big files (Nick Craig-Wood)
|
* Fix server-side copy of big files (Nick Craig-Wood)
|
||||||
* Update API for teamdrive use (Nick Craig-Wood)
|
* Update API for teamdrive use (Nick Craig-Wood)
|
||||||
* Add error for purge with `--drive-trashed-only` (ginvine)
|
* Add error for purge with `--drive-trashed-only` (ginvine)
|
||||||
* Fichier
|
* Fichier
|
||||||
|
@ -1094,12 +1094,12 @@ all the docs and Edward Barker for helping re-write the front page.
|
||||||
* Support PublicLink (rclone link) of underlying backend (Nick Craig-Wood)
|
* Support PublicLink (rclone link) of underlying backend (Nick Craig-Wood)
|
||||||
* Implement Optional methods SetTier, GetTier (Nick Craig-Wood)
|
* Implement Optional methods SetTier, GetTier (Nick Craig-Wood)
|
||||||
* B2
|
* B2
|
||||||
* Implement server side copy (Nick Craig-Wood)
|
* Implement server-side copy (Nick Craig-Wood)
|
||||||
* Implement SetModTime (Nick Craig-Wood)
|
* Implement SetModTime (Nick Craig-Wood)
|
||||||
* Drive
|
* Drive
|
||||||
* Fix move and copy from TeamDrive to GDrive (Fionera)
|
* Fix move and copy from TeamDrive to GDrive (Fionera)
|
||||||
* Add notes that cleanup works in the background on drive (Nick Craig-Wood)
|
* Add notes that cleanup works in the background on drive (Nick Craig-Wood)
|
||||||
* Add `--drive-server-side-across-configs` to default back to old server side copy semantics by default (Nick Craig-Wood)
|
* Add `--drive-server-side-across-configs` to default back to old server-side copy semantics by default (Nick Craig-Wood)
|
||||||
* Add `--drive-size-as-quota` to show storage quota usage for file size (Garry McNulty)
|
* Add `--drive-size-as-quota` to show storage quota usage for file size (Garry McNulty)
|
||||||
* FTP
|
* FTP
|
||||||
* Add FTP List timeout (Jeff Quinn)
|
* Add FTP List timeout (Jeff Quinn)
|
||||||
|
@ -1138,7 +1138,7 @@ all the docs and Edward Barker for helping re-write the front page.
|
||||||
* use `--disable ListR` to get old behaviour if required
|
* use `--disable ListR` to get old behaviour if required
|
||||||
* Make `--files-from` traverse the destination unless `--no-traverse` is set (Nick Craig-Wood)
|
* Make `--files-from` traverse the destination unless `--no-traverse` is set (Nick Craig-Wood)
|
||||||
* this fixes `--files-from` with Google drive and excessive API use in general.
|
* this fixes `--files-from` with Google drive and excessive API use in general.
|
||||||
* Make server side copy account bytes and obey `--max-transfer` (Nick Craig-Wood)
|
* Make server-side copy account bytes and obey `--max-transfer` (Nick Craig-Wood)
|
||||||
* Add `--create-empty-src-dirs` flag and default to not creating empty dirs (ishuah)
|
* Add `--create-empty-src-dirs` flag and default to not creating empty dirs (ishuah)
|
||||||
* Add client side TLS/SSL flags `--ca-cert`/`--client-cert`/`--client-key` (Nick Craig-Wood)
|
* Add client side TLS/SSL flags `--ca-cert`/`--client-cert`/`--client-key` (Nick Craig-Wood)
|
||||||
* Implement `--suffix-keep-extension` for use with `--suffix` (Nick Craig-Wood)
|
* Implement `--suffix-keep-extension` for use with `--suffix` (Nick Craig-Wood)
|
||||||
|
@ -1173,11 +1173,11 @@ all the docs and Edward Barker for helping re-write the front page.
|
||||||
* Ignore malformed `src_last_modified_millis` (Nick Craig-Wood)
|
* Ignore malformed `src_last_modified_millis` (Nick Craig-Wood)
|
||||||
* Drive
|
* Drive
|
||||||
* Add `--skip-checksum-gphotos` to ignore incorrect checksums on Google Photos (Nick Craig-Wood)
|
* Add `--skip-checksum-gphotos` to ignore incorrect checksums on Google Photos (Nick Craig-Wood)
|
||||||
* Allow server side move/copy between different remotes. (Fionera)
|
* Allow server-side move/copy between different remotes. (Fionera)
|
||||||
* Add docs on team drives and `--fast-list` eventual consistency (Nestar47)
|
* Add docs on team drives and `--fast-list` eventual consistency (Nestar47)
|
||||||
* Fix imports of text files (Nick Craig-Wood)
|
* Fix imports of text files (Nick Craig-Wood)
|
||||||
* Fix range requests on 0 length files (Nick Craig-Wood)
|
* Fix range requests on 0 length files (Nick Craig-Wood)
|
||||||
* Fix creation of duplicates with server side copy (Nick Craig-Wood)
|
* Fix creation of duplicates with server-side copy (Nick Craig-Wood)
|
||||||
* Dropbox
|
* Dropbox
|
||||||
* Retry blank errors to fix long listings (Nick Craig-Wood)
|
* Retry blank errors to fix long listings (Nick Craig-Wood)
|
||||||
* FTP
|
* FTP
|
||||||
|
@ -1390,7 +1390,7 @@ all the docs and Edward Barker for helping re-write the front page.
|
||||||
* Fix transfer of files with `+` and `&` in (Nick Craig-Wood)
|
* Fix transfer of files with `+` and `&` in (Nick Craig-Wood)
|
||||||
* Fix retries of upload chunks (Nick Craig-Wood)
|
* Fix retries of upload chunks (Nick Craig-Wood)
|
||||||
* S3
|
* S3
|
||||||
* Set ACL for server side copies to that provided by the user (Nick Craig-Wood)
|
* Set ACL for server-side copies to that provided by the user (Nick Craig-Wood)
|
||||||
* Fix role_arn, credential_source, ... (Erik Swanson)
|
* Fix role_arn, credential_source, ... (Erik Swanson)
|
||||||
* Add config info for Wasabi's US-West endpoint (Henry Ptasinski)
|
* Add config info for Wasabi's US-West endpoint (Henry Ptasinski)
|
||||||
* SFTP
|
* SFTP
|
||||||
|
@ -1433,7 +1433,7 @@ all the docs and Edward Barker for helping re-write the front page.
|
||||||
* VFS
|
* VFS
|
||||||
* Fix race condition detected by serve ftp tests (Nick Craig-Wood)
|
* Fix race condition detected by serve ftp tests (Nick Craig-Wood)
|
||||||
* Add vfs/poll-interval rc command (Fabian Möller)
|
* Add vfs/poll-interval rc command (Fabian Möller)
|
||||||
* Enable rename for nearly all remotes using server side Move or Copy (Nick Craig-Wood)
|
* Enable rename for nearly all remotes using server-side Move or Copy (Nick Craig-Wood)
|
||||||
* Reduce directory cache cleared by poll-interval (Fabian Möller)
|
* Reduce directory cache cleared by poll-interval (Fabian Möller)
|
||||||
* Remove EXPERIMENTAL tags (Nick Craig-Wood)
|
* Remove EXPERIMENTAL tags (Nick Craig-Wood)
|
||||||
* Local
|
* Local
|
||||||
|
@ -1618,7 +1618,7 @@ Point release to fix hubic and azureblob backends.
|
||||||
* Swift
|
* Swift
|
||||||
* Add `storage_policy` (Ruben Vandamme)
|
* Add `storage_policy` (Ruben Vandamme)
|
||||||
* Make it so just `storage_url` or `auth_token` can be overridden (Nick Craig-Wood)
|
* Make it so just `storage_url` or `auth_token` can be overridden (Nick Craig-Wood)
|
||||||
* Fix server side copy bug for unusual file names (Nick Craig-Wood)
|
* Fix server-side copy bug for unusual file names (Nick Craig-Wood)
|
||||||
* Remove leading / from paths (Nick Craig-Wood)
|
* Remove leading / from paths (Nick Craig-Wood)
|
||||||
* WebDAV
|
* WebDAV
|
||||||
* Ensure we call MKCOL with a URL with a trailing / for QNAP interop (Nick Craig-Wood)
|
* Ensure we call MKCOL with a URL with a trailing / for QNAP interop (Nick Craig-Wood)
|
||||||
|
@ -1936,7 +1936,7 @@ Point release to fix hubic and azureblob backends.
|
||||||
* Update docs to discourage use of v2 auth with CEPH and others
|
* Update docs to discourage use of v2 auth with CEPH and others
|
||||||
* Don't check for bucket/container presence if listing was OK
|
* Don't check for bucket/container presence if listing was OK
|
||||||
* this makes rclone do one less request per invocation
|
* this makes rclone do one less request per invocation
|
||||||
* Fix server side copy and set modtime on files with + in
|
* Fix server-side copy and set modtime on files with + in
|
||||||
* SFTP
|
* SFTP
|
||||||
* Add option to disable remote hash check command execution (Jon Fautley)
|
* Add option to disable remote hash check command execution (Jon Fautley)
|
||||||
* Add `--sftp-ask-password` flag to prompt for password when needed (Leo R. Lundgren)
|
* Add `--sftp-ask-password` flag to prompt for password when needed (Leo R. Lundgren)
|
||||||
|
@ -2073,7 +2073,7 @@ Point release to fix hubic and azureblob backends.
|
||||||
* Fix "entry doesn't belong in directory" error
|
* Fix "entry doesn't belong in directory" error
|
||||||
* Stop using deprecated API methods
|
* Stop using deprecated API methods
|
||||||
* Swift
|
* Swift
|
||||||
* Fix server side copy to empty container with `--fast-list`
|
* Fix server-side copy to empty container with `--fast-list`
|
||||||
* Google Drive
|
* Google Drive
|
||||||
* Change the default for `--drive-use-trash` to `true`
|
* Change the default for `--drive-use-trash` to `true`
|
||||||
* S3
|
* S3
|
||||||
|
@ -2173,7 +2173,7 @@ Point release to fix hubic and azureblob backends.
|
||||||
* Retry on token expired error, reset upload body on retry - Yoni Jah
|
* Retry on token expired error, reset upload body on retry - Yoni Jah
|
||||||
* Google Cloud Storage
|
* Google Cloud Storage
|
||||||
* Add ability to specify location and storage class via config and command line - thanks gdm85
|
* Add ability to specify location and storage class via config and command line - thanks gdm85
|
||||||
* Create container if necessary on server side copy
|
* Create container if necessary on server-side copy
|
||||||
* Increase directory listing chunk to 1000 to increase performance
|
* Increase directory listing chunk to 1000 to increase performance
|
||||||
* Obtain a refresh token for GCS - Steven Lu
|
* Obtain a refresh token for GCS - Steven Lu
|
||||||
* Yandex
|
* Yandex
|
||||||
|
@ -2189,14 +2189,14 @@ Point release to fix hubic and azureblob backends.
|
||||||
* Now supports low level retries
|
* Now supports low level retries
|
||||||
* S3
|
* S3
|
||||||
* Work around eventual consistency in bucket creation
|
* Work around eventual consistency in bucket creation
|
||||||
* Create container if necessary on server side copy
|
* Create container if necessary on server-side copy
|
||||||
* Add us-east-2 (Ohio) and eu-west-2 (London) S3 regions - Zahiar Ahmed
|
* Add us-east-2 (Ohio) and eu-west-2 (London) S3 regions - Zahiar Ahmed
|
||||||
* Swift, Hubic
|
* Swift, Hubic
|
||||||
* Fix zero length directory markers showing in the subdirectory listing
|
* Fix zero length directory markers showing in the subdirectory listing
|
||||||
* this caused lots of duplicate transfers
|
* this caused lots of duplicate transfers
|
||||||
* Fix paged directory listings
|
* Fix paged directory listings
|
||||||
* this caused duplicate directory errors
|
* this caused duplicate directory errors
|
||||||
* Create container if necessary on server side copy
|
* Create container if necessary on server-side copy
|
||||||
* Increase directory listing chunk to 1000 to increase performance
|
* Increase directory listing chunk to 1000 to increase performance
|
||||||
* Make sensible error if the user forgets the container
|
* Make sensible error if the user forgets the container
|
||||||
* SFTP
|
* SFTP
|
||||||
|
@ -2298,7 +2298,7 @@ Point release to fix hubic and azureblob backends.
|
||||||
* Allow repeated --include/--exclude/--filter options
|
* Allow repeated --include/--exclude/--filter options
|
||||||
* Only show transfer stats on commands which transfer stuff
|
* Only show transfer stats on commands which transfer stuff
|
||||||
* show stats on any command using the `--stats` flag
|
* show stats on any command using the `--stats` flag
|
||||||
* Allow overlapping directories in move when server side dir move is supported
|
* Allow overlapping directories in move when server-side dir move is supported
|
||||||
* Add --stats-unit option - thanks Scott McGillivray
|
* Add --stats-unit option - thanks Scott McGillivray
|
||||||
* Bug Fixes
|
* Bug Fixes
|
||||||
* Fix the config file being overwritten when two rclone instances are running
|
* Fix the config file being overwritten when two rclone instances are running
|
||||||
|
@ -2320,7 +2320,7 @@ Point release to fix hubic and azureblob backends.
|
||||||
* Fix failed to authenticate decrypted block errors
|
* Fix failed to authenticate decrypted block errors
|
||||||
* these will now return the underlying unexpected EOF instead
|
* these will now return the underlying unexpected EOF instead
|
||||||
* Amazon Drive
|
* Amazon Drive
|
||||||
* Add support for server side move and directory move - thanks Stefan Breunig
|
* Add support for server-side move and directory move - thanks Stefan Breunig
|
||||||
* Fix nil pointer deref on size attribute
|
* Fix nil pointer deref on size attribute
|
||||||
* B2
|
* B2
|
||||||
* Use new prefix and delimiter parameters in directory listings
|
* Use new prefix and delimiter parameters in directory listings
|
||||||
|
@ -2611,7 +2611,7 @@ Point release to fix hubic and azureblob backends.
|
||||||
* Swift
|
* Swift
|
||||||
* Fix sync for chunked files
|
* Fix sync for chunked files
|
||||||
* OneDrive
|
* OneDrive
|
||||||
* Re-enable server side copy
|
* Re-enable server-side copy
|
||||||
* Don't mask HTTP error codes with JSON decode error
|
* Don't mask HTTP error codes with JSON decode error
|
||||||
* S3
|
* S3
|
||||||
* Fix corrupting Content-Type on mod time update (thanks Joseph Spurrier)
|
* Fix corrupting Content-Type on mod time update (thanks Joseph Spurrier)
|
||||||
|
@ -2629,7 +2629,7 @@ Point release to fix hubic and azureblob backends.
|
||||||
* This could have caused data loss for files > 5GB in size
|
* This could have caused data loss for files > 5GB in size
|
||||||
* Use ContentType from Object to avoid lookups in listings
|
* Use ContentType from Object to avoid lookups in listings
|
||||||
* OneDrive
|
* OneDrive
|
||||||
* disable server side copy as it seems to be broken at Microsoft
|
* disable server-side copy as it seems to be broken at Microsoft
|
||||||
|
|
||||||
## v1.24 - 2015-11-07
|
## v1.24 - 2015-11-07
|
||||||
|
|
||||||
|
@ -2690,7 +2690,7 @@ Point release to fix hubic and azureblob backends.
|
||||||
* drive, googlecloudstorage: optionally use auto config for the oauth token
|
* drive, googlecloudstorage: optionally use auto config for the oauth token
|
||||||
* Implement --dump-headers and --dump-bodies debug flags
|
* Implement --dump-headers and --dump-bodies debug flags
|
||||||
* Show multiple matched commands if abbreviation too short
|
* Show multiple matched commands if abbreviation too short
|
||||||
* Implement server side move where possible
|
* Implement server-side move where possible
|
||||||
* local
|
* local
|
||||||
* Always use UNC paths internally on Windows - fixes a lot of bugs
|
* Always use UNC paths internally on Windows - fixes a lot of bugs
|
||||||
* dropbox
|
* dropbox
|
||||||
|
@ -2701,7 +2701,7 @@ Point release to fix hubic and azureblob backends.
|
||||||
|
|
||||||
* New features
|
* New features
|
||||||
* Server side copies for s3/swift/drive/dropbox/gcs
|
* Server side copies for s3/swift/drive/dropbox/gcs
|
||||||
* Move command - uses server side copies if it can
|
* Move command - uses server-side copies if it can
|
||||||
* Implement --retries flag - tries 3 times by default
|
* Implement --retries flag - tries 3 times by default
|
||||||
* Build for plan9/amd64 and solaris/amd64 too
|
* Build for plan9/amd64 and solaris/amd64 too
|
||||||
* Fixes
|
* Fixes
|
||||||
|
|
|
@ -271,7 +271,7 @@ remove everything including garbage.
|
||||||
|
|
||||||
### Caveats and Limitations
|
### Caveats and Limitations
|
||||||
|
|
||||||
Chunker requires wrapped remote to support server side `move` (or `copy` +
|
Chunker requires wrapped remote to support server-side `move` (or `copy` +
|
||||||
`delete`) operations, otherwise it will explicitly refuse to start.
|
`delete`) operations, otherwise it will explicitly refuse to start.
|
||||||
This is because it internally renames temporary chunk files to their final
|
This is because it internally renames temporary chunk files to their final
|
||||||
names when an operation completes successfully.
|
names when an operation completes successfully.
|
||||||
|
|
|
@ -350,7 +350,7 @@ Here are the advanced options specific to crypt (Encrypt/Decrypt a remote).
|
||||||
|
|
||||||
#### --crypt-server-side-across-configs
|
#### --crypt-server-side-across-configs
|
||||||
|
|
||||||
Allow server side operations (eg copy) to work across different crypt configs.
|
Allow server-side operations (eg copy) to work across different crypt configs.
|
||||||
|
|
||||||
Normally this option is not what you want, but if you have two crypts
|
Normally this option is not what you want, but if you have two crypts
|
||||||
pointing to the same backend you can use it.
|
pointing to the same backend you can use it.
|
||||||
|
|
|
@ -264,7 +264,7 @@ Server Side Copy
|
||||||
----------------
|
----------------
|
||||||
|
|
||||||
Most remotes (but not all - see [the
|
Most remotes (but not all - see [the
|
||||||
overview](/overview/#optional-features)) support server side copy.
|
overview](/overview/#optional-features)) support server-side copy.
|
||||||
|
|
||||||
This means if you want to copy one folder to another then rclone won't
|
This means if you want to copy one folder to another then rclone won't
|
||||||
download all the files and re-upload them; it will instruct the server
|
download all the files and re-upload them; it will instruct the server
|
||||||
|
@ -277,13 +277,13 @@ Eg
|
||||||
Will copy the contents of `oldbucket` to `newbucket` without
|
Will copy the contents of `oldbucket` to `newbucket` without
|
||||||
downloading and re-uploading.
|
downloading and re-uploading.
|
||||||
|
|
||||||
Remotes which don't support server side copy **will** download and
|
Remotes which don't support server-side copy **will** download and
|
||||||
re-upload in this case.
|
re-upload in this case.
|
||||||
|
|
||||||
Server side copies are used with `sync` and `copy` and will be
|
Server side copies are used with `sync` and `copy` and will be
|
||||||
identified in the log when using the `-v` flag. The `move` command
|
identified in the log when using the `-v` flag. The `move` command
|
||||||
may also use them if remote doesn't support server side move directly.
|
may also use them if remote doesn't support server-side move directly.
|
||||||
This is done by issuing a server side copy then a delete which is much
|
This is done by issuing a server-side copy then a delete which is much
|
||||||
quicker than a download and re-upload.
|
quicker than a download and re-upload.
|
||||||
|
|
||||||
Server side copies will only be attempted if the remote names are the
|
Server side copies will only be attempted if the remote names are the
|
||||||
|
@ -328,7 +328,7 @@ If `--suffix` is set, then the moved files will have the suffix added
|
||||||
to them. If there is a file with the same path (after the suffix has
|
to them. If there is a file with the same path (after the suffix has
|
||||||
been added) in DIR, then it will be overwritten.
|
been added) in DIR, then it will be overwritten.
|
||||||
|
|
||||||
The remote in use must support server side move or copy and you must
|
The remote in use must support server-side move or copy and you must
|
||||||
use the same remote as the destination of the sync. The backup
|
use the same remote as the destination of the sync. The backup
|
||||||
directory must not overlap the destination directory.
|
directory must not overlap the destination directory.
|
||||||
|
|
||||||
|
@ -537,10 +537,10 @@ connection to go through to a remote object storage system. It is
|
||||||
|
|
||||||
When using `sync`, `copy` or `move` DIR is checked in addition to the
|
When using `sync`, `copy` or `move` DIR is checked in addition to the
|
||||||
destination for files. If a file identical to the source is found that
|
destination for files. If a file identical to the source is found that
|
||||||
file is server side copied from DIR to the destination. This is useful
|
file is server-side copied from DIR to the destination. This is useful
|
||||||
for incremental backup.
|
for incremental backup.
|
||||||
|
|
||||||
The remote in use must support server side copy and you must
|
The remote in use must support server-side copy and you must
|
||||||
use the same remote as the destination of the sync. The compare
|
use the same remote as the destination of the sync. The compare
|
||||||
directory must not overlap the destination directory.
|
directory must not overlap the destination directory.
|
||||||
|
|
||||||
|
@ -553,7 +553,7 @@ Mode to run dedupe command in. One of `interactive`, `skip`, `first`, `newest`,
|
||||||
### --disable FEATURE,FEATURE,... ###
|
### --disable FEATURE,FEATURE,... ###
|
||||||
|
|
||||||
This disables a comma separated list of optional features. For example
|
This disables a comma separated list of optional features. For example
|
||||||
to disable server side move and server side copy use:
|
to disable server-side move and server-side copy use:
|
||||||
|
|
||||||
--disable move,copy
|
--disable move,copy
|
||||||
|
|
||||||
|
@ -1250,7 +1250,7 @@ overwritten or deleted will have the suffix added to them. If there
|
||||||
is a file with the same path (after the suffix has been added), then
|
is a file with the same path (after the suffix has been added), then
|
||||||
it will be overwritten.
|
it will be overwritten.
|
||||||
|
|
||||||
The remote in use must support server side move or copy and you must
|
The remote in use must support server-side move or copy and you must
|
||||||
use the same remote as the destination of the sync.
|
use the same remote as the destination of the sync.
|
||||||
|
|
||||||
This is for use with files to add the suffix in the current directory
|
This is for use with files to add the suffix in the current directory
|
||||||
|
@ -1331,8 +1331,8 @@ By default, rclone doesn't keep track of renamed files, so if you
|
||||||
rename a file locally then sync it to a remote, rclone will delete the
|
rename a file locally then sync it to a remote, rclone will delete the
|
||||||
old file on the remote and upload a new copy.
|
old file on the remote and upload a new copy.
|
||||||
|
|
||||||
If you use this flag, and the remote supports server side copy or
|
If you use this flag, and the remote supports server-side copy or
|
||||||
server side move, and the source and destination have a compatible
|
server-side move, and the source and destination have a compatible
|
||||||
hash, then this will track renames during `sync`
|
hash, then this will track renames during `sync`
|
||||||
operations and perform renaming server-side.
|
operations and perform renaming server-side.
|
||||||
|
|
||||||
|
|
|
@ -407,8 +407,8 @@ For shortcuts pointing to files:
|
||||||
- When listing a file shortcut appears as the destination file.
|
- When listing a file shortcut appears as the destination file.
|
||||||
- When downloading the contents of the destination file is downloaded.
|
- When downloading the contents of the destination file is downloaded.
|
||||||
- When updating shortcut file with a non shortcut file, the shortcut is removed then a new file is uploaded in place of the shortcut.
|
- When updating shortcut file with a non shortcut file, the shortcut is removed then a new file is uploaded in place of the shortcut.
|
||||||
- When server side moving (renaming) the shortcut is renamed, not the destination file.
|
- When server-side moving (renaming) the shortcut is renamed, not the destination file.
|
||||||
- When server side copying the shortcut is copied, not the contents of the shortcut.
|
- When server-side copying the shortcut is copied, not the contents of the shortcut.
|
||||||
- When deleting the shortcut is deleted not the linked file.
|
- When deleting the shortcut is deleted not the linked file.
|
||||||
- When setting the modification time, the modification time of the linked file will be set.
|
- When setting the modification time, the modification time of the linked file will be set.
|
||||||
|
|
||||||
|
@ -417,8 +417,8 @@ For shortcuts pointing to folders:
|
||||||
- When listing the shortcut appears as a folder and that folder will contain the contents of the linked folder appear (including any sub folders)
|
- When listing the shortcut appears as a folder and that folder will contain the contents of the linked folder appear (including any sub folders)
|
||||||
- When downloading the contents of the linked folder and sub contents are downloaded
|
- When downloading the contents of the linked folder and sub contents are downloaded
|
||||||
- When uploading to a shortcut folder the file will be placed in the linked folder
|
- When uploading to a shortcut folder the file will be placed in the linked folder
|
||||||
- When server side moving (renaming) the shortcut is renamed, not the destination folder
|
- When server-side moving (renaming) the shortcut is renamed, not the destination folder
|
||||||
- When server side copying the contents of the linked folder is copied, not the shortcut.
|
- When server-side copying the contents of the linked folder is copied, not the shortcut.
|
||||||
- When deleting with `rclone rmdir` or `rclone purge` the shortcut is deleted not the linked folder.
|
- When deleting with `rclone rmdir` or `rclone purge` the shortcut is deleted not the linked folder.
|
||||||
- **NB** When deleting with `rclone remove` or `rclone mount` the contents of the linked folder will be deleted.
|
- **NB** When deleting with `rclone remove` or `rclone mount` the contents of the linked folder will be deleted.
|
||||||
|
|
||||||
|
@ -956,9 +956,9 @@ Number of API calls to allow without sleeping.
|
||||||
|
|
||||||
#### --drive-server-side-across-configs
|
#### --drive-server-side-across-configs
|
||||||
|
|
||||||
Allow server side operations (eg copy) to work across different drive configs.
|
Allow server-side operations (eg copy) to work across different drive configs.
|
||||||
|
|
||||||
This can be useful if you wish to do a server side copy between two
|
This can be useful if you wish to do a server-side copy between two
|
||||||
different Google drives. Note that this isn't enabled by default
|
different Google drives. Note that this isn't enabled by default
|
||||||
because it isn't easy to tell if it will work between any two
|
because it isn't easy to tell if it will work between any two
|
||||||
configurations.
|
configurations.
|
||||||
|
@ -1182,7 +1182,7 @@ small files can take a long time.
|
||||||
|
|
||||||
Server side copies are also subject to a separate rate limit. If you
|
Server side copies are also subject to a separate rate limit. If you
|
||||||
see User rate limit exceeded errors, wait at least 24 hours and retry.
|
see User rate limit exceeded errors, wait at least 24 hours and retry.
|
||||||
You can disable server side copies with `--disable copy` to download
|
You can disable server-side copies with `--disable copy` to download
|
||||||
and upload the files if you prefer.
|
and upload the files if you prefer.
|
||||||
|
|
||||||
#### Limitations of Google Docs ####
|
#### Limitations of Google Docs ####
|
||||||
|
|
|
@ -139,7 +139,7 @@ These flags are available for every command.
|
||||||
--timeout duration IO idle timeout (default 5m0s)
|
--timeout duration IO idle timeout (default 5m0s)
|
||||||
--tpslimit float Limit HTTP transactions per second to this.
|
--tpslimit float Limit HTTP transactions per second to this.
|
||||||
--tpslimit-burst int Max burst of transactions for --tpslimit. (default 1)
|
--tpslimit-burst int Max burst of transactions for --tpslimit. (default 1)
|
||||||
--track-renames When synchronizing, track file renames and do a server side move if possible
|
--track-renames When synchronizing, track file renames and do a server-side move if possible
|
||||||
--track-renames-strategy string Strategies to use when synchronizing using track-renames hash|modtime|leaf (default "hash")
|
--track-renames-strategy string Strategies to use when synchronizing using track-renames hash|modtime|leaf (default "hash")
|
||||||
--transfers int Number of file transfers to run in parallel. (default 4)
|
--transfers int Number of file transfers to run in parallel. (default 4)
|
||||||
-u, --update Skip files that are newer on the destination.
|
-u, --update Skip files that are newer on the destination.
|
||||||
|
@ -239,7 +239,7 @@ and may be set in the config file.
|
||||||
--crypt-password string Password or pass phrase for encryption. (obscured)
|
--crypt-password string Password or pass phrase for encryption. (obscured)
|
||||||
--crypt-password2 string Password or pass phrase for salt. Optional but recommended. (obscured)
|
--crypt-password2 string Password or pass phrase for salt. Optional but recommended. (obscured)
|
||||||
--crypt-remote string Remote to encrypt/decrypt.
|
--crypt-remote string Remote to encrypt/decrypt.
|
||||||
--crypt-server-side-across-configs Allow server side operations (eg copy) to work across different crypt configs.
|
--crypt-server-side-across-configs Allow server-side operations (eg copy) to work across different crypt configs.
|
||||||
--crypt-show-mapping For all files listed show how the names encrypt.
|
--crypt-show-mapping For all files listed show how the names encrypt.
|
||||||
--drive-acknowledge-abuse Set to allow files which return cannotDownloadAbusiveFile to be downloaded.
|
--drive-acknowledge-abuse Set to allow files which return cannotDownloadAbusiveFile to be downloaded.
|
||||||
--drive-allow-import-name-change Allow the filetype to change when uploading Google docs (e.g. file.doc to file.docx). This will confuse sync and reupload every time.
|
--drive-allow-import-name-change Allow the filetype to change when uploading Google docs (e.g. file.doc to file.docx). This will confuse sync and reupload every time.
|
||||||
|
@ -260,7 +260,7 @@ and may be set in the config file.
|
||||||
--drive-pacer-min-sleep Duration Minimum time to sleep between API calls. (default 100ms)
|
--drive-pacer-min-sleep Duration Minimum time to sleep between API calls. (default 100ms)
|
||||||
--drive-root-folder-id string ID of the root folder
|
--drive-root-folder-id string ID of the root folder
|
||||||
--drive-scope string Scope that rclone should use when requesting access from drive.
|
--drive-scope string Scope that rclone should use when requesting access from drive.
|
||||||
--drive-server-side-across-configs Allow server side operations (eg copy) to work across different drive configs.
|
--drive-server-side-across-configs Allow server-side operations (eg copy) to work across different drive configs.
|
||||||
--drive-service-account-credentials string Service Account Credentials JSON blob
|
--drive-service-account-credentials string Service Account Credentials JSON blob
|
||||||
--drive-service-account-file string Service Account Credentials JSON file path
|
--drive-service-account-file string Service Account Credentials JSON file path
|
||||||
--drive-shared-with-me Only show files that are shared with me.
|
--drive-shared-with-me Only show files that are shared with me.
|
||||||
|
@ -377,7 +377,7 @@ and may be set in the config file.
|
||||||
--onedrive-encoding MultiEncoder This sets the encoding for the backend. (default Slash,LtGt,DoubleQuote,Colon,Question,Asterisk,Pipe,Hash,Percent,BackSlash,Del,Ctl,LeftSpace,LeftTilde,RightSpace,RightPeriod,InvalidUtf8,Dot)
|
--onedrive-encoding MultiEncoder This sets the encoding for the backend. (default Slash,LtGt,DoubleQuote,Colon,Question,Asterisk,Pipe,Hash,Percent,BackSlash,Del,Ctl,LeftSpace,LeftTilde,RightSpace,RightPeriod,InvalidUtf8,Dot)
|
||||||
--onedrive-expose-onenote-files Set to make OneNote files show up in directory listings.
|
--onedrive-expose-onenote-files Set to make OneNote files show up in directory listings.
|
||||||
--onedrive-no-versions Remove all versions on modifying operations
|
--onedrive-no-versions Remove all versions on modifying operations
|
||||||
--onedrive-server-side-across-configs Allow server side operations (eg copy) to work across different onedrive configs.
|
--onedrive-server-side-across-configs Allow server-side operations (eg copy) to work across different onedrive configs.
|
||||||
--onedrive-token string OAuth Access Token as a JSON blob.
|
--onedrive-token string OAuth Access Token as a JSON blob.
|
||||||
--onedrive-token-url string Token server url.
|
--onedrive-token-url string Token server url.
|
||||||
--opendrive-chunk-size SizeSuffix Files will be uploaded in chunks this size. (default 10M)
|
--opendrive-chunk-size SizeSuffix Files will be uploaded in chunks this size. (default 10M)
|
||||||
|
|
|
@ -265,7 +265,7 @@ Note that `--timeout` isn't supported (but `--contimeout` is).
|
||||||
|
|
||||||
Note that `--bind` isn't supported.
|
Note that `--bind` isn't supported.
|
||||||
|
|
||||||
FTP could support server side move but doesn't yet.
|
FTP could support server-side move but doesn't yet.
|
||||||
|
|
||||||
Note that the ftp backend does not support the `ftp_proxy` environment
|
Note that the ftp backend does not support the `ftp_proxy` environment
|
||||||
variable yet.
|
variable yet.
|
||||||
|
|
|
@ -298,9 +298,9 @@ listing, set this option.
|
||||||
|
|
||||||
#### --onedrive-server-side-across-configs
|
#### --onedrive-server-side-across-configs
|
||||||
|
|
||||||
Allow server side operations (eg copy) to work across different onedrive configs.
|
Allow server-side operations (eg copy) to work across different onedrive configs.
|
||||||
|
|
||||||
This can be useful if you wish to do a server side copy between two
|
This can be useful if you wish to do a server-side copy between two
|
||||||
different Onedrives. Note that this isn't enabled by default
|
different Onedrives. Note that this isn't enabled by default
|
||||||
because it isn't easy to tell if it will work between any two
|
because it isn't easy to tell if it will work between any two
|
||||||
configurations.
|
configurations.
|
||||||
|
|
|
@ -371,7 +371,7 @@ files other than deleting them individually.
|
||||||
### Copy ###
|
### Copy ###
|
||||||
|
|
||||||
Used when copying an object to and from the same remote. This known
|
Used when copying an object to and from the same remote. This known
|
||||||
as a server side copy so you can copy a file without downloading it
|
as a server-side copy so you can copy a file without downloading it
|
||||||
and uploading it again. It is used if you use `rclone copy` or
|
and uploading it again. It is used if you use `rclone copy` or
|
||||||
`rclone move` if the remote doesn't support `Move` directly.
|
`rclone move` if the remote doesn't support `Move` directly.
|
||||||
|
|
||||||
|
@ -381,7 +381,7 @@ the file is downloaded then re-uploaded.
|
||||||
### Move ###
|
### Move ###
|
||||||
|
|
||||||
Used when moving/renaming an object on the same remote. This is known
|
Used when moving/renaming an object on the same remote. This is known
|
||||||
as a server side move of a file. This is used in `rclone move` if the
|
as a server-side move of a file. This is used in `rclone move` if the
|
||||||
server doesn't support `DirMove`.
|
server doesn't support `DirMove`.
|
||||||
|
|
||||||
If the server isn't capable of `Move` then rclone simulates it with
|
If the server isn't capable of `Move` then rclone simulates it with
|
||||||
|
|
|
@ -433,7 +433,7 @@ that will generate one or more buckets that will work with `rclone sync`.
|
||||||
|
|
||||||
### Key Management System (KMS) ###
|
### Key Management System (KMS) ###
|
||||||
|
|
||||||
If you are using server side encryption with KMS then you will find
|
If you are using server-side encryption with KMS then you will find
|
||||||
you can't transfer small objects. As a work-around you can use the
|
you can't transfer small objects. As a work-around you can use the
|
||||||
`--ignore-checksum` flag.
|
`--ignore-checksum` flag.
|
||||||
|
|
||||||
|
@ -1001,7 +1001,7 @@ This ACL is used for creating objects and if bucket_acl isn't set, for creating
|
||||||
|
|
||||||
For more info visit https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#canned-acl
|
For more info visit https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#canned-acl
|
||||||
|
|
||||||
Note that this ACL is applied when server side copying objects as S3
|
Note that this ACL is applied when server-side copying objects as S3
|
||||||
doesn't copy the ACL from the source but rather writes a fresh one.
|
doesn't copy the ACL from the source but rather writes a fresh one.
|
||||||
|
|
||||||
- Config: acl
|
- Config: acl
|
||||||
|
@ -1253,7 +1253,7 @@ large file of a known size to stay below this number of chunks limit.
|
||||||
|
|
||||||
Cutoff for switching to multipart copy
|
Cutoff for switching to multipart copy
|
||||||
|
|
||||||
Any files larger than this that need to be server side copied will be
|
Any files larger than this that need to be server-side copied will be
|
||||||
copied in chunks of this size.
|
copied in chunks of this size.
|
||||||
|
|
||||||
The minimum is 0 and the maximum is 5GB.
|
The minimum is 0 and the maximum is 5GB.
|
||||||
|
@ -2170,7 +2170,7 @@ Choose a number from below, or type in your own value
|
||||||
endpoint> 1
|
endpoint> 1
|
||||||
Canned ACL used when creating buckets and storing or copying objects.
|
Canned ACL used when creating buckets and storing or copying objects.
|
||||||
|
|
||||||
Note that this ACL is applied when server side copying objects as S3
|
Note that this ACL is applied when server-side copying objects as S3
|
||||||
doesn't copy the ACL from the source but rather writes a fresh one.
|
doesn't copy the ACL from the source but rather writes a fresh one.
|
||||||
Enter a string value. Press Enter for the default ("").
|
Enter a string value. Press Enter for the default ("").
|
||||||
Choose a number from below, or type in your own value
|
Choose a number from below, or type in your own value
|
||||||
|
@ -2306,7 +2306,7 @@ endpoint> 4
|
||||||
7. Choose acl and storage class.
|
7. Choose acl and storage class.
|
||||||
|
|
||||||
```
|
```
|
||||||
Note that this ACL is applied when server side copying objects as S3
|
Note that this ACL is applied when server-side copying objects as S3
|
||||||
doesn't copy the ACL from the source but rather writes a fresh one.
|
doesn't copy the ACL from the source but rather writes a fresh one.
|
||||||
Enter a string value. Press Enter for the default ("").
|
Enter a string value. Press Enter for the default ("").
|
||||||
Choose a number from below, or type in your own value
|
Choose a number from below, or type in your own value
|
||||||
|
|
|
@ -256,7 +256,7 @@ func (acc *Account) checkReadAfter(bytesUntilLimit int64, n int, err error) (out
|
||||||
return n, err
|
return n, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// ServerSideCopyStart should be called at the start of a server side copy
|
// ServerSideCopyStart should be called at the start of a server-side copy
|
||||||
//
|
//
|
||||||
// This pretends a transfer has started
|
// This pretends a transfer has started
|
||||||
func (acc *Account) ServerSideCopyStart() {
|
func (acc *Account) ServerSideCopyStart() {
|
||||||
|
|
|
@ -64,7 +64,7 @@ func AddFlags(flagSet *pflag.FlagSet) {
|
||||||
flags.BoolVarP(flagSet, &deleteDuring, "delete-during", "", false, "When synchronizing, delete files during transfer")
|
flags.BoolVarP(flagSet, &deleteDuring, "delete-during", "", false, "When synchronizing, delete files during transfer")
|
||||||
flags.BoolVarP(flagSet, &deleteAfter, "delete-after", "", false, "When synchronizing, delete files on destination after transferring (default)")
|
flags.BoolVarP(flagSet, &deleteAfter, "delete-after", "", false, "When synchronizing, delete files on destination after transferring (default)")
|
||||||
flags.Int64VarP(flagSet, &fs.Config.MaxDelete, "max-delete", "", -1, "When synchronizing, limit the number of deletes")
|
flags.Int64VarP(flagSet, &fs.Config.MaxDelete, "max-delete", "", -1, "When synchronizing, limit the number of deletes")
|
||||||
flags.BoolVarP(flagSet, &fs.Config.TrackRenames, "track-renames", "", fs.Config.TrackRenames, "When synchronizing, track file renames and do a server side move if possible")
|
flags.BoolVarP(flagSet, &fs.Config.TrackRenames, "track-renames", "", fs.Config.TrackRenames, "When synchronizing, track file renames and do a server-side move if possible")
|
||||||
flags.StringVarP(flagSet, &fs.Config.TrackRenamesStrategy, "track-renames-strategy", "", fs.Config.TrackRenamesStrategy, "Strategies to use when synchronizing using track-renames hash|modtime|leaf")
|
flags.StringVarP(flagSet, &fs.Config.TrackRenamesStrategy, "track-renames-strategy", "", fs.Config.TrackRenamesStrategy, "Strategies to use when synchronizing using track-renames hash|modtime|leaf")
|
||||||
flags.IntVarP(flagSet, &fs.Config.LowLevelRetries, "low-level-retries", "", fs.Config.LowLevelRetries, "Number of low level retries to do.")
|
flags.IntVarP(flagSet, &fs.Config.LowLevelRetries, "low-level-retries", "", fs.Config.LowLevelRetries, "Number of low level retries to do.")
|
||||||
flags.BoolVarP(flagSet, &fs.Config.UpdateOlder, "update", "u", fs.Config.UpdateOlder, "Skip files that are newer on the destination.")
|
flags.BoolVarP(flagSet, &fs.Config.UpdateOlder, "update", "u", fs.Config.UpdateOlder, "Skip files that are newer on the destination.")
|
||||||
|
|
14
fs/fs.go
14
fs/fs.go
|
@ -513,7 +513,7 @@ type Features struct {
|
||||||
BucketBasedRootOK bool // is bucket based and can use from root
|
BucketBasedRootOK bool // is bucket based and can use from root
|
||||||
SetTier bool // allows set tier functionality on objects
|
SetTier bool // allows set tier functionality on objects
|
||||||
GetTier bool // allows to retrieve storage tier of objects
|
GetTier bool // allows to retrieve storage tier of objects
|
||||||
ServerSideAcrossConfigs bool // can server side copy between different remotes of the same type
|
ServerSideAcrossConfigs bool // can server-side copy between different remotes of the same type
|
||||||
IsLocal bool // is the local backend
|
IsLocal bool // is the local backend
|
||||||
SlowModTime bool // if calling ModTime() generally takes an extra transaction
|
SlowModTime bool // if calling ModTime() generally takes an extra transaction
|
||||||
SlowHash bool // if calling Hash() generally takes an extra transaction
|
SlowHash bool // if calling Hash() generally takes an extra transaction
|
||||||
|
@ -526,7 +526,7 @@ type Features struct {
|
||||||
// Return an error if it doesn't exist
|
// Return an error if it doesn't exist
|
||||||
Purge func(ctx context.Context, dir string) error
|
Purge func(ctx context.Context, dir string) error
|
||||||
|
|
||||||
// Copy src to this remote using server side copy operations.
|
// Copy src to this remote using server-side copy operations.
|
||||||
//
|
//
|
||||||
// This is stored with the remote path given
|
// This is stored with the remote path given
|
||||||
//
|
//
|
||||||
|
@ -537,7 +537,7 @@ type Features struct {
|
||||||
// If it isn't possible then return fs.ErrorCantCopy
|
// If it isn't possible then return fs.ErrorCantCopy
|
||||||
Copy func(ctx context.Context, src Object, remote string) (Object, error)
|
Copy func(ctx context.Context, src Object, remote string) (Object, error)
|
||||||
|
|
||||||
// Move src to this remote using server side move operations.
|
// Move src to this remote using server-side move operations.
|
||||||
//
|
//
|
||||||
// This is stored with the remote path given
|
// This is stored with the remote path given
|
||||||
//
|
//
|
||||||
|
@ -549,7 +549,7 @@ type Features struct {
|
||||||
Move func(ctx context.Context, src Object, remote string) (Object, error)
|
Move func(ctx context.Context, src Object, remote string) (Object, error)
|
||||||
|
|
||||||
// DirMove moves src, srcRemote to this remote at dstRemote
|
// DirMove moves src, srcRemote to this remote at dstRemote
|
||||||
// using server side move operations.
|
// using server-side move operations.
|
||||||
//
|
//
|
||||||
// Will only be called if src.Fs().Name() == f.Name()
|
// Will only be called if src.Fs().Name() == f.Name()
|
||||||
//
|
//
|
||||||
|
@ -894,7 +894,7 @@ type Purger interface {
|
||||||
|
|
||||||
// Copier is an optional interface for Fs
|
// Copier is an optional interface for Fs
|
||||||
type Copier interface {
|
type Copier interface {
|
||||||
// Copy src to this remote using server side copy operations.
|
// Copy src to this remote using server-side copy operations.
|
||||||
//
|
//
|
||||||
// This is stored with the remote path given
|
// This is stored with the remote path given
|
||||||
//
|
//
|
||||||
|
@ -908,7 +908,7 @@ type Copier interface {
|
||||||
|
|
||||||
// Mover is an optional interface for Fs
|
// Mover is an optional interface for Fs
|
||||||
type Mover interface {
|
type Mover interface {
|
||||||
// Move src to this remote using server side move operations.
|
// Move src to this remote using server-side move operations.
|
||||||
//
|
//
|
||||||
// This is stored with the remote path given
|
// This is stored with the remote path given
|
||||||
//
|
//
|
||||||
|
@ -923,7 +923,7 @@ type Mover interface {
|
||||||
// DirMover is an optional interface for Fs
|
// DirMover is an optional interface for Fs
|
||||||
type DirMover interface {
|
type DirMover interface {
|
||||||
// DirMove moves src, srcRemote to this remote at dstRemote
|
// DirMove moves src, srcRemote to this remote at dstRemote
|
||||||
// using server side move operations.
|
// using server-side move operations.
|
||||||
//
|
//
|
||||||
// Will only be called if src.Fs().Name() == f.Name()
|
// Will only be called if src.Fs().Name() == f.Name()
|
||||||
//
|
//
|
||||||
|
|
|
@ -372,9 +372,9 @@ func Copy(ctx context.Context, f fs.Fs, dst fs.Object, remote string, src fs.Obj
|
||||||
|
|
||||||
var actionTaken string
|
var actionTaken string
|
||||||
for {
|
for {
|
||||||
// Try server side copy first - if has optional interface and
|
// Try server-side copy first - if has optional interface and
|
||||||
// is same underlying remote
|
// is same underlying remote
|
||||||
actionTaken = "Copied (server side copy)"
|
actionTaken = "Copied (server-side copy)"
|
||||||
if fs.Config.MaxTransfer >= 0 && (accounting.Stats(ctx).GetBytes() >= int64(fs.Config.MaxTransfer) ||
|
if fs.Config.MaxTransfer >= 0 && (accounting.Stats(ctx).GetBytes() >= int64(fs.Config.MaxTransfer) ||
|
||||||
(fs.Config.CutoffMode == fs.CutoffModeCautious && accounting.Stats(ctx).GetBytesWithPending()+src.Size() >= int64(fs.Config.MaxTransfer))) {
|
(fs.Config.CutoffMode == fs.CutoffModeCautious && accounting.Stats(ctx).GetBytesWithPending()+src.Size() >= int64(fs.Config.MaxTransfer))) {
|
||||||
return nil, accounting.ErrorMaxTransferLimitReachedGraceful
|
return nil, accounting.ErrorMaxTransferLimitReachedGraceful
|
||||||
|
@ -385,7 +385,7 @@ func Copy(ctx context.Context, f fs.Fs, dst fs.Object, remote string, src fs.Obj
|
||||||
newDst, err = doCopy(ctx, src, remote)
|
newDst, err = doCopy(ctx, src, remote)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
dst = newDst
|
dst = newDst
|
||||||
in.ServerSideCopyEnd(dst.Size()) // account the bytes for the server side transfer
|
in.ServerSideCopyEnd(dst.Size()) // account the bytes for the server-side transfer
|
||||||
err = in.Close()
|
err = in.Close()
|
||||||
} else {
|
} else {
|
||||||
_ = in.Close()
|
_ = in.Close()
|
||||||
|
@ -396,7 +396,7 @@ func Copy(ctx context.Context, f fs.Fs, dst fs.Object, remote string, src fs.Obj
|
||||||
} else {
|
} else {
|
||||||
err = fs.ErrorCantCopy
|
err = fs.ErrorCantCopy
|
||||||
}
|
}
|
||||||
// If can't server side copy, do it manually
|
// If can't server-side copy, do it manually
|
||||||
if err == fs.ErrorCantCopy {
|
if err == fs.ErrorCantCopy {
|
||||||
if doMultiThreadCopy(f, src) {
|
if doMultiThreadCopy(f, src) {
|
||||||
// Number of streams proportional to size
|
// Number of streams proportional to size
|
||||||
|
@ -556,7 +556,7 @@ func Move(ctx context.Context, fdst fs.Fs, dst fs.Object, remote string, src fs.
|
||||||
newDst, err = doMove(ctx, src, remote)
|
newDst, err = doMove(ctx, src, remote)
|
||||||
switch err {
|
switch err {
|
||||||
case nil:
|
case nil:
|
||||||
fs.Infof(src, "Moved (server side)")
|
fs.Infof(src, "Moved (server-side)")
|
||||||
return newDst, nil
|
return newDst, nil
|
||||||
case fs.ErrorCantMove:
|
case fs.ErrorCantMove:
|
||||||
fs.Debugf(src, "Can't move, switching to copy")
|
fs.Debugf(src, "Can't move, switching to copy")
|
||||||
|
@ -576,8 +576,8 @@ func Move(ctx context.Context, fdst fs.Fs, dst fs.Object, remote string, src fs.
|
||||||
return newDst, DeleteFile(ctx, src)
|
return newDst, DeleteFile(ctx, src)
|
||||||
}
|
}
|
||||||
|
|
||||||
// CanServerSideMove returns true if fdst support server side moves or
|
// CanServerSideMove returns true if fdst support server-side moves or
|
||||||
// server side copies
|
// server-side copies
|
||||||
//
|
//
|
||||||
// Some remotes simulate rename by server-side copy and delete, so include
|
// Some remotes simulate rename by server-side copy and delete, so include
|
||||||
// remotes that implements either Mover or Copier.
|
// remotes that implements either Mover or Copier.
|
||||||
|
@ -1287,7 +1287,7 @@ func GetCopyDest(fdst fs.Fs) (CopyDest fs.Fs, err error) {
|
||||||
return nil, fserrors.FatalError(errors.New("parameter to --copy-dest has to be on the same remote as destination"))
|
return nil, fserrors.FatalError(errors.New("parameter to --copy-dest has to be on the same remote as destination"))
|
||||||
}
|
}
|
||||||
if CopyDest.Features().Copy == nil {
|
if CopyDest.Features().Copy == nil {
|
||||||
return nil, fserrors.FatalError(errors.New("can't use --copy-dest on a remote which doesn't support server side copy"))
|
return nil, fserrors.FatalError(errors.New("can't use --copy-dest on a remote which doesn't support server-side copy"))
|
||||||
}
|
}
|
||||||
return CopyDest, nil
|
return CopyDest, nil
|
||||||
}
|
}
|
||||||
|
@ -1329,7 +1329,7 @@ func copyDest(ctx context.Context, fdst fs.Fs, dst, src fs.Object, CopyDest, bac
|
||||||
fs.Errorf(src, "Destination found in --copy-dest, error copying")
|
fs.Errorf(src, "Destination found in --copy-dest, error copying")
|
||||||
return false, nil
|
return false, nil
|
||||||
}
|
}
|
||||||
fs.Debugf(src, "Destination found in --copy-dest, using server side copy")
|
fs.Debugf(src, "Destination found in --copy-dest, using server-side copy")
|
||||||
return true, nil
|
return true, nil
|
||||||
}
|
}
|
||||||
fs.Debugf(src, "Unchanged skipping")
|
fs.Debugf(src, "Unchanged skipping")
|
||||||
|
@ -1543,7 +1543,7 @@ func BackupDir(fdst fs.Fs, fsrc fs.Fs, srcFileName string) (backupDir fs.Fs, err
|
||||||
return nil, fserrors.FatalError(errors.New("internal error: BackupDir called when --backup-dir and --suffix both empty"))
|
return nil, fserrors.FatalError(errors.New("internal error: BackupDir called when --backup-dir and --suffix both empty"))
|
||||||
}
|
}
|
||||||
if !CanServerSideMove(backupDir) {
|
if !CanServerSideMove(backupDir) {
|
||||||
return nil, fserrors.FatalError(errors.New("can't use --backup-dir on a remote which doesn't support server side move or copy"))
|
return nil, fserrors.FatalError(errors.New("can't use --backup-dir on a remote which doesn't support server-side move or copy"))
|
||||||
}
|
}
|
||||||
return backupDir, nil
|
return backupDir, nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -736,7 +736,7 @@ func TestMoveFileBackupDir(t *testing.T) {
|
||||||
r := fstest.NewRun(t)
|
r := fstest.NewRun(t)
|
||||||
defer r.Finalise()
|
defer r.Finalise()
|
||||||
if !operations.CanServerSideMove(r.Fremote) {
|
if !operations.CanServerSideMove(r.Fremote) {
|
||||||
t.Skip("Skipping test as remote does not support server side move or copy")
|
t.Skip("Skipping test as remote does not support server-side move or copy")
|
||||||
}
|
}
|
||||||
|
|
||||||
oldBackupDir := fs.Config.BackupDir
|
oldBackupDir := fs.Config.BackupDir
|
||||||
|
@ -788,7 +788,7 @@ func TestCopyFileBackupDir(t *testing.T) {
|
||||||
r := fstest.NewRun(t)
|
r := fstest.NewRun(t)
|
||||||
defer r.Finalise()
|
defer r.Finalise()
|
||||||
if !operations.CanServerSideMove(r.Fremote) {
|
if !operations.CanServerSideMove(r.Fremote) {
|
||||||
t.Skip("Skipping test as remote does not support server side move or copy")
|
t.Skip("Skipping test as remote does not support server-side move or copy")
|
||||||
}
|
}
|
||||||
|
|
||||||
oldBackupDir := fs.Config.BackupDir
|
oldBackupDir := fs.Config.BackupDir
|
||||||
|
@ -896,7 +896,7 @@ func TestCopyFileCopyDest(t *testing.T) {
|
||||||
defer r.Finalise()
|
defer r.Finalise()
|
||||||
|
|
||||||
if r.Fremote.Features().Copy == nil {
|
if r.Fremote.Features().Copy == nil {
|
||||||
t.Skip("Skipping test as remote does not support server side copy")
|
t.Skip("Skipping test as remote does not support server-side copy")
|
||||||
}
|
}
|
||||||
|
|
||||||
fs.Config.CopyDest = r.FremoteName + "/CopyDest"
|
fs.Config.CopyDest = r.FremoteName + "/CopyDest"
|
||||||
|
|
|
@ -39,7 +39,7 @@ type syncCopyMove struct {
|
||||||
noUnicodeNormalization bool // don't normalize unicode characters in filenames
|
noUnicodeNormalization bool // don't normalize unicode characters in filenames
|
||||||
deletersWg sync.WaitGroup // for delete before go routine
|
deletersWg sync.WaitGroup // for delete before go routine
|
||||||
deleteFilesCh chan fs.Object // channel to receive deletes if delete before
|
deleteFilesCh chan fs.Object // channel to receive deletes if delete before
|
||||||
trackRenames bool // set if we should do server side renames
|
trackRenames bool // set if we should do server-side renames
|
||||||
trackRenamesStrategy trackRenamesStrategy // strategies used for tracking renames
|
trackRenamesStrategy trackRenamesStrategy // strategies used for tracking renames
|
||||||
dstFilesMu sync.Mutex // protect dstFiles
|
dstFilesMu sync.Mutex // protect dstFiles
|
||||||
dstFiles map[string]fs.Object // dst files, always filled
|
dstFiles map[string]fs.Object // dst files, always filled
|
||||||
|
@ -68,7 +68,7 @@ type syncCopyMove struct {
|
||||||
trackRenamesWg sync.WaitGroup // wg for background track renames
|
trackRenamesWg sync.WaitGroup // wg for background track renames
|
||||||
trackRenamesCh chan fs.Object // objects are pumped in here
|
trackRenamesCh chan fs.Object // objects are pumped in here
|
||||||
renameCheck []fs.Object // accumulate files to check for rename here
|
renameCheck []fs.Object // accumulate files to check for rename here
|
||||||
compareCopyDest fs.Fs // place to check for files to server side copy
|
compareCopyDest fs.Fs // place to check for files to server-side copy
|
||||||
backupDir fs.Fs // place to store overwrites/deletes
|
backupDir fs.Fs // place to store overwrites/deletes
|
||||||
checkFirst bool // if set run all the checkers before starting transfers
|
checkFirst bool // if set run all the checkers before starting transfers
|
||||||
}
|
}
|
||||||
|
@ -1089,10 +1089,10 @@ func MoveDir(ctx context.Context, fdst, fsrc fs.Fs, deleteEmptySrcDirs bool, cop
|
||||||
|
|
||||||
// First attempt to use DirMover if exists, same Fs and no filters are active
|
// First attempt to use DirMover if exists, same Fs and no filters are active
|
||||||
if fdstDirMove := fdst.Features().DirMove; fdstDirMove != nil && operations.SameConfig(fsrc, fdst) && filter.Active.InActive() {
|
if fdstDirMove := fdst.Features().DirMove; fdstDirMove != nil && operations.SameConfig(fsrc, fdst) && filter.Active.InActive() {
|
||||||
if operations.SkipDestructive(ctx, fdst, "server side directory move") {
|
if operations.SkipDestructive(ctx, fdst, "server-side directory move") {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
fs.Debugf(fdst, "Using server side directory move")
|
fs.Debugf(fdst, "Using server-side directory move")
|
||||||
err := fdstDirMove(ctx, fsrc, "", "")
|
err := fdstDirMove(ctx, fsrc, "", "")
|
||||||
switch err {
|
switch err {
|
||||||
case fs.ErrorCantDirMove, fs.ErrorDirExists:
|
case fs.ErrorCantDirMove, fs.ErrorDirExists:
|
||||||
|
|
|
@ -262,7 +262,7 @@ func TestSyncEmptyDirectories(t *testing.T) {
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Test a server side copy if possible, or the backup path if not
|
// Test a server-side copy if possible, or the backup path if not
|
||||||
func TestServerSideCopy(t *testing.T) {
|
func TestServerSideCopy(t *testing.T) {
|
||||||
r := fstest.NewRun(t)
|
r := fstest.NewRun(t)
|
||||||
defer r.Finalise()
|
defer r.Finalise()
|
||||||
|
@ -1207,7 +1207,7 @@ func toyFileTransfers(r *fstest.Run) int64 {
|
||||||
return int64(transfers)
|
return int64(transfers)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Test a server side move if possible, or the backup path if not
|
// Test a server-side move if possible, or the backup path if not
|
||||||
func testServerSideMove(t *testing.T, r *fstest.Run, withFilter, testDeleteEmptyDirs bool) {
|
func testServerSideMove(t *testing.T, r *fstest.Run, withFilter, testDeleteEmptyDirs bool) {
|
||||||
FremoteMove, _, finaliseMove, err := fstest.RandomRemote()
|
FremoteMove, _, finaliseMove, err := fstest.RandomRemote()
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
@ -1231,7 +1231,7 @@ func testServerSideMove(t *testing.T, r *fstest.Run, withFilter, testDeleteEmpty
|
||||||
file3 := r.WriteObjectTo(context.Background(), FremoteMove, "potato3", "------------------------------------------------------------", t1, false)
|
file3 := r.WriteObjectTo(context.Background(), FremoteMove, "potato3", "------------------------------------------------------------", t1, false)
|
||||||
fstest.CheckItems(t, FremoteMove, file2, file3)
|
fstest.CheckItems(t, FremoteMove, file2, file3)
|
||||||
|
|
||||||
// Do server side move
|
// Do server-side move
|
||||||
accounting.GlobalStats().ResetCounters()
|
accounting.GlobalStats().ResetCounters()
|
||||||
err = MoveDir(context.Background(), FremoteMove, r.Fremote, testDeleteEmptyDirs, false)
|
err = MoveDir(context.Background(), FremoteMove, r.Fremote, testDeleteEmptyDirs, false)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
@ -1322,14 +1322,14 @@ func TestMoveWithoutDeleteEmptySrcDirs(t *testing.T) {
|
||||||
fstest.CheckItems(t, r.Fremote, file1, file2)
|
fstest.CheckItems(t, r.Fremote, file1, file2)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Test a server side move if possible, or the backup path if not
|
// Test a server-side move if possible, or the backup path if not
|
||||||
func TestServerSideMove(t *testing.T) {
|
func TestServerSideMove(t *testing.T) {
|
||||||
r := fstest.NewRun(t)
|
r := fstest.NewRun(t)
|
||||||
defer r.Finalise()
|
defer r.Finalise()
|
||||||
testServerSideMove(t, r, false, false)
|
testServerSideMove(t, r, false, false)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Test a server side move if possible, or the backup path if not
|
// Test a server-side move if possible, or the backup path if not
|
||||||
func TestServerSideMoveWithFilter(t *testing.T) {
|
func TestServerSideMoveWithFilter(t *testing.T) {
|
||||||
r := fstest.NewRun(t)
|
r := fstest.NewRun(t)
|
||||||
defer r.Finalise()
|
defer r.Finalise()
|
||||||
|
@ -1342,14 +1342,14 @@ func TestServerSideMoveWithFilter(t *testing.T) {
|
||||||
testServerSideMove(t, r, true, false)
|
testServerSideMove(t, r, true, false)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Test a server side move if possible
|
// Test a server-side move if possible
|
||||||
func TestServerSideMoveDeleteEmptySourceDirs(t *testing.T) {
|
func TestServerSideMoveDeleteEmptySourceDirs(t *testing.T) {
|
||||||
r := fstest.NewRun(t)
|
r := fstest.NewRun(t)
|
||||||
defer r.Finalise()
|
defer r.Finalise()
|
||||||
testServerSideMove(t, r, false, true)
|
testServerSideMove(t, r, false, true)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Test a server side move with overlap
|
// Test a server-side move with overlap
|
||||||
func TestServerSideMoveOverlap(t *testing.T) {
|
func TestServerSideMoveOverlap(t *testing.T) {
|
||||||
r := fstest.NewRun(t)
|
r := fstest.NewRun(t)
|
||||||
defer r.Finalise()
|
defer r.Finalise()
|
||||||
|
@ -1492,7 +1492,7 @@ func TestSyncCopyDest(t *testing.T) {
|
||||||
defer r.Finalise()
|
defer r.Finalise()
|
||||||
|
|
||||||
if r.Fremote.Features().Copy == nil {
|
if r.Fremote.Features().Copy == nil {
|
||||||
t.Skip("Skipping test as remote does not support server side copy")
|
t.Skip("Skipping test as remote does not support server-side copy")
|
||||||
}
|
}
|
||||||
|
|
||||||
fs.Config.CopyDest = r.FremoteName + "/CopyDest"
|
fs.Config.CopyDest = r.FremoteName + "/CopyDest"
|
||||||
|
@ -1595,7 +1595,7 @@ func testSyncBackupDir(t *testing.T, backupDir string, suffix string, suffixKeep
|
||||||
defer r.Finalise()
|
defer r.Finalise()
|
||||||
|
|
||||||
if !operations.CanServerSideMove(r.Fremote) {
|
if !operations.CanServerSideMove(r.Fremote) {
|
||||||
t.Skip("Skipping test as remote does not support server side move")
|
t.Skip("Skipping test as remote does not support server-side move")
|
||||||
}
|
}
|
||||||
r.Mkdir(context.Background(), r.Fremote)
|
r.Mkdir(context.Background(), r.Fremote)
|
||||||
|
|
||||||
|
@ -1699,7 +1699,7 @@ func testSyncSuffix(t *testing.T, suffix string, suffixKeepExtension bool) {
|
||||||
defer r.Finalise()
|
defer r.Finalise()
|
||||||
|
|
||||||
if !operations.CanServerSideMove(r.Fremote) {
|
if !operations.CanServerSideMove(r.Fremote) {
|
||||||
t.Skip("Skipping test as remote does not support server side move")
|
t.Skip("Skipping test as remote does not support server-side move")
|
||||||
}
|
}
|
||||||
r.Mkdir(context.Background(), r.Fremote)
|
r.Mkdir(context.Background(), r.Fremote)
|
||||||
|
|
||||||
|
|
|
@ -1107,7 +1107,7 @@ func Run(t *testing.T, opt *Opt) {
|
||||||
require.NoError(t, remote.Rmdir(ctx, "moveTest"))
|
require.NoError(t, remote.Rmdir(ctx, "moveTest"))
|
||||||
})
|
})
|
||||||
|
|
||||||
// Move src to this remote using server side move operations.
|
// Move src to this remote using server-side move operations.
|
||||||
//
|
//
|
||||||
// Will only be called if src.Fs().Name() == f.Name()
|
// Will only be called if src.Fs().Name() == f.Name()
|
||||||
//
|
//
|
||||||
|
|
|
@ -166,7 +166,7 @@ func (f *File) rename(ctx context.Context, destDir *Dir, newName string) error {
|
||||||
f.mu.RUnlock()
|
f.mu.RUnlock()
|
||||||
|
|
||||||
if features := d.Fs().Features(); features.Move == nil && features.Copy == nil {
|
if features := d.Fs().Features(); features.Move == nil && features.Copy == nil {
|
||||||
err := errors.Errorf("Fs %q can't rename files (no server side Move or Copy)", d.Fs())
|
err := errors.Errorf("Fs %q can't rename files (no server-side Move or Copy)", d.Fs())
|
||||||
fs.Errorf(f.Path(), "Dir.Rename error: %v", err)
|
fs.Errorf(f.Path(), "Dir.Rename error: %v", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue