From 83c35bd6b52ed1b6d5f23994e4f6d15b2d6b094d Mon Sep 17 00:00:00 2001 From: Alexander Neumann Date: Sun, 18 Sep 2016 13:24:29 +0200 Subject: [PATCH 1/3] Do not print stack trace when open repo failed Closes #622 --- src/cmds/restic/global.go | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/src/cmds/restic/global.go b/src/cmds/restic/global.go index 98fa4736f..7f55b2424 100644 --- a/src/cmds/restic/global.go +++ b/src/cmds/restic/global.go @@ -299,13 +299,15 @@ func open(s string) (restic.Backend, error) { return nil, err } + var be restic.Backend + switch loc.Scheme { case "local": debug.Log("open", "opening local repository at %#v", loc.Config) - return local.Open(loc.Config.(string)) + be, err = local.Open(loc.Config.(string)) case "sftp": debug.Log("open", "opening sftp repository at %#v", loc.Config) - return sftp.OpenWithConfig(loc.Config.(sftp.Config)) + be, err = sftp.OpenWithConfig(loc.Config.(sftp.Config)) case "s3": cfg := loc.Config.(s3.Config) if cfg.KeyID == "" { @@ -317,13 +319,18 @@ func open(s string) (restic.Backend, error) { } debug.Log("open", "opening s3 repository at %#v", cfg) - return s3.Open(cfg) + be, err = s3.Open(cfg) case "rest": - return rest.Open(loc.Config.(rest.Config)) + be, err = rest.Open(loc.Config.(rest.Config)) + default: + return nil, errors.Fatalf("invalid backend: %q", loc.Scheme) } - debug.Log("open", "invalid repository location: %v", s) - return nil, errors.Fatalf("invalid scheme %q", loc.Scheme) + if err != nil { + return nil, errors.Fatalf("unable to open repo at %v: %v", s, err) + } + + return be, nil } // Create the backend specified by URI. From 2b9a408ccceb34fbc4c2e803a7b64b71b6b5bac1 Mon Sep 17 00:00:00 2001 From: Alexander Neumann Date: Sun, 18 Sep 2016 13:28:41 +0200 Subject: [PATCH 2/3] Return a fatal for location.Parse --- src/cmds/restic/global.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cmds/restic/global.go b/src/cmds/restic/global.go index 7f55b2424..92c733b06 100644 --- a/src/cmds/restic/global.go +++ b/src/cmds/restic/global.go @@ -296,7 +296,7 @@ func open(s string) (restic.Backend, error) { debug.Log("open", "parsing location %v", s) loc, err := location.Parse(s) if err != nil { - return nil, err + return nil, errors.Fatalf("parsing repository location failed: %v", err) } var be restic.Backend From b090c73bd480874585c3d9b8eb8d27b6788f7b83 Mon Sep 17 00:00:00 2001 From: Alexander Neumann Date: Sun, 18 Sep 2016 13:28:59 +0200 Subject: [PATCH 3/3] Remove wrapper functions in errors package This way, our own errors package does not appear in the stack traces. --- src/restic/errors/wrap.go | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/src/restic/errors/wrap.go b/src/restic/errors/wrap.go index 65b48de8b..5906bd617 100644 --- a/src/restic/errors/wrap.go +++ b/src/restic/errors/wrap.go @@ -7,17 +7,14 @@ func Cause(err error) error { return errors.Cause(err) } -// New creates a new error based on message. -func New(message string) error { - return errors.New(message) -} +// New creates a new error based on message. Wrapped so that this package does +// not appear in the stack trace. +var New = errors.New -// Errorf creates an error based on a format string and values. -func Errorf(format string, args ...interface{}) error { - return errors.Errorf(format, args...) -} +// Errorf creates an error based on a format string and values. Wrapped so that +// this package does not appear in the stack trace. +var Errorf = errors.Errorf -// Wrap wraps an error retrieved from outside of restic. -func Wrap(err error, message string) error { - return errors.Wrap(err, message) -} +// Wrap wraps an error retrieved from outside of restic. Wrapped so that this +// package does not appear in the stack trace. +var Wrap = errors.Wrap