union: fix error handling broken by removal of github.com/pkg/errors

There were instances of errors.Wrap being called with a nil error
which the conversion didn't deal with correctly.
This commit is contained in:
Nick Craig-Wood 2021-11-09 13:00:51 +00:00
parent 2a31b5bdd6
commit 96e099d8e7
2 changed files with 29 additions and 9 deletions

View file

@ -82,7 +82,9 @@ func (o *Object) Update(ctx context.Context, in io.Reader, src fs.ObjectInfo, op
multithread(len(entries), func(i int) {
if o, ok := entries[i].(*upstream.Object); ok {
err := o.Update(ctx, readers[i], src, options...)
errs[i] = fmt.Errorf("%s: %w", o.UpstreamFs().Name(), err)
if err != nil {
errs[i] = fmt.Errorf("%s: %w", o.UpstreamFs().Name(), err)
}
} else {
errs[i] = fs.ErrorNotAFile
}
@ -101,7 +103,9 @@ func (o *Object) Remove(ctx context.Context) error {
multithread(len(entries), func(i int) {
if o, ok := entries[i].(*upstream.Object); ok {
err := o.Remove(ctx)
errs[i] = fmt.Errorf("%s: %w", o.UpstreamFs().Name(), err)
if err != nil {
errs[i] = fmt.Errorf("%s: %w", o.UpstreamFs().Name(), err)
}
} else {
errs[i] = fs.ErrorNotAFile
}
@ -120,7 +124,9 @@ func (o *Object) SetModTime(ctx context.Context, t time.Time) error {
multithread(len(entries), func(i int) {
if o, ok := entries[i].(*upstream.Object); ok {
err := o.SetModTime(ctx, t)
errs[i] = fmt.Errorf("%s: %w", o.UpstreamFs().Name(), err)
if err != nil {
errs[i] = fmt.Errorf("%s: %w", o.UpstreamFs().Name(), err)
}
} else {
errs[i] = fs.ErrorNotAFile
}

View file

@ -132,7 +132,9 @@ func (f *Fs) Rmdir(ctx context.Context, dir string) error {
errs := Errors(make([]error, len(upstreams)))
multithread(len(upstreams), func(i int) {
err := upstreams[i].Rmdir(ctx, dir)
errs[i] = fmt.Errorf("%s: %w", upstreams[i].Name(), err)
if err != nil {
errs[i] = fmt.Errorf("%s: %w", upstreams[i].Name(), err)
}
})
return errs.Err()
}
@ -162,7 +164,9 @@ func (f *Fs) Mkdir(ctx context.Context, dir string) error {
errs := Errors(make([]error, len(upstreams)))
multithread(len(upstreams), func(i int) {
err := upstreams[i].Mkdir(ctx, dir)
errs[i] = fmt.Errorf("%s: %w", upstreams[i].Name(), err)
if err != nil {
errs[i] = fmt.Errorf("%s: %w", upstreams[i].Name(), err)
}
})
return errs.Err()
}
@ -189,7 +193,9 @@ func (f *Fs) Purge(ctx context.Context, dir string) error {
if errors.Is(err, fs.ErrorDirNotFound) {
err = nil
}
errs[i] = fmt.Errorf("%s: %w", upstreams[i].Name(), err)
if err != nil {
errs[i] = fmt.Errorf("%s: %w", upstreams[i].Name(), err)
}
})
return errs.Err()
}
@ -285,10 +291,14 @@ func (f *Fs) Move(ctx context.Context, src fs.Object, remote string) (fs.Object,
}
// Do the Move or Copy
dstObj, err := do(ctx, srcObj, remote)
if err != nil || dstObj == nil {
if err != nil {
errs[i] = fmt.Errorf("%s: %w", su.Name(), err)
return
}
if dstObj == nil {
errs[i] = fmt.Errorf("%s: destination object not found", su.Name())
return
}
objs[i] = du.WrapObject(dstObj)
// Delete the source object if Copy
if duFeatures.Move == nil {
@ -349,7 +359,9 @@ func (f *Fs) DirMove(ctx context.Context, src fs.Fs, srcRemote, dstRemote string
return
}
err := du.Features().DirMove(ctx, su.Fs, srcRemote, dstRemote)
errs[i] = fmt.Errorf("%s: %w", du.Name()+":"+du.Root(), err)
if err != nil {
errs[i] = fmt.Errorf("%s: %w", du.Name()+":"+du.Root(), err)
}
})
errs = errs.FilterNil()
if len(errs) == 0 {
@ -777,7 +789,9 @@ func (f *Fs) Shutdown(ctx context.Context) error {
u := f.upstreams[i]
if do := u.Features().Shutdown; do != nil {
err := do(ctx)
errs[i] = fmt.Errorf("%s: %w", u.Name(), err)
if err != nil {
errs[i] = fmt.Errorf("%s: %w", u.Name(), err)
}
}
})
return errs.Err()