fork of go-git with some jj specific features
at main 1.7 kB view raw
1package git 2 3import ( 4 "testing" 5 "time" 6 7 "github.com/go-git/go-git/v5/plumbing" 8 "github.com/go-git/go-git/v5/plumbing/cache" 9 "github.com/go-git/go-git/v5/plumbing/storer" 10 "github.com/go-git/go-git/v5/storage" 11 "github.com/go-git/go-git/v5/storage/filesystem" 12 "github.com/stretchr/testify/suite" 13 14 fixtures "github.com/go-git/go-git-fixtures/v4" 15) 16 17type PruneSuite struct { 18 suite.Suite 19 BaseSuite 20} 21 22func TestPruneSuite(t *testing.T) { 23 suite.Run(t, new(PruneSuite)) 24} 25 26func (s *PruneSuite) testPrune(deleteTime time.Time) { 27 srcFs := fixtures.ByTag("unpacked").One().DotGit() 28 var sto storage.Storer 29 var err error 30 sto = filesystem.NewStorage(srcFs, cache.NewObjectLRUDefault()) 31 32 los := sto.(storer.LooseObjectStorer) 33 s.NotNil(los) 34 35 count := 0 36 err = los.ForEachObjectHash(func(_ plumbing.Hash) error { 37 count++ 38 return nil 39 }) 40 s.NoError(err) 41 42 r, err := Open(sto, srcFs) 43 s.NoError(err) 44 s.NotNil(r) 45 46 // Remove a branch so we can prune some objects. 47 err = sto.RemoveReference(plumbing.ReferenceName("refs/heads/v4")) 48 s.NoError(err) 49 err = sto.RemoveReference(plumbing.ReferenceName("refs/remotes/origin/v4")) 50 s.NoError(err) 51 52 err = r.Prune(PruneOptions{ 53 OnlyObjectsOlderThan: deleteTime, 54 Handler: r.DeleteObject, 55 }) 56 s.NoError(err) 57 58 newCount := 0 59 err = los.ForEachObjectHash(func(_ plumbing.Hash) error { 60 newCount++ 61 return nil 62 }) 63 s.NoError(err) 64 65 if deleteTime.IsZero() { 66 s.True(newCount < count) 67 } else { 68 // Assume a delete time older than any of the objects was passed in. 69 s.Equal(count, newCount) 70 } 71} 72 73func (s *PruneSuite) TestPrune() { 74 s.testPrune(time.Time{}) 75} 76 77func (s *PruneSuite) TestPruneWithNoDelete() { 78 s.testPrune(time.Unix(0, 1)) 79}