aboutsummaryrefslogtreecommitdiff
path: root/pkg/git/git.go
diff options
context:
space:
mode:
authorGabriel A. Giovanini <mail@gabrielgio.me>2024-06-01 17:20:59 +0200
committerGabriel A. Giovanini <mail@gabrielgio.me>2024-06-01 17:20:59 +0200
commit4ea63e98cc999ab05d1ac98b64875d7413e86972 (patch)
tree0edf4f1a65fd53d0e2d6e5bcbbafb5a71faa6cc7 /pkg/git/git.go
parent8f5f9ff24b0327f7640e3619de109e1f19cfba1d (diff)
downloadcerrado-4ea63e98cc999ab05d1ac98b64875d7413e86972.tar.gz
cerrado-4ea63e98cc999ab05d1ac98b64875d7413e86972.tar.bz2
cerrado-4ea63e98cc999ab05d1ac98b64875d7413e86972.zip
feat: Add initial log
Diffstat (limited to 'pkg/git/git.go')
-rw-r--r--pkg/git/git.go35
1 files changed, 35 insertions, 0 deletions
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
+}