From 907c13566c775ac1210bc66de99f7273e7c8a507 Mon Sep 17 00:00:00 2001 From: "Gabriel A. Giovanini" Date: Tue, 25 Jun 2024 20:37:40 +0200 Subject: feat: Add commit page --- pkg/handler/git/handler.go | 22 +++++++++ pkg/handler/router.go | 1 + pkg/service/git.go | 19 ++++++++ templates/gititemcommit.qtpl | 19 ++++++++ templates/gititemcommit.qtpl.go | 104 ++++++++++++++++++++++++++++++++++++++++ 5 files changed, 165 insertions(+) create mode 100644 templates/gititemcommit.qtpl create mode 100644 templates/gititemcommit.qtpl.go diff --git a/pkg/handler/git/handler.go b/pkg/handler/git/handler.go index 0963033..fd62e44 100644 --- a/pkg/handler/git/handler.go +++ b/pkg/handler/git/handler.go @@ -34,6 +34,7 @@ type ( gitService interface { ListRepositories() ([]*service.Repository, error) ListCommits(name string, ref string, count int) ([]*object.Commit, error) + LastCommit(name string, ref string) (*object.Commit, error) GetHead(name string) (*plumbing.Reference, error) GetTree(name, ref, path string) (*object.Tree, error) IsBinary(name, ref, path string) (bool, error) @@ -331,6 +332,27 @@ func (g *GitHandler) Log(w http.ResponseWriter, r *http.Request) error { return nil } +func (g *GitHandler) Commit(w http.ResponseWriter, r *http.Request) error { + ext.SetHTML(w) + name := r.PathValue("name") + ref := r.PathValue("ref") + + commit, err := g.gitService.LastCommit(name, ref) + if err != nil { + return err + } + + gitList := &templates.GitItemPage{ + Name: name, + Ref: ref, + GitItemBase: &templates.GitItemCommitPage{ + Commit: commit, + }, + } + templates.WritePageTemplate(w, gitList) + return nil +} + func GetLexers(filename string) chroma.Lexer { if filename == "APKBUILD" { return lexers.Get("sh") diff --git a/pkg/handler/router.go b/pkg/handler/router.go index 6ee7ba3..f464ac2 100644 --- a/pkg/handler/router.go +++ b/pkg/handler/router.go @@ -41,6 +41,7 @@ func MountHandler( mux.HandleFunc("/{name}/tree/{ref}/{rest...}", gitHandler.Tree) mux.HandleFunc("/{name}/blob/{ref}/{rest...}", gitHandler.Blob) mux.HandleFunc("/{name}/log/{ref}/", gitHandler.Log) + mux.HandleFunc("/{name}/commit/{ref}/", gitHandler.Commit) mux.HandleFunc("/{name}/archive/{file}", gitHandler.Archive) mux.HandleFunc("/config", configHandler) mux.HandleFunc("/about", aboutHandler.About) diff --git a/pkg/service/git.go b/pkg/service/git.go index 1d21204..df4e3aa 100644 --- a/pkg/service/git.go +++ b/pkg/service/git.go @@ -94,6 +94,25 @@ func (g *GitService) ListCommits(name, ref string, count int) ([]*object.Commit, return repo.Commits(count) } +func (g *GitService) LastCommit(name, ref string) (*object.Commit, error) { + r := g.configRepo.GetByName(name) + if r == nil { + return nil, ErrRepositoryNotFound + } + + repo, err := git.OpenRepository(r.Path) + if err != nil { + return nil, err + } + + err = repo.SetRef(ref) + if err != nil { + return nil, err + } + + return repo.LastCommit() +} + func (g *GitService) WriteTarGZip(w io.Writer, name, ref string, prefix string) error { r := g.configRepo.GetByName(name) if r == nil { diff --git a/templates/gititemcommit.qtpl b/templates/gititemcommit.qtpl new file mode 100644 index 0000000..e685f23 --- /dev/null +++ b/templates/gititemcommit.qtpl @@ -0,0 +1,19 @@ +{% import "github.com/go-git/go-git/v5/plumbing/object" %} + +{% code +type GitItemCommitPage struct { + Commit *object.Commit +} +%} + +{% func (g *GitItemCommitPage) Nav(name, ref string) %}{%= GitItemNav(name, ref, Log) %}{% endfunc %} + +{% func (g *GitItemCommitPage) GitContent(name, ref string) %} +
+ {%= Commit(name, g.Commit) %} +
+ + +{% endfunc %} diff --git a/templates/gititemcommit.qtpl.go b/templates/gititemcommit.qtpl.go new file mode 100644 index 0000000..13c1fa9 --- /dev/null +++ b/templates/gititemcommit.qtpl.go @@ -0,0 +1,104 @@ +// Code generated by qtc from "gititemcommit.qtpl". DO NOT EDIT. +// See https://github.com/valyala/quicktemplate for details. + +//line gititemcommit.qtpl:1 +package templates + +//line gititemcommit.qtpl:1 +import "github.com/go-git/go-git/v5/plumbing/object" + +//line gititemcommit.qtpl:3 +import ( + qtio422016 "io" + + qt422016 "github.com/valyala/quicktemplate" +) + +//line gititemcommit.qtpl:3 +var ( + _ = qtio422016.Copy + _ = qt422016.AcquireByteBuffer +) + +//line gititemcommit.qtpl:4 +type GitItemCommitPage struct { + Commit *object.Commit +} + +//line gititemcommit.qtpl:9 +func (g *GitItemCommitPage) StreamNav(qw422016 *qt422016.Writer, name, ref string) { +//line gititemcommit.qtpl:9 + StreamGitItemNav(qw422016, name, ref, Log) +//line gititemcommit.qtpl:9 +} + +//line gititemcommit.qtpl:9 +func (g *GitItemCommitPage) WriteNav(qq422016 qtio422016.Writer, name, ref string) { +//line gititemcommit.qtpl:9 + qw422016 := qt422016.AcquireWriter(qq422016) +//line gititemcommit.qtpl:9 + g.StreamNav(qw422016, name, ref) +//line gititemcommit.qtpl:9 + qt422016.ReleaseWriter(qw422016) +//line gititemcommit.qtpl:9 +} + +//line gititemcommit.qtpl:9 +func (g *GitItemCommitPage) Nav(name, ref string) string { +//line gititemcommit.qtpl:9 + qb422016 := qt422016.AcquireByteBuffer() +//line gititemcommit.qtpl:9 + g.WriteNav(qb422016, name, ref) +//line gititemcommit.qtpl:9 + qs422016 := string(qb422016.B) +//line gititemcommit.qtpl:9 + qt422016.ReleaseByteBuffer(qb422016) +//line gititemcommit.qtpl:9 + return qs422016 +//line gititemcommit.qtpl:9 +} + +//line gititemcommit.qtpl:11 +func (g *GitItemCommitPage) StreamGitContent(qw422016 *qt422016.Writer, name, ref string) { +//line gititemcommit.qtpl:11 + qw422016.N().S(` +
+ `) +//line gititemcommit.qtpl:13 + StreamCommit(qw422016, name, g.Commit) +//line gititemcommit.qtpl:13 + qw422016.N().S(` +
+ + +`) +//line gititemcommit.qtpl:19 +} + +//line gititemcommit.qtpl:19 +func (g *GitItemCommitPage) WriteGitContent(qq422016 qtio422016.Writer, name, ref string) { +//line gititemcommit.qtpl:19 + qw422016 := qt422016.AcquireWriter(qq422016) +//line gititemcommit.qtpl:19 + g.StreamGitContent(qw422016, name, ref) +//line gititemcommit.qtpl:19 + qt422016.ReleaseWriter(qw422016) +//line gititemcommit.qtpl:19 +} + +//line gititemcommit.qtpl:19 +func (g *GitItemCommitPage) GitContent(name, ref string) string { +//line gititemcommit.qtpl:19 + qb422016 := qt422016.AcquireByteBuffer() +//line gititemcommit.qtpl:19 + g.WriteGitContent(qb422016, name, ref) +//line gititemcommit.qtpl:19 + qs422016 := string(qb422016.B) +//line gititemcommit.qtpl:19 + qt422016.ReleaseByteBuffer(qb422016) +//line gititemcommit.qtpl:19 + return qs422016 +//line gititemcommit.qtpl:19 +} -- cgit v1.2.3