1
0
Fork 0
mirror of https://github.com/restic/restic.git synced 2024-12-23 16:26:11 +00:00

restore: Close files tested with --verify

Before, the target files were opened once per blob and never closed,
this commit fixes that.
This commit is contained in:
Alexander Neumann 2018-10-14 21:00:14 +02:00
parent 4c2072d875
commit c0fca3f50a

View file

@ -306,25 +306,33 @@ func (res *Restorer) VerifyFiles(ctx context.Context, dst string) (int, error) {
return errors.Errorf("Invalid file size: expected %d got %d", node.Size, stat.Size()) return errors.Errorf("Invalid file size: expected %d got %d", node.Size, stat.Size())
} }
file, err := os.Open(target)
if err != nil {
return err
}
offset := int64(0) offset := int64(0)
for _, blobID := range node.Content { for _, blobID := range node.Content {
rd, err := os.Open(target)
if err != nil {
return err
}
blobs, _ := res.repo.Index().Lookup(blobID, restic.DataBlob) blobs, _ := res.repo.Index().Lookup(blobID, restic.DataBlob)
length := blobs[0].Length - uint(crypto.Extension) length := blobs[0].Length - uint(crypto.Extension)
buf := make([]byte, length) // TODO do I want to reuse the buffer somehow? buf := make([]byte, length) // TODO do I want to reuse the buffer somehow?
_, err = rd.ReadAt(buf, offset) _, err = file.ReadAt(buf, offset)
if err != nil { if err != nil {
_ = file.Close()
return err return err
} }
if !blobID.Equal(restic.Hash(buf)) { if !blobID.Equal(restic.Hash(buf)) {
_ = file.Close()
return errors.Errorf("Unexpected contents starting at offset %d", offset) return errors.Errorf("Unexpected contents starting at offset %d", offset)
} }
offset += int64(length) offset += int64(length)
} }
err = file.Close()
if err != nil {
return err
}
return nil return nil
}, },
leaveDir: func(node *restic.Node, target, location string) error { return nil }, leaveDir: func(node *restic.Node, target, location string) error { return nil },