mirror of
https://github.com/rclone/rclone.git
synced 2025-02-18 03:21:11 +01:00
operations: fix OpenOptions ignored in copy if operation was a multiThreadCopy
This commit is contained in:
parent
d3ce795c30
commit
48a8bfa6b3
@ -127,7 +127,7 @@ func calculateNumChunks(size int64, chunkSize int64) int {
|
|||||||
|
|
||||||
// Copy src to (f, remote) using streams download threads. It tries to use the OpenChunkWriter feature
|
// Copy src to (f, remote) using streams download threads. It tries to use the OpenChunkWriter feature
|
||||||
// and if that's not available it creates an adapter using OpenWriterAt
|
// and if that's not available it creates an adapter using OpenWriterAt
|
||||||
func multiThreadCopy(ctx context.Context, f fs.Fs, remote string, src fs.Object, concurrency int, tr *accounting.Transfer) (newDst fs.Object, err error) {
|
func multiThreadCopy(ctx context.Context, f fs.Fs, remote string, src fs.Object, concurrency int, tr *accounting.Transfer, options ...fs.OpenOption) (newDst fs.Object, err error) {
|
||||||
openChunkWriter := f.Features().OpenChunkWriter
|
openChunkWriter := f.Features().OpenChunkWriter
|
||||||
ci := fs.GetConfig(ctx)
|
ci := fs.GetConfig(ctx)
|
||||||
noseek := false
|
noseek := false
|
||||||
@ -148,7 +148,7 @@ func multiThreadCopy(ctx context.Context, f fs.Fs, remote string, src fs.Object,
|
|||||||
return nil, fmt.Errorf("multi-thread copy: can't copy zero sized file")
|
return nil, fmt.Errorf("multi-thread copy: can't copy zero sized file")
|
||||||
}
|
}
|
||||||
|
|
||||||
info, chunkWriter, err := openChunkWriter(ctx, remote, src)
|
info, chunkWriter, err := openChunkWriter(ctx, remote, src, options...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("multi-thread copy: failed to open chunk writer: %w", err)
|
return nil, fmt.Errorf("multi-thread copy: failed to open chunk writer: %w", err)
|
||||||
}
|
}
|
||||||
|
@ -422,8 +422,17 @@ func Copy(ctx context.Context, f fs.Fs, dst fs.Object, remote string, src fs.Obj
|
|||||||
removeFailedPartialCopy(ctx, f, remotePartial)
|
removeFailedPartialCopy(ctx, f, remotePartial)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uploadOptions := []fs.OpenOption{hashOption}
|
||||||
|
for _, option := range ci.UploadHeaders {
|
||||||
|
uploadOptions = append(uploadOptions, option)
|
||||||
|
}
|
||||||
|
if ci.MetadataSet != nil {
|
||||||
|
uploadOptions = append(uploadOptions, fs.MetadataOption(ci.MetadataSet))
|
||||||
|
}
|
||||||
|
|
||||||
if doMultiThreadCopy(ctx, f, src) {
|
if doMultiThreadCopy(ctx, f, src) {
|
||||||
dst, err = multiThreadCopy(ctx, f, remotePartial, src, ci.MultiThreadStreams, tr)
|
dst, err = multiThreadCopy(ctx, f, remotePartial, src, ci.MultiThreadStreams, tr, uploadOptions...)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
newDst = dst
|
newDst = dst
|
||||||
}
|
}
|
||||||
@ -467,17 +476,10 @@ func Copy(ctx context.Context, f fs.Fs, dst fs.Object, remote string, src fs.Obj
|
|||||||
if src.Remote() != remotePartial {
|
if src.Remote() != remotePartial {
|
||||||
wrappedSrc = fs.NewOverrideRemote(src, remotePartial)
|
wrappedSrc = fs.NewOverrideRemote(src, remotePartial)
|
||||||
}
|
}
|
||||||
options := []fs.OpenOption{hashOption}
|
|
||||||
for _, option := range ci.UploadHeaders {
|
|
||||||
options = append(options, option)
|
|
||||||
}
|
|
||||||
if ci.MetadataSet != nil {
|
|
||||||
options = append(options, fs.MetadataOption(ci.MetadataSet))
|
|
||||||
}
|
|
||||||
if doUpdate && inplace {
|
if doUpdate && inplace {
|
||||||
err = dst.Update(ctx, in, wrappedSrc, options...)
|
err = dst.Update(ctx, in, wrappedSrc, uploadOptions...)
|
||||||
} else {
|
} else {
|
||||||
dst, err = f.Put(ctx, in, wrappedSrc, options...)
|
dst, err = f.Put(ctx, in, wrappedSrc, uploadOptions...)
|
||||||
}
|
}
|
||||||
if doUpdate {
|
if doUpdate {
|
||||||
actionTaken = "Copied (replaced existing)"
|
actionTaken = "Copied (replaced existing)"
|
||||||
|
Loading…
Reference in New Issue
Block a user