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