Move snapshot filter function to restic package

This commit is contained in:
Alexander Neumann 2017-06-18 13:18:12 +02:00
parent 77037e33c9
commit 052a6a0acc
2 changed files with 23 additions and 9 deletions

View file

@ -58,15 +58,7 @@ func FindFilteredSnapshots(ctx context.Context, repo *repository.Repository, hos
return return
} }
for id := range repo.List(ctx, restic.SnapshotFile) { for _, sn := range restic.FindFilteredSnapshots(ctx, repo, host, tags, paths) {
sn, err := restic.LoadSnapshot(ctx, repo, id)
if err != nil {
Warnf("Ignoring %q, could not load snapshot: %v\n", id, err)
continue
}
if (host != "" && host != sn.Hostname) || !sn.HasTags(tags) || !sn.HasPaths(paths) {
continue
}
select { select {
case <-ctx.Done(): case <-ctx.Done():
return return

View file

@ -2,6 +2,8 @@ package restic
import ( import (
"context" "context"
"fmt"
"os"
"restic/errors" "restic/errors"
"time" "time"
) )
@ -48,3 +50,23 @@ func FindSnapshot(repo Repository, s string) (ID, error) {
return ParseID(name) return ParseID(name)
} }
// FindFilteredSnapshots yields Snapshots filtered from the list of all
// snapshots.
func FindFilteredSnapshots(ctx context.Context, repo Repository, host string, tags []string, paths []string) Snapshots {
results := make(Snapshots, 0, 20)
for id := range repo.List(ctx, SnapshotFile) {
sn, err := LoadSnapshot(ctx, repo, id)
if err != nil {
fmt.Fprintf(os.Stderr, "could not load snapshot %v: %v\n", id.Str(), err)
continue
}
if (host != "" && host != sn.Hostname) || !sn.HasTags(tags) || !sn.HasPaths(paths) {
continue
}
results = append(results, sn)
}
return results
}