From 4ea63e98cc999ab05d1ac98b64875d7413e86972 Mon Sep 17 00:00:00 2001 From: "Gabriel A. Giovanini" Date: Sat, 1 Jun 2024 17:20:59 +0200 Subject: feat: Add initial log --- pkg/git/git.go | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) (limited to 'pkg/git/git.go') diff --git a/pkg/git/git.go b/pkg/git/git.go index b9ab235..80c0e46 100644 --- a/pkg/git/git.go +++ b/pkg/git/git.go @@ -2,6 +2,8 @@ package git import ( "errors" + "fmt" + "io" "github.com/go-git/go-git/v5" "github.com/go-git/go-git/v5/plumbing/object" @@ -46,3 +48,36 @@ func (g *GitRepository) LastCommit() (*object.Commit, error) { } return c, nil } + +func (g *GitRepository) Commits() ([]*object.Commit, error) { + repo, err := git.PlainOpen(g.path) + if err != nil { + return nil, err + } + ref, err := repo.Head() + if err != nil { + return nil, errors.Join(MissingHeadErr, err) + } + + ci, err := repo.Log(&git.LogOptions{From: ref.Hash()}) + if err != nil { + return nil, fmt.Errorf("commits from ref: %w", err) + } + + commits := []*object.Commit{} + // TODO: for now only load first 1000 + for x := 0; x < 1000; x++ { + c, err := ci.Next() + if err != nil && errors.Is(err, io.EOF) { + break + } else if err != nil { + return nil, err + } + commits = append(commits, c) + } + if err != nil { + return nil, err + } + + return commits, nil +} -- cgit v1.2.3