Skip to content

Commit

Permalink
find command: don't abort on tree load errors
Browse files Browse the repository at this point in the history
  • Loading branch information
cdhowie committed Mar 30, 2019
1 parent 870e758 commit 36f22a0
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 3 deletions.
9 changes: 9 additions & 0 deletions changelog/unreleased/issue-2224
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
Bugfix: Don't abort the find command when a tree can't be loaded

Change the find command so that missing trees don't result in a crash.
Instead, the error is logged to the debug log, and the tree ID is displayed
along with the snapshot it belongs to. This makes it possible to recover
repositories that are missing trees by forgetting the snapshots they are used
in.

https://github.com/restic/restic/issues/2224
14 changes: 11 additions & 3 deletions cmd/restic/cmd_find.go
Original file line number Diff line number Diff line change
Expand Up @@ -258,9 +258,13 @@ func (f *Finder) findInSnapshot(ctx context.Context, sn *restic.Snapshot) error
}

f.out.newsn = sn
return walker.Walk(ctx, f.repo, *sn.Tree, f.ignoreTrees, func(_ restic.ID, nodepath string, node *restic.Node, err error) (bool, error) {
return walker.Walk(ctx, f.repo, *sn.Tree, f.ignoreTrees, func(parentTreeID restic.ID, nodepath string, node *restic.Node, err error) (bool, error) {
if err != nil {
return false, err
debug.Log("Error loading tree %v: %v", parentTreeID, err)

Printf("Unable to load tree %s\n ... which belongs to snapshot %s.\n", parentTreeID, sn.ID())

return false, walker.SkipNode
}

if node == nil {
Expand Down Expand Up @@ -340,7 +344,11 @@ func (f *Finder) findIDs(ctx context.Context, sn *restic.Snapshot) error {
f.out.newsn = sn
return walker.Walk(ctx, f.repo, *sn.Tree, f.ignoreTrees, func(parentTreeID restic.ID, nodepath string, node *restic.Node, err error) (bool, error) {
if err != nil {
return false, err
debug.Log("Error loading tree %v: %v", parentTreeID, err)

Printf("Unable to load tree %s\n ... which belongs to snapshot %s.\n", parentTreeID, sn.ID())

return false, walker.SkipNode
}

if node == nil {
Expand Down

0 comments on commit 36f22a0

Please sign in to comment.