diff options
| author | Gabriel A. Giovanini <mail@gabrielgio.me> | 2024-06-01 17:20:59 +0200 | 
|---|---|---|
| committer | Gabriel A. Giovanini <mail@gabrielgio.me> | 2024-06-01 17:20:59 +0200 | 
| commit | 4ea63e98cc999ab05d1ac98b64875d7413e86972 (patch) | |
| tree | 0edf4f1a65fd53d0e2d6e5bcbbafb5a71faa6cc7 /pkg/git | |
| parent | 8f5f9ff24b0327f7640e3619de109e1f19cfba1d (diff) | |
| download | cerrado-4ea63e98cc999ab05d1ac98b64875d7413e86972.tar.gz cerrado-4ea63e98cc999ab05d1ac98b64875d7413e86972.tar.bz2 cerrado-4ea63e98cc999ab05d1ac98b64875d7413e86972.zip | |
feat: Add initial log
Diffstat (limited to 'pkg/git')
| -rw-r--r-- | pkg/git/git.go | 35 | 
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 +} | 
