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 | |
parent | 8f5f9ff24b0327f7640e3619de109e1f19cfba1d (diff) | |
download | cerrado-4ea63e98cc999ab05d1ac98b64875d7413e86972.tar.gz cerrado-4ea63e98cc999ab05d1ac98b64875d7413e86972.tar.bz2 cerrado-4ea63e98cc999ab05d1ac98b64875d7413e86972.zip |
feat: Add initial log
Diffstat (limited to 'pkg')
-rw-r--r-- | pkg/git/git.go | 35 | ||||
-rw-r--r-- | pkg/handler/git/handler.go | 15 | ||||
-rw-r--r-- | pkg/service/git.go | 10 |
3 files changed, 58 insertions, 2 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 +} diff --git a/pkg/handler/git/handler.go b/pkg/handler/git/handler.go index 45cd865..ebfb37f 100644 --- a/pkg/handler/git/handler.go +++ b/pkg/handler/git/handler.go @@ -6,6 +6,7 @@ import ( "git.gabrielgio.me/cerrado/pkg/service" "git.gabrielgio.me/cerrado/templates" + "github.com/go-git/go-git/v5/plumbing/object" "github.com/gorilla/mux" ) @@ -16,6 +17,7 @@ type ( gitService interface { ListRepositories() ([]*service.Repository, error) + ListCommits(string) ([]*object.Commit, error) } ) @@ -74,9 +76,18 @@ func (g *GitHandler) Tree(w http.ResponseWriter, r *http.Request) { func (g *GitHandler) Log(w http.ResponseWriter, r *http.Request) { name := mux.Vars(r)["name"] + + commits, err := g.gitService.ListCommits(name) + if err != nil { + slog.Error("Error loading commits", "error", err) + return + } + gitList := &templates.GitItemPage{ - Name: name, - GitItemBase: &templates.GitItemLogPage{}, + Name: name, + GitItemBase: &templates.GitItemLogPage{ + Commits: commits, + }, } templates.WritePageTemplate(w, gitList) } diff --git a/pkg/service/git.go b/pkg/service/git.go index 2b1fe25..614770f 100644 --- a/pkg/service/git.go +++ b/pkg/service/git.go @@ -5,6 +5,7 @@ import ( "git.gabrielgio.me/cerrado/pkg/config" "git.gabrielgio.me/cerrado/pkg/git" + "github.com/go-git/go-git/v5/plumbing/object" ) type ( @@ -21,6 +22,7 @@ type ( configurationRepository interface { List() []*config.GitRepositoryConfiguration + GetByName(name string) *config.GitRepositoryConfiguration } ) @@ -55,3 +57,11 @@ func (g *GitService) ListRepositories() ([]*Repository, error) { return repos, nil } + +func (g *GitService) ListCommits(name string) ([]*object.Commit, error) { + // TODO: handle nil + r := g.configRepo.GetByName(name) + + repo := git.NewGitRepository(r.Path) + return repo.Commits() +} |