From 3c753c071c2a3d2a81d65834957c8e9cd654278c Mon Sep 17 00:00:00 2001 From: Alexander Neumann Date: Sat, 30 Jan 2021 16:46:34 +0100 Subject: [PATCH] errcheck: More error handling --- internal/backend/rclone/backend.go | 18 +++++++++++------- internal/backend/rclone/internal_test.go | 4 +++- internal/checker/checker.go | 7 ++++++- internal/ui/json/backup.go | 5 ++++- internal/walker/walker_test.go | 10 ++++++++-- 5 files changed, 32 insertions(+), 12 deletions(-) diff --git a/internal/backend/rclone/backend.go b/internal/backend/rclone/backend.go index 2f730f238..25169fd58 100644 --- a/internal/backend/rclone/backend.go +++ b/internal/backend/rclone/backend.go @@ -63,9 +63,9 @@ func run(command string, args ...string) (*StdioConn, *exec.Cmd, *sync.WaitGroup stdout, w, err := os.Pipe() if err != nil { - // close first pipe - r.Close() - stdin.Close() + // close first pipe and ignore subsequent errors + _ = r.Close() + _ = stdin.Close() return nil, nil, nil, nil, err } @@ -197,8 +197,8 @@ func newBackend(cfg Config, lim limiter.Limiter) (*Backend, error) { err := cmd.Wait() debug.Log("Wait returned %v", err) be.waitResult = err - // close our side of the pipes to rclone - stdioConn.CloseAll() + // close our side of the pipes to rclone, ignore errors + _ = stdioConn.CloseAll() close(waitCh) }() @@ -237,13 +237,17 @@ func newBackend(cfg Config, lim limiter.Limiter) (*Backend, error) { res, err := ctxhttp.Do(ctx, client, req) if err != nil { - bg() + // ignore subsequent errors + _ = bg() _ = cmd.Process.Kill() return nil, errors.Errorf("error talking HTTP to rclone: %v", err) } debug.Log("HTTP status %q returned, moving instance to background", res.Status) - bg() + err = bg() + if err != nil { + return nil, fmt.Errorf("error moving process to background: %w", err) + } return be, nil } diff --git a/internal/backend/rclone/internal_test.go b/internal/backend/rclone/internal_test.go index b4bd01996..a192a37bf 100644 --- a/internal/backend/rclone/internal_test.go +++ b/internal/backend/rclone/internal_test.go @@ -23,7 +23,9 @@ func TestRcloneExit(t *testing.T) { return } rtest.OK(t, err) - defer be.Close() + defer func() { + rtest.OK(t, be.Close()) + }() err = be.cmd.Process.Kill() rtest.OK(t, err) diff --git a/internal/checker/checker.go b/internal/checker/checker.go index 537a44d12..e842a08be 100644 --- a/internal/checker/checker.go +++ b/internal/checker/checker.go @@ -327,7 +327,12 @@ func (c *Checker) Structure(ctx context.Context, p *progress.Counter, errChan ch }) } - wg.Wait() + // the wait group should not return an error because no worker returns an + // error, so panic if that has changed somehow. + err := wg.Wait() + if err != nil { + panic(err) + } } func (c *Checker) checkTree(id restic.ID, tree *restic.Tree) (errs []error) { diff --git a/internal/ui/json/backup.go b/internal/ui/json/backup.go index d9be31b24..b6a2ed03d 100644 --- a/internal/ui/json/backup.go +++ b/internal/ui/json/backup.go @@ -79,7 +79,10 @@ func NewBackup(term *termstatus.Terminal, verbosity uint) *Backup { func toJSONString(status interface{}) string { buf := new(bytes.Buffer) - json.NewEncoder(buf).Encode(status) + err := json.NewEncoder(buf).Encode(status) + if err != nil { + panic(err) + } return buf.String() } diff --git a/internal/walker/walker_test.go b/internal/walker/walker_test.go index 0c8086956..a4e820940 100644 --- a/internal/walker/walker_test.go +++ b/internal/walker/walker_test.go @@ -28,17 +28,23 @@ func buildTreeMap(tree TestTree, m TreeMap) restic.ID { for name, item := range tree { switch elem := item.(type) { case TestFile: - res.Insert(&restic.Node{ + err := res.Insert(&restic.Node{ Name: name, Type: "file", }) + if err != nil { + panic(err) + } case TestTree: id := buildTreeMap(elem, m) - res.Insert(&restic.Node{ + err := res.Insert(&restic.Node{ Name: name, Subtree: &id, Type: "dir", }) + if err != nil { + panic(err) + } default: panic(fmt.Sprintf("invalid type %T", elem)) }