mirror of
https://github.com/octoleo/restic.git
synced 2024-11-02 11:46:36 +00:00
Merge pull request #943 from middelink/fix-names
Small changes to cmd_forget and snapshot_filter
This commit is contained in:
commit
0f057bd440
@ -90,7 +90,7 @@ func runForget(opts ForgetOptions, gopts GlobalOptions, args []string) error {
|
||||
}
|
||||
snapshotGroups := make(map[string]restic.Snapshots)
|
||||
|
||||
ctx, cancel := context.WithCancel(context.Background())
|
||||
ctx, cancel := context.WithCancel(gopts.ctx)
|
||||
defer cancel()
|
||||
for sn := range FindFilteredSnapshots(ctx, repo, opts.Host, opts.Tags, opts.Paths, args) {
|
||||
if len(args) > 0 {
|
||||
|
@ -125,49 +125,46 @@ func y(d time.Time) int {
|
||||
}
|
||||
|
||||
// apply moves snapshots from Unprocess to either Keep or Remove. It sorts the
|
||||
// snapshots into buckets according to the return of fn, and then moves the
|
||||
// newest snapshot in each bucket to Keep and all others to Remove. When max
|
||||
// snapshots were found, processing stops.
|
||||
// snapshots into buckets according to the return value of fn, and then moves
|
||||
// the newest snapshot in each bucket to Keep and all others to Remove. When
|
||||
// max snapshots were found, processing stops.
|
||||
func (f *filter) apply(fn func(time.Time) int, max int) {
|
||||
if max == 0 || len(f.Unprocessed) == 0 {
|
||||
return
|
||||
}
|
||||
|
||||
sameDay := Snapshots{}
|
||||
lastDay := fn(f.Unprocessed[0].Time)
|
||||
sameBucket := Snapshots{}
|
||||
lastBucket := fn(f.Unprocessed[0].Time)
|
||||
|
||||
for len(f.Unprocessed) > 0 {
|
||||
cur := f.Unprocessed[0]
|
||||
|
||||
day := fn(cur.Time)
|
||||
bucket := fn(cur.Time)
|
||||
|
||||
// if the snapshots are from a new day, forget all but the first (=last
|
||||
// in time) snapshot from the previous day.
|
||||
if day != lastDay {
|
||||
f.Keep = append(f.Keep, sameDay[0])
|
||||
for _, snapshot := range sameDay[1:] {
|
||||
f.Remove = append(f.Remove, snapshot)
|
||||
}
|
||||
// if the snapshots are from a new bucket, forget all but the first
|
||||
// (=last in time) snapshot from the previous bucket.
|
||||
if bucket != lastBucket {
|
||||
f.Keep = append(f.Keep, sameBucket[0])
|
||||
f.Remove = append(f.Remove, sameBucket[1:]...)
|
||||
|
||||
sameDay = Snapshots{}
|
||||
lastDay = day
|
||||
sameBucket = Snapshots{}
|
||||
lastBucket = bucket
|
||||
max--
|
||||
|
||||
if max == 0 {
|
||||
break
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
// collect all snapshots for the current day
|
||||
sameDay = append(sameDay, cur)
|
||||
// collect all snapshots for the current bucket
|
||||
sameBucket = append(sameBucket, cur)
|
||||
f.Unprocessed = f.Unprocessed[1:]
|
||||
}
|
||||
|
||||
if len(sameDay) > 0 {
|
||||
f.Keep = append(f.Keep, sameDay[0])
|
||||
for _, snapshot := range sameDay[1:] {
|
||||
f.Remove = append(f.Remove, snapshot)
|
||||
}
|
||||
// if we have leftovers, process them too.
|
||||
if len(sameBucket) > 0 {
|
||||
f.Keep = append(f.Keep, sameBucket[0])
|
||||
f.Remove = append(f.Remove, sameBucket[1:]...)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -91,6 +91,28 @@ func TestFilterSnapshots(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestExpireSnapshotOps(t *testing.T) {
|
||||
data := []struct {
|
||||
expectEmpty bool
|
||||
expectSum int
|
||||
p *restic.ExpirePolicy
|
||||
}{
|
||||
{true, 0, &restic.ExpirePolicy{}},
|
||||
{true, 0, &restic.ExpirePolicy{Tags: []string{}}},
|
||||
{false, 22, &restic.ExpirePolicy{Daily: 7, Weekly: 2, Monthly: 3, Yearly: 10}},
|
||||
}
|
||||
for i, d := range data {
|
||||
isEmpty := d.p.Empty()
|
||||
if isEmpty != d.expectEmpty {
|
||||
t.Errorf("empty test %v: wrong result, want:\n %#v\ngot:\n %#v", i, d.expectEmpty, isEmpty)
|
||||
}
|
||||
hasSum := d.p.Sum()
|
||||
if hasSum != d.expectSum {
|
||||
t.Errorf("sum test %v: wrong result, want:\n %#v\ngot:\n %#v", i, d.expectSum, hasSum)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var testExpireSnapshots = restic.Snapshots{
|
||||
{Time: parseTimeUTC("2014-09-01 10:20:30")},
|
||||
{Time: parseTimeUTC("2014-09-02 10:20:30")},
|
||||
|
Loading…
Reference in New Issue
Block a user