Merge pull request #2668 from MichaelEischer/fix-stats-blobs-crash

stats: Fix crash in blobs-per-file mode on missing blob
This commit is contained in:
MichaelEischer 2020-04-18 17:21:26 +02:00 committed by GitHub
commit 9790d8ce1c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 8 additions and 2 deletions

View File

@ -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

View File

@ -194,7 +194,7 @@ func statsWalkSnapshot(ctx context.Context, snapshot *restic.Snapshot, repo rest
} }
func statsWalkTree(repo restic.Repository, stats *statsContainer) walker.WalkFunc { 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 { if nodeErr != nil {
return true, nodeErr 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 // is always a data blob since we're accessing it via a file's Content array
blobSize, found := repo.LookupBlobSize(blobID, restic.DataBlob) blobSize, found := repo.LookupBlobSize(blobID, restic.DataBlob)
if !found { 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 // count the blob's size, then add this blob by this