diff --git a/cmd/restic/global.go b/cmd/restic/global.go index a5250ca38..2c5d0fac1 100644 --- a/cmd/restic/global.go +++ b/cmd/restic/global.go @@ -287,7 +287,7 @@ func readPassword(in io.Reader) (password string, err error) { sc := bufio.NewScanner(in) 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 diff --git a/cmd/restic/global_test.go b/cmd/restic/global_test.go index ce59bba49..8e97ece29 100644 --- a/cmd/restic/global_test.go +++ b/cmd/restic/global_test.go @@ -7,6 +7,7 @@ import ( "strings" "testing" + "github.com/restic/restic/internal/errors" 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) { tempDir := rtest.TempDir(t) diff --git a/internal/backend/gs/gs.go b/internal/backend/gs/gs.go index 305e9b9c1..0af226f5d 100644 --- a/internal/backend/gs/gs.go +++ b/internal/backend/gs/gs.go @@ -12,12 +12,13 @@ import ( "strings" "cloud.google.com/go/storage" - "github.com/pkg/errors" + "github.com/restic/restic/internal/backend" "github.com/restic/restic/internal/backend/layout" "github.com/restic/restic/internal/backend/location" "github.com/restic/restic/internal/backend/util" "github.com/restic/restic/internal/debug" + "github.com/restic/restic/internal/errors" "golang.org/x/oauth2" "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) { be, err := open(cfg, rt) 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. @@ -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 return be, nil } - return nil, errors.Wrap(err, "service.Buckets.Get") + return nil, errors.WithStack(err) } 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. if err := be.bucket.Create(ctx, be.projectID, bucketAttrs); err != nil { // 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 { - return errors.Wrap(err, "service.Objects.Insert") + return errors.WithStack(err) } // 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) 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 @@ -314,7 +315,7 @@ func (be *Backend) Remove(ctx context.Context, h backend.Handle) error { 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