diff --git a/backend/hasher/hasher.go b/backend/hasher/hasher.go index 2d94895ee..ca9ad2675 100644 --- a/backend/hasher/hasher.go +++ b/backend/hasher/hasher.go @@ -202,7 +202,11 @@ func (f *Fs) wrapEntries(baseEntries fs.DirEntries) (hashEntries fs.DirEntries, for _, entry := range baseEntries { switch x := entry.(type) { case fs.Object: - hashEntries = append(hashEntries, f.wrapObject(x, nil)) + obj, err := f.wrapObject(x, nil) + if err != nil { + return nil, err + } + hashEntries = append(hashEntries, obj) default: hashEntries = append(hashEntries, entry) // trash in - trash out } @@ -251,7 +255,7 @@ func (f *Fs) PutStream(ctx context.Context, in io.Reader, src fs.ObjectInfo, opt if do := f.Fs.Features().PutStream; do != nil { _ = f.pruneHash(src.Remote()) oResult, err := do(ctx, in, src, options...) - return f.wrapObject(oResult, err), err + return f.wrapObject(oResult, err) } return nil, errors.New("PutStream not supported") } @@ -261,7 +265,7 @@ func (f *Fs) PutUnchecked(ctx context.Context, in io.Reader, src fs.ObjectInfo, if do := f.Fs.Features().PutUnchecked; do != nil { _ = f.pruneHash(src.Remote()) oResult, err := do(ctx, in, src, options...) - return f.wrapObject(oResult, err), err + return f.wrapObject(oResult, err) } return nil, errors.New("PutUnchecked not supported") } @@ -348,7 +352,7 @@ func (f *Fs) Copy(ctx context.Context, src fs.Object, remote string) (fs.Object, return nil, fs.ErrorCantCopy } oResult, err := do(ctx, o.Object, remote) - return f.wrapObject(oResult, err), err + return f.wrapObject(oResult, err) } // Move src to this remote using server-side move operations. @@ -371,7 +375,7 @@ func (f *Fs) Move(ctx context.Context, src fs.Object, remote string) (fs.Object, dir: false, fs: f, }) - return f.wrapObject(oResult, nil), nil + return f.wrapObject(oResult, nil) } // DirMove moves src, srcRemote to this remote at dstRemote using server-side move operations. @@ -410,7 +414,7 @@ func (f *Fs) Shutdown(ctx context.Context) (err error) { // NewObject finds the Object at remote. func (f *Fs) NewObject(ctx context.Context, remote string) (fs.Object, error) { o, err := f.Fs.NewObject(ctx, remote) - return f.wrapObject(o, err), err + return f.wrapObject(o, err) } // @@ -424,11 +428,14 @@ type Object struct { } // Wrap base object into hasher object -func (f *Fs) wrapObject(o fs.Object, err error) *Object { - if err != nil || o == nil { - return nil +func (f *Fs) wrapObject(o fs.Object, err error) (*Object, error) { + if err != nil { + return nil, err } - return &Object{Object: o, f: f} + if o == nil { + return nil, fs.ErrorObjectNotFound + } + return &Object{Object: o, f: f}, nil } // Fs returns read only access to the Fs that this object is part of diff --git a/backend/hasher/object.go b/backend/hasher/object.go index 1233740e6..3147cfed7 100644 --- a/backend/hasher/object.go +++ b/backend/hasher/object.go @@ -210,8 +210,8 @@ func (f *Fs) Put(ctx context.Context, in io.Reader, src fs.ObjectInfo, options . _ = f.pruneHash(src.Remote()) oResult, err := f.Fs.Put(ctx, wrapIn, src, options...) - o = f.wrapObject(oResult, err) - if o == nil { + o, err = f.wrapObject(oResult, err) + if err != nil { return nil, err }