diff options
author | Máximo Cuadros <mcuadros@gmail.com> | 2017-12-01 00:45:11 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-12-01 00:45:11 +0100 |
commit | b0f6b4786b58b4add6e54d354311fc1084764b36 (patch) | |
tree | ebc3ad2f840da271aeac9cf33cc3912feb9f9e12 /prune_test.go | |
parent | 174fd8e5b2150dbd4cf522bb4a98fb9d79ebc6f4 (diff) | |
parent | d53264806f0d5ddef259f45f4490a19398a102ba (diff) | |
download | go-git-b0f6b4786b58b4add6e54d354311fc1084764b36.tar.gz |
Merge pull request #669 from keybase/strib/gh-gc
storage/repository: add new functions for garbage collection
Diffstat (limited to 'prune_test.go')
-rw-r--r-- | prune_test.go | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/prune_test.go b/prune_test.go new file mode 100644 index 0000000..60652ec --- /dev/null +++ b/prune_test.go @@ -0,0 +1,73 @@ +package git + +import ( + "time" + + "gopkg.in/src-d/go-git.v4/plumbing" + "gopkg.in/src-d/go-git.v4/plumbing/storer" + "gopkg.in/src-d/go-git.v4/storage" + "gopkg.in/src-d/go-git.v4/storage/filesystem" + + . "gopkg.in/check.v1" + "gopkg.in/src-d/go-git-fixtures.v3" +) + +type PruneSuite struct { + BaseSuite +} + +var _ = Suite(&PruneSuite{}) + +func (s *PruneSuite) testPrune(c *C, deleteTime time.Time) { + srcFs := fixtures.ByTag("unpacked").One().DotGit() + var sto storage.Storer + var err error + sto, err = filesystem.NewStorage(srcFs) + c.Assert(err, IsNil) + + los := sto.(storer.LooseObjectStorer) + c.Assert(los, NotNil) + + count := 0 + err = los.ForEachObjectHash(func(_ plumbing.Hash) error { + count++ + return nil + }) + c.Assert(err, IsNil) + + r, err := Open(sto, srcFs) + c.Assert(err, IsNil) + c.Assert(r, NotNil) + + // Remove a branch so we can prune some objects. + err = sto.RemoveReference(plumbing.ReferenceName("refs/heads/v4")) + c.Assert(err, IsNil) + err = sto.RemoveReference(plumbing.ReferenceName("refs/remotes/origin/v4")) + c.Assert(err, IsNil) + + err = r.Prune(PruneOptions{ + OnlyObjectsOlderThan: deleteTime, + Handler: r.DeleteObject, + }) + c.Assert(err, IsNil) + + newCount := 0 + err = los.ForEachObjectHash(func(_ plumbing.Hash) error { + newCount++ + return nil + }) + if deleteTime.IsZero() { + c.Assert(newCount < count, Equals, true) + } else { + // Assume a delete time older than any of the objects was passed in. + c.Assert(newCount, Equals, count) + } +} + +func (s *PruneSuite) TestPrune(c *C) { + s.testPrune(c, time.Time{}) +} + +func (s *PruneSuite) TestPruneWithNoDelete(c *C) { + s.testPrune(c, time.Unix(0, 1)) +} |