find command: don't abort on tree load errors
This commit is contained in:
parent
870e7583a1
commit
36f22a0feb
2 changed files with 20 additions and 3 deletions
9
changelog/unreleased/issue-2224
Normal file
9
changelog/unreleased/issue-2224
Normal file
|
@ -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
|
|
@ -258,9 +258,13 @@ func (f *Finder) findInSnapshot(ctx context.Context, sn *restic.Snapshot) error
|
||||||
}
|
}
|
||||||
|
|
||||||
f.out.newsn = sn
|
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 {
|
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 {
|
if node == nil {
|
||||||
|
@ -340,7 +344,11 @@ func (f *Finder) findIDs(ctx context.Context, sn *restic.Snapshot) error {
|
||||||
f.out.newsn = sn
|
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) {
|
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 {
|
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 {
|
if node == nil {
|
||||||
|
|
Loading…
Reference in a new issue