aboutsummaryrefslogtreecommitdiff
path: root/pkg
diff options
context:
space:
mode:
Diffstat (limited to 'pkg')
-rw-r--r--pkg/git/git.go35
-rw-r--r--pkg/handler/git/handler.go15
-rw-r--r--pkg/service/git.go10
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()
+}