diff --git a/litestream.go b/litestream.go index f31985b..c895ac3 100644 --- a/litestream.go +++ b/litestream.go @@ -207,11 +207,13 @@ func FilterSnapshotsAfter(a []SnapshotInfo, t time.Time) []SnapshotInfo { // FindMinSnapshotByGeneration finds the snapshot with the lowest index in a generation. func FindMinSnapshotByGeneration(a []SnapshotInfo, generation string) *SnapshotInfo { var min *SnapshotInfo - for _, snapshot := range a { + for i := range a { + snapshot := &a[i] + if snapshot.Generation != generation { continue } else if min == nil || snapshot.Index < min.Index { - min = &snapshot + min = snapshot } } return min diff --git a/litestream_test.go b/litestream_test.go index 0f1bb85..b4f7d3e 100644 --- a/litestream_test.go +++ b/litestream_test.go @@ -128,6 +128,16 @@ func TestWALSegmentPath(t *testing.T) { }) } +func TestFindMinSnapshotByGeneration(t *testing.T) { + infos := []litestream.SnapshotInfo{ + {Generation: "29cf4bced74e92ab", Index: 0}, + {Generation: "5dfeb4aa03232553", Index: 24}, + } + if got, want := litestream.FindMinSnapshotByGeneration(infos, "29cf4bced74e92ab"), &infos[0]; got != want { + t.Fatalf("info=%#v, want %#v", got, want) + } +} + func MustDecodeHexString(s string) []byte { b, err := hex.DecodeString(s) if err != nil {