Sign in

Search issue titles and bodies, change requests and comments. Private repositories you cannot read are not included.

vole
Clone

Read only, no credentials:

https://rodent.software/vole.git

Write over SSH with a registered key:

git clone ssh://git@rodent.software:2222/vole.git

A free and open-source forge that lives in your Git repo.

refactor

c5902451905acdaa478f8476844ccd4a510d9ca9 · Keenan Nemetz · 17d ago · parent ec2aba4b

internal/gc/gc_test.go → forge/gc_test.go +22−22

@@ -1,4 +1,4 @@
1 package gc
1 package forge
2 2
3 3 import (
4 4 "bytes"
@@ -7,8 +7,8 @@ import (
7 7 "testing"
8 8 "time"
9 9
10 "github.com/rodent-software/vole/internal/gitx"
11 "github.com/rodent-software/vole/internal/lfs"
10 "github.com/rodent-software/vole/core/git"
11 "github.com/rodent-software/vole/core/lfs"
12 12 )
13 13
14 14 // repoWithPointer builds a bare repository whose main branch commits a pointer
@@ -18,15 +18,15 @@ import (
18 18 func repoWithoutPointer(t *testing.T) string {
19 19 t.Helper()
20 20 dir := t.TempDir() + "/repo.git"
21 if err := gitx.InitBare(dir, "main"); err != nil {
21 if err := git.InitBare(dir, "main"); err != nil {
22 22 t.Fatal(err)
23 23 }
24 g := gitx.Open(dir)
24 g := git.Open(dir)
25 25 text, err := g.HashObject([]byte("nothing but text here\n"))
26 26 if err != nil {
27 27 t.Fatal(err)
28 28 }
29 tree, err := g.MkTree([]gitx.Entry{{Mode: "100644", Type: "blob", SHA: text, Name: "README.md"}})
29 tree, err := g.MkTree([]git.Entry{{Mode: "100644", Type: "blob", SHA: text, Name: "README.md"}})
30 30 if err != nil {
31 31 t.Fatal(err)
32 32 }
@@ -43,10 +43,10 @@ func repoWithoutPointer(t *testing.T) string {
43 43 func repoWithPointer(t *testing.T, oid string) string {
44 44 t.Helper()
45 45 dir := t.TempDir() + "/repo.git"
46 if err := gitx.InitBare(dir, "main"); err != nil {
46 if err := git.InitBare(dir, "main"); err != nil {
47 47 t.Fatal(err)
48 48 }
49 g := gitx.Open(dir)
49 g := git.Open(dir)
50 50 pointer, err := g.HashObject(lfs.Pointer{OID: oid, Size: 12}.Encode())
51 51 if err != nil {
52 52 t.Fatal(err)
@@ -55,7 +55,7 @@ func repoWithPointer(t *testing.T, oid string) string {
55 55 if err != nil {
56 56 t.Fatal(err)
57 57 }
58 tree1, err := g.MkTree([]gitx.Entry{
58 tree1, err := g.MkTree([]git.Entry{
59 59 {Mode: "100644", Type: "blob", SHA: pointer, Name: "artifact.bin"},
60 60 {Mode: "100644", Type: "blob", SHA: text, Name: "README.md"},
61 61 })
@@ -66,7 +66,7 @@ func repoWithPointer(t *testing.T, oid string) string {
66 66 if err != nil {
67 67 t.Fatal(err)
68 68 }
69 tree2, err := g.MkTree([]gitx.Entry{
69 tree2, err := g.MkTree([]git.Entry{
70 70 {Mode: "100644", Type: "blob", SHA: text, Name: "README.md"},
71 71 })
72 72 if err != nil {
@@ -105,8 +105,8 @@ func TestReachableThroughHistorySurvivesAndGarbageDoesNot(t *testing.T) {
105 105 reachable, orphan := oids[0], oids[1]
106 106 dir := repoWithPointer(t, reachable)
107 107
108 res, err := Run(Options{
109 Repos: []Repo{{Name: "demo", Dir: dir}},
108 res, err := GC(GCOptions{
109 Repos: []GCRepo{{Name: "demo", Dir: dir}},
110 110 Store: store,
111 111 Grace: 0,
112 112 Now: time.Now().Add(time.Hour),
@@ -132,7 +132,7 @@ func TestGraceProtectsAFreshUpload(t *testing.T) {
132 132 store, oids := storeWith(t, kept, fresh)
133 133 dir := repoWithPointer(t, oids[0])
134 134
135 res, err := Run(Options{Repos: []Repo{{Name: "demo", Dir: dir}}, Store: store, Grace: time.Hour})
135 res, err := GC(GCOptions{Repos: []GCRepo{{Name: "demo", Dir: dir}}, Store: store, Grace: time.Hour})
136 136 if err != nil {
137 137 t.Fatal(err)
138 138 }
@@ -143,8 +143,8 @@ func TestGraceProtectsAFreshUpload(t *testing.T) {
143 143 t.Fatalf("result %+v; want 1 within grace, 0 swept", res)
144 144 }
145 145 // The same store, an hour later: the grace has run out.
146 res, err = Run(Options{
147 Repos: []Repo{{Name: "demo", Dir: dir}}, Store: store, Grace: time.Hour,
146 res, err = GC(GCOptions{
147 Repos: []GCRepo{{Name: "demo", Dir: dir}}, Store: store, Grace: time.Hour,
148 148 Now: time.Now().Add(2 * time.Hour),
149 149 })
150 150 if err != nil {
@@ -163,7 +163,7 @@ func TestArchivedLogIsARoot(t *testing.T) {
163 163 log := []byte("$ go test ./...\nok\n")
164 164 store, oids := storeWith(t, log)
165 165
166 res, err := Run(Options{
166 res, err := GC(GCOptions{
167 167 Repos: nil,
168 168 Store: store,
169 169 RunOIDs: map[string][]string{"demo": oids},
@@ -184,7 +184,7 @@ func TestArchivedLogIsARoot(t *testing.T) {
184 184 func TestDryRunRemovesNothing(t *testing.T) {
185 185 t.Parallel()
186 186 store, oids := storeWith(t, []byte("garbage"))
187 res, err := Run(Options{Store: store, Grace: 0, DryRun: true, Now: time.Now().Add(time.Hour)})
187 res, err := GC(GCOptions{Store: store, Grace: 0, DryRun: true, Now: time.Now().Add(time.Hour)})
188 188 if err != nil {
189 189 t.Fatal(err)
190 190 }
@@ -214,8 +214,8 @@ func TestLinkRepairsAMissingNamespace(t *testing.T) {
214 214 t.Fatal("the object is still linked; the fixture proves nothing")
215 215 }
216 216
217 res, err := Link(Options{
218 Repos: []Repo{{Name: "demo", Dir: dir}},
217 res, err := GCLink(GCOptions{
218 Repos: []GCRepo{{Name: "demo", Dir: dir}},
219 219 Store: store,
220 220 Grace: 0,
221 221 Now: time.Now().Add(time.Hour),
@@ -234,7 +234,7 @@ func TestLinkRepairsAMissingNamespace(t *testing.T) {
234 234 t.Fatalf("the repair pass changed more than links: %+v", res)
235 235 }
236 236 // And it is idempotent.
237 again, err := Link(Options{Repos: []Repo{{Name: "demo", Dir: dir}}, Store: store, Now: time.Now()})
237 again, err := GCLink(GCOptions{Repos: []GCRepo{{Name: "demo", Dir: dir}}, Store: store, Now: time.Now()})
238 238 if err != nil {
239 239 t.Fatal(err)
240 240 }
@@ -257,8 +257,8 @@ func TestOneRepositoryLosingAPointerKeepsTheOthersLink(t *testing.T) {
257 257 dirA := repoWithPointer(t, oid) // demo reaches it
258 258 dirB := repoWithoutPointer(t) // other does not
259 259
260 res, err := Run(Options{
261 Repos: []Repo{{Name: "demo", Dir: dirA}, {Name: "other", Dir: dirB}},
260 res, err := GC(GCOptions{
261 Repos: []GCRepo{{Name: "demo", Dir: dirA}, {Name: "other", Dir: dirB}},
262 262 Store: store,
263 263 Grace: 0,
264 264 Now: time.Now().Add(time.Hour),