Merge pull request #4845 from greatroar/errors
Fix error handling bug + clean up error messages
This commit is contained in:
commit
3f878aa8e7
3 changed files with 20 additions and 8 deletions
|
@ -287,7 +287,7 @@ func readPassword(in io.Reader) (password string, err error) {
|
||||||
sc := bufio.NewScanner(in)
|
sc := bufio.NewScanner(in)
|
||||||
sc.Scan()
|
sc.Scan()
|
||||||
|
|
||||||
return sc.Text(), errors.Wrap(err, "Scan")
|
return sc.Text(), errors.WithStack(sc.Err())
|
||||||
}
|
}
|
||||||
|
|
||||||
// readPasswordTerminal reads the password from the given reader which must be a
|
// readPasswordTerminal reads the password from the given reader which must be a
|
||||||
|
|
|
@ -7,6 +7,7 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"github.com/restic/restic/internal/errors"
|
||||||
rtest "github.com/restic/restic/internal/test"
|
rtest "github.com/restic/restic/internal/test"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -24,6 +25,16 @@ func Test_PrintFunctionsRespectsGlobalStdout(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type errorReader struct{ err error }
|
||||||
|
|
||||||
|
func (r *errorReader) Read([]byte) (int, error) { return 0, r.err }
|
||||||
|
|
||||||
|
func TestReadPassword(t *testing.T) {
|
||||||
|
want := errors.New("foo")
|
||||||
|
_, err := readPassword(&errorReader{want})
|
||||||
|
rtest.Assert(t, errors.Is(err, want), "wrong error %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
func TestReadRepo(t *testing.T) {
|
func TestReadRepo(t *testing.T) {
|
||||||
tempDir := rtest.TempDir(t)
|
tempDir := rtest.TempDir(t)
|
||||||
|
|
||||||
|
|
|
@ -12,12 +12,13 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"cloud.google.com/go/storage"
|
"cloud.google.com/go/storage"
|
||||||
"github.com/pkg/errors"
|
|
||||||
"github.com/restic/restic/internal/backend"
|
"github.com/restic/restic/internal/backend"
|
||||||
"github.com/restic/restic/internal/backend/layout"
|
"github.com/restic/restic/internal/backend/layout"
|
||||||
"github.com/restic/restic/internal/backend/location"
|
"github.com/restic/restic/internal/backend/location"
|
||||||
"github.com/restic/restic/internal/backend/util"
|
"github.com/restic/restic/internal/backend/util"
|
||||||
"github.com/restic/restic/internal/debug"
|
"github.com/restic/restic/internal/debug"
|
||||||
|
"github.com/restic/restic/internal/errors"
|
||||||
|
|
||||||
"golang.org/x/oauth2"
|
"golang.org/x/oauth2"
|
||||||
"golang.org/x/oauth2/google"
|
"golang.org/x/oauth2/google"
|
||||||
|
@ -134,7 +135,7 @@ func Open(_ context.Context, cfg Config, rt http.RoundTripper) (backend.Backend,
|
||||||
func Create(ctx context.Context, cfg Config, rt http.RoundTripper) (backend.Backend, error) {
|
func Create(ctx context.Context, cfg Config, rt http.RoundTripper) (backend.Backend, error) {
|
||||||
be, err := open(cfg, rt)
|
be, err := open(cfg, rt)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errors.Wrap(err, "open")
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// Try to determine if the bucket exists. If it does not, try to create it.
|
// Try to determine if the bucket exists. If it does not, try to create it.
|
||||||
|
@ -145,7 +146,7 @@ func Create(ctx context.Context, cfg Config, rt http.RoundTripper) (backend.Back
|
||||||
// however, the client doesn't have storage.bucket.get permission
|
// however, the client doesn't have storage.bucket.get permission
|
||||||
return be, nil
|
return be, nil
|
||||||
}
|
}
|
||||||
return nil, errors.Wrap(err, "service.Buckets.Get")
|
return nil, errors.WithStack(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if !exists {
|
if !exists {
|
||||||
|
@ -155,7 +156,7 @@ func Create(ctx context.Context, cfg Config, rt http.RoundTripper) (backend.Back
|
||||||
// Bucket doesn't exist, try to create it.
|
// Bucket doesn't exist, try to create it.
|
||||||
if err := be.bucket.Create(ctx, be.projectID, bucketAttrs); err != nil {
|
if err := be.bucket.Create(ctx, be.projectID, bucketAttrs); err != nil {
|
||||||
// Always an error, as the bucket definitely doesn't exist.
|
// Always an error, as the bucket definitely doesn't exist.
|
||||||
return nil, errors.Wrap(err, "service.Buckets.Insert")
|
return nil, errors.WithStack(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -251,7 +252,7 @@ func (be *Backend) Save(ctx context.Context, h backend.Handle, rd backend.Rewind
|
||||||
}
|
}
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.Wrap(err, "service.Objects.Insert")
|
return errors.WithStack(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// sanity check
|
// sanity check
|
||||||
|
@ -298,7 +299,7 @@ func (be *Backend) Stat(ctx context.Context, h backend.Handle) (bi backend.FileI
|
||||||
attr, err := be.bucket.Object(objName).Attrs(ctx)
|
attr, err := be.bucket.Object(objName).Attrs(ctx)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return backend.FileInfo{}, errors.Wrap(err, "service.Objects.Get")
|
return backend.FileInfo{}, errors.WithStack(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
return backend.FileInfo{Size: attr.Size, Name: h.Name}, nil
|
return backend.FileInfo{Size: attr.Size, Name: h.Name}, nil
|
||||||
|
@ -314,7 +315,7 @@ func (be *Backend) Remove(ctx context.Context, h backend.Handle) error {
|
||||||
err = nil
|
err = nil
|
||||||
}
|
}
|
||||||
|
|
||||||
return errors.Wrap(err, "client.RemoveObject")
|
return errors.WithStack(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// List runs fn for each file in the backend which has the type t. When an
|
// List runs fn for each file in the backend which has the type t. When an
|
||||||
|
|
Loading…
Reference in a new issue