restic/src/restic/find.go

40 lines
864 B
Go
Raw Normal View History

2016-08-01 18:31:44 +02:00
package restic
import (
"restic/backend"
"restic/repository"
)
2016-08-01 18:40:08 +02:00
// FindUsedBlobs traverse the tree ID and adds all seen blobs to blobs.
func findUsedBlobs(repo *repository.Repository, treeID backend.ID, blobs backend.IDSet) error {
blobs.Insert(treeID)
tree, err := LoadTree(repo, treeID)
if err != nil {
return err
}
for _, node := range tree.Nodes {
switch node.Type {
case "file":
for _, blob := range node.Content {
blobs.Insert(blob)
}
case "dir":
err := findUsedBlobs(repo, *node.Subtree, blobs)
if err != nil {
return err
}
}
}
return nil
}
2016-08-01 18:31:44 +02:00
// FindUsedBlobs traverses the tree ID and returns a set of all blobs
// encountered.
2016-08-01 18:40:08 +02:00
func FindUsedBlobs(repo *repository.Repository, treeID backend.ID) (blobs backend.IDSet, err error) {
blobs = backend.NewIDSet()
return blobs, findUsedBlobs(repo, treeID, blobs)
2016-08-01 18:31:44 +02:00
}