diff --git a/changelog/unreleased/pull-2668 b/changelog/unreleased/pull-2668 new file mode 100644 index 000000000..94a661c05 --- /dev/null +++ b/changelog/unreleased/pull-2668 @@ -0,0 +1,6 @@ +Bugfix: Don't abort the stats command when data blobs are missing + +Runing the stats command in the blobs-per-file mode on a repository with +missing data blobs previously resulted in a crash. + +https://github.com/restic/restic/pull/2668 diff --git a/cmd/restic/cmd_stats.go b/cmd/restic/cmd_stats.go index e8d5d61b7..6587f8382 100644 --- a/cmd/restic/cmd_stats.go +++ b/cmd/restic/cmd_stats.go @@ -194,7 +194,7 @@ func statsWalkSnapshot(ctx context.Context, snapshot *restic.Snapshot, repo rest } func statsWalkTree(repo restic.Repository, stats *statsContainer) walker.WalkFunc { - return func(_ restic.ID, npath string, node *restic.Node, nodeErr error) (bool, error) { + return func(parentTreeID restic.ID, npath string, node *restic.Node, nodeErr error) (bool, error) { if nodeErr != nil { return true, nodeErr } @@ -229,7 +229,7 @@ func statsWalkTree(repo restic.Repository, stats *statsContainer) walker.WalkFun // is always a data blob since we're accessing it via a file's Content array blobSize, found := repo.LookupBlobSize(blobID, restic.DataBlob) if !found { - return true, fmt.Errorf("blob %s not found for tree %s", blobID, *node.Subtree) + return true, fmt.Errorf("blob %s not found for tree %s", blobID, parentTreeID) } // count the blob's size, then add this blob by this