mirror of
https://github.com/rclone/rclone.git
synced 2025-06-20 11:47:57 +02:00
onedrive: fix crash if no metadata was updated
Before this change, rclone would crash if no metadata was updated. This could happen if the --onedrive-metadata-permissions read was supplied but metadata to write was supplied. Fixes #8586
This commit is contained in:
parent
768a4236e6
commit
99358cee88
@ -749,6 +749,8 @@ func (o *Object) fetchMetadataForCreate(ctx context.Context, src fs.ObjectInfo,
|
|||||||
|
|
||||||
// Fetch metadata and update updateInfo if --metadata is in use
|
// Fetch metadata and update updateInfo if --metadata is in use
|
||||||
// modtime will still be set when there is no metadata to set
|
// modtime will still be set when there is no metadata to set
|
||||||
|
//
|
||||||
|
// May return info=nil and err=nil if there was no metadata to update.
|
||||||
func (f *Fs) fetchAndUpdateMetadata(ctx context.Context, src fs.ObjectInfo, options []fs.OpenOption, updateInfo *Object) (info *api.Item, err error) {
|
func (f *Fs) fetchAndUpdateMetadata(ctx context.Context, src fs.ObjectInfo, options []fs.OpenOption, updateInfo *Object) (info *api.Item, err error) {
|
||||||
meta, err := fs.GetMetadataOptions(ctx, f, src, options)
|
meta, err := fs.GetMetadataOptions(ctx, f, src, options)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -768,6 +770,8 @@ func (f *Fs) fetchAndUpdateMetadata(ctx context.Context, src fs.ObjectInfo, opti
|
|||||||
}
|
}
|
||||||
|
|
||||||
// updateMetadata calls Get, Set, and Write
|
// updateMetadata calls Get, Set, and Write
|
||||||
|
//
|
||||||
|
// May return info=nil and err=nil if there was no metadata to update.
|
||||||
func (o *Object) updateMetadata(ctx context.Context, meta fs.Metadata) (info *api.Item, err error) {
|
func (o *Object) updateMetadata(ctx context.Context, meta fs.Metadata) (info *api.Item, err error) {
|
||||||
_, err = o.meta.Get(ctx) // refresh permissions
|
_, err = o.meta.Get(ctx) // refresh permissions
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -1782,7 +1782,9 @@ func (f *Fs) Copy(ctx context.Context, src fs.Object, remote string) (dst fs.Obj
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
if info != nil {
|
||||||
err = dstObj.setMetaData(info)
|
err = dstObj.setMetaData(info)
|
||||||
|
}
|
||||||
return dstObj, err
|
return dstObj, err
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1862,7 +1864,9 @@ func (f *Fs) Move(ctx context.Context, src fs.Object, remote string) (fs.Object,
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
if info != nil {
|
||||||
err = dstObj.setMetaData(info)
|
err = dstObj.setMetaData(info)
|
||||||
|
}
|
||||||
return dstObj, err
|
return dstObj, err
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2629,7 +2633,10 @@ func (o *Object) uploadSinglepart(ctx context.Context, in io.Reader, src fs.Obje
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("failed to fetch and update metadata: %w", err)
|
return nil, fmt.Errorf("failed to fetch and update metadata: %w", err)
|
||||||
}
|
}
|
||||||
return info, o.setMetaData(info)
|
if info != nil {
|
||||||
|
err = o.setMetaData(info)
|
||||||
|
}
|
||||||
|
return info, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update the object with the contents of the io.Reader, modTime and size
|
// Update the object with the contents of the io.Reader, modTime and size
|
||||||
|
Loading…
x
Reference in New Issue
Block a user