diff --git a/backend/drive/drive.go b/backend/drive/drive.go index de83a902d..388444aad 100644 --- a/backend/drive/drive.go +++ b/backend/drive/drive.go @@ -1745,7 +1745,7 @@ func (f *Fs) createDir(ctx context.Context, pathID, leaf string, metadata fs.Met } var updateMetadata updateMetadataFn if len(metadata) > 0 { - updateMetadata, err = f.updateMetadata(ctx, createInfo, metadata, true) + updateMetadata, err = f.updateMetadata(ctx, createInfo, metadata, true, true) if err != nil { return nil, fmt.Errorf("create dir: failed to update metadata: %w", err) } @@ -1776,7 +1776,7 @@ func (f *Fs) updateDir(ctx context.Context, dirID string, metadata fs.Metadata) } dirID = actualID(dirID) updateInfo := &drive.File{} - updateMetadata, err := f.updateMetadata(ctx, updateInfo, metadata, true) + updateMetadata, err := f.updateMetadata(ctx, updateInfo, metadata, true, true) if err != nil { return nil, fmt.Errorf("update dir: failed to update metadata from source object: %w", err) } diff --git a/backend/drive/metadata.go b/backend/drive/metadata.go index be8e83b85..3f2800e49 100644 --- a/backend/drive/metadata.go +++ b/backend/drive/metadata.go @@ -507,7 +507,7 @@ type updateMetadataFn func(context.Context, *drive.File) error // // It returns a callback which should be called to finish the updates // after the data is uploaded. -func (f *Fs) updateMetadata(ctx context.Context, updateInfo *drive.File, meta fs.Metadata, update bool) (callback updateMetadataFn, err error) { +func (f *Fs) updateMetadata(ctx context.Context, updateInfo *drive.File, meta fs.Metadata, update, isFolder bool) (callback updateMetadataFn, err error) { callbackFns := []updateMetadataFn{} callback = func(ctx context.Context, info *drive.File) error { for _, fn := range callbackFns { @@ -532,7 +532,9 @@ func (f *Fs) updateMetadata(ctx context.Context, updateInfo *drive.File, meta fs } switch k { case "copy-requires-writer-permission": - if err := parseBool(&updateInfo.CopyRequiresWriterPermission); err != nil { + if isFolder { + fs.Debugf(f, "Ignoring %s=%s as can't set on folders", k, v) + } else if err := parseBool(&updateInfo.CopyRequiresWriterPermission); err != nil { return nil, err } case "writers-can-share": @@ -629,7 +631,7 @@ func (f *Fs) fetchAndUpdateMetadata(ctx context.Context, src fs.ObjectInfo, opti if err != nil { return nil, fmt.Errorf("failed to read metadata from source object: %w", err) } - callback, err = f.updateMetadata(ctx, updateInfo, meta, update) + callback, err = f.updateMetadata(ctx, updateInfo, meta, update, false) if err != nil { return nil, fmt.Errorf("failed to update metadata from source object: %w", err) }