1package object_test 2 3import ( 4 "context" 5 "time" 6 7 "github.com/go-git/go-git/v5" 8 "github.com/go-git/go-git/v5/plumbing" 9 "github.com/go-git/go-git/v5/plumbing/object" 10 "github.com/go-git/go-git/v5/storage/memory" 11 12 "github.com/go-git/go-billy/v5/memfs" 13 "github.com/go-git/go-billy/v5/util" 14 15 fixtures "github.com/go-git/go-git-fixtures/v4" 16 . "gopkg.in/check.v1" 17) 18 19type CommitStatsSuite struct { 20 fixtures.Suite 21} 22 23var _ = Suite(&CommitStatsSuite{}) 24 25func (s *CommitStatsSuite) TestStats(c *C) { 26 r, hash := s.writeHistory(c, []byte("foo\n"), []byte("foo\nbar\n")) 27 28 aCommit, err := r.CommitObject(hash) 29 c.Assert(err, IsNil) 30 31 fileStats, err := aCommit.StatsContext(context.Background()) 32 c.Assert(err, IsNil) 33 34 c.Assert(fileStats[0].Name, Equals, "foo") 35 c.Assert(fileStats[0].Addition, Equals, 1) 36 c.Assert(fileStats[0].Deletion, Equals, 0) 37 c.Assert(fileStats[0].String(), Equals, " foo | 1 +\n") 38} 39 40func (s *CommitStatsSuite) TestStats_RootCommit(c *C) { 41 r, hash := s.writeHistory(c, []byte("foo\n")) 42 43 aCommit, err := r.CommitObject(hash) 44 c.Assert(err, IsNil) 45 46 fileStats, err := aCommit.Stats() 47 c.Assert(err, IsNil) 48 49 c.Assert(fileStats, HasLen, 1) 50 c.Assert(fileStats[0].Name, Equals, "foo") 51 c.Assert(fileStats[0].Addition, Equals, 1) 52 c.Assert(fileStats[0].Deletion, Equals, 0) 53 c.Assert(fileStats[0].String(), Equals, " foo | 1 +\n") 54} 55 56func (s *CommitStatsSuite) TestStats_WithoutNewLine(c *C) { 57 r, hash := s.writeHistory(c, []byte("foo\nbar"), []byte("foo\nbar\n")) 58 59 aCommit, err := r.CommitObject(hash) 60 c.Assert(err, IsNil) 61 62 fileStats, err := aCommit.Stats() 63 c.Assert(err, IsNil) 64 65 c.Assert(fileStats[0].Name, Equals, "foo") 66 c.Assert(fileStats[0].Addition, Equals, 1) 67 c.Assert(fileStats[0].Deletion, Equals, 1) 68 c.Assert(fileStats[0].String(), Equals, " foo | 2 +-\n") 69} 70 71func (s *CommitStatsSuite) writeHistory(c *C, files ...[]byte) (*git.Repository, plumbing.Hash) { 72 cm := &git.CommitOptions{ 73 Author: &object.Signature{Name: "Foo", Email: "foo@example.local", When: time.Now()}, 74 } 75 76 fs := memfs.New() 77 r, err := git.Init(memory.NewStorage(), fs) 78 c.Assert(err, IsNil) 79 80 w, err := r.Worktree() 81 c.Assert(err, IsNil) 82 83 var hash plumbing.Hash 84 for _, content := range files { 85 util.WriteFile(fs, "foo", content, 0644) 86 87 _, err = w.Add("foo") 88 c.Assert(err, IsNil) 89 90 hash, err = w.Commit("foo\n", cm) 91 c.Assert(err, IsNil) 92 93 } 94 95 return r, hash 96} 97