aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGabriel A. Giovanini <mail@gabrielgio.me>2024-06-01 18:24:22 +0200
committerGabriel A. Giovanini <mail@gabrielgio.me>2024-06-01 18:24:22 +0200
commitf1643ffcbd543cacfe9ab5e46eafdd0c39cd47fd (patch)
treea24d3cbb625f642c25cdc14124b8971fa9bfeb04
parent4ea63e98cc999ab05d1ac98b64875d7413e86972 (diff)
downloadcerrado-f1643ffcbd543cacfe9ab5e46eafdd0c39cd47fd.tar.gz
cerrado-f1643ffcbd543cacfe9ab5e46eafdd0c39cd47fd.tar.bz2
cerrado-f1643ffcbd543cacfe9ab5e46eafdd0c39cd47fd.zip
feat: Add refs page
UI now it is a broken state. I'll all pages working first so I can better style it later.
-rw-r--r--pkg/git/git.go48
-rw-r--r--pkg/handler/git/handler.go23
-rw-r--r--pkg/service/git.go17
-rw-r--r--scss/main.scss15
-rw-r--r--templates/gititemlog.qtpl8
-rw-r--r--templates/gititemlog.qtpl.go10
-rw-r--r--templates/gititemrefs.qtpl38
-rw-r--r--templates/gititemrefs.qtpl.go137
8 files changed, 241 insertions, 55 deletions
diff --git a/pkg/git/git.go b/pkg/git/git.go
index 80c0e46..7ef23f7 100644
--- a/pkg/git/git.go
+++ b/pkg/git/git.go
@@ -6,6 +6,7 @@ import (
"io"
"github.com/go-git/go-git/v5"
+ "github.com/go-git/go-git/v5/plumbing"
"github.com/go-git/go-git/v5/plumbing/object"
)
@@ -54,6 +55,7 @@ func (g *GitRepository) Commits() ([]*object.Commit, error) {
if err != nil {
return nil, err
}
+
ref, err := repo.Head()
if err != nil {
return nil, errors.Join(MissingHeadErr, err)
@@ -81,3 +83,49 @@ func (g *GitRepository) Commits() ([]*object.Commit, error) {
return commits, nil
}
+
+func (g *GitRepository) Tags() ([]*object.Tag, error) {
+ repo, err := git.PlainOpen(g.path)
+ if err != nil {
+ return nil, err
+ }
+
+ ti, err := repo.TagObjects()
+ if err != nil {
+ return nil, err
+ }
+
+ tags := []*object.Tag{}
+ err = ti.ForEach(func(t *object.Tag) error {
+ tags = append(tags, t)
+ return nil
+ })
+ if err != nil {
+ return nil, err
+ }
+
+ return tags, nil
+}
+
+func (g *GitRepository) Branches() ([]*plumbing.Reference, error) {
+ repo, err := git.PlainOpen(g.path)
+ if err != nil {
+ return nil, err
+ }
+
+ bs, err := repo.Branches()
+ if err != nil {
+ return nil, err
+ }
+
+ branches := []*plumbing.Reference{}
+ err = bs.ForEach(func(ref *plumbing.Reference) error {
+ branches = append(branches, ref)
+ return nil
+ })
+ if err != nil {
+ return nil, err
+ }
+
+ return branches, nil
+}
diff --git a/pkg/handler/git/handler.go b/pkg/handler/git/handler.go
index ebfb37f..d090f22 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"
"github.com/go-git/go-git/v5/plumbing/object"
"github.com/gorilla/mux"
)
@@ -18,6 +19,8 @@ type (
gitService interface {
ListRepositories() ([]*service.Repository, error)
ListCommits(string) ([]*object.Commit, error)
+ ListTags(string) ([]*object.Tag, error)
+ ListBranches(string) ([]*plumbing.Reference, error)
}
)
@@ -58,9 +61,25 @@ func (g *GitHandler) About(w http.ResponseWriter, r *http.Request) {
func (g *GitHandler) Refs(w http.ResponseWriter, r *http.Request) {
name := mux.Vars(r)["name"]
+
+ tags, err := g.gitService.ListTags(name)
+ if err != nil {
+ slog.Error("Error loading tags", "error", err)
+ return
+ }
+
+ branches, err := g.gitService.ListBranches(name)
+ if err != nil {
+ slog.Error("Error loading branches", "error", err)
+ return
+ }
+
gitList := &templates.GitItemPage{
- Name: name,
- GitItemBase: &templates.GitItemRefsPage{},
+ Name: name,
+ GitItemBase: &templates.GitItemRefsPage{
+ Tags: tags,
+ Branches: branches,
+ },
}
templates.WritePageTemplate(w, gitList)
}
diff --git a/pkg/service/git.go b/pkg/service/git.go
index 614770f..57b9b6e 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"
"github.com/go-git/go-git/v5/plumbing/object"
)
@@ -65,3 +66,19 @@ func (g *GitService) ListCommits(name string) ([]*object.Commit, error) {
repo := git.NewGitRepository(r.Path)
return repo.Commits()
}
+
+func (g *GitService) ListTags(name string) ([]*object.Tag, error) {
+ // TODO: handle nil
+ r := g.configRepo.GetByName(name)
+
+ repo := git.NewGitRepository(r.Path)
+ return repo.Tags()
+}
+
+func (g *GitService) ListBranches(name string) ([]*plumbing.Reference, error) {
+ // TODO: handle nil
+ r := g.configRepo.GetByName(name)
+
+ repo := git.NewGitRepository(r.Path)
+ return repo.Branches()
+}
diff --git a/scss/main.scss b/scss/main.scss
index 9f17dad..bb7d7f0 100644
--- a/scss/main.scss
+++ b/scss/main.scss
@@ -80,15 +80,10 @@ body {
.logs pre::first-line {
font-weight: bold;
}
-
-@include media-breakpoint-down(sm) {
- // add extra spacing then list is seen on vertical
- .logs>div>div:first-child {
- margin-bottom: 15px;
- }
- .logs>div>div:last-child {
- margin-top: 15px;
- }
+.logs>div>div:first-child {
+ margin-bottom: 15px;
+}
+.logs>div>div:last-child {
+ margin-top: 15px;
}
-
diff --git a/templates/gititemlog.qtpl b/templates/gititemlog.qtpl
index a39fb77..436c1d2 100644
--- a/templates/gititemlog.qtpl
+++ b/templates/gititemlog.qtpl
@@ -12,14 +12,14 @@ type GitItemLogPage struct {
<div class="logs">
{% for _, c := range g.Commits %}
<div class="row">
- <div class="col-sm-2">
+ <div class="col-xxl-2">
{%s TimeFormat(c.Committer.When) %}
</div>
- <div class="col-sm-7">
+ <div class="col-xxl-7">
<pre>{%s c.Message %}</pre>
</div>
- <div class="col-sm-3">
- {%s c.Committer.Name %}
+ <div class="col-xxl-3">
+ <small>{%s c.Committer.Name %}</small>
</div>
</div>
{% endfor %}
diff --git a/templates/gititemlog.qtpl.go b/templates/gititemlog.qtpl.go
index cc5652d..e63c871 100644
--- a/templates/gititemlog.qtpl.go
+++ b/templates/gititemlog.qtpl.go
@@ -69,26 +69,26 @@ func (g *GitItemLogPage) StreamGitContent(qw422016 *qt422016.Writer) {
//line gititemlog.qtpl:13
qw422016.N().S(`
<div class="row">
- <div class="col-sm-2">
+ <div class="col-xxl-2">
`)
//line gititemlog.qtpl:16
qw422016.E().S(TimeFormat(c.Committer.When))
//line gititemlog.qtpl:16
qw422016.N().S(`
</div>
- <div class="col-sm-7">
+ <div class="col-xxl-7">
<pre>`)
//line gititemlog.qtpl:19
qw422016.E().S(c.Message)
//line gititemlog.qtpl:19
qw422016.N().S(`</pre>
</div>
- <div class="col-sm-3">
- `)
+ <div class="col-xxl-3">
+ <small>`)
//line gititemlog.qtpl:22
qw422016.E().S(c.Committer.Name)
//line gititemlog.qtpl:22
- qw422016.N().S(`
+ qw422016.N().S(`</small>
</div>
</div>
`)
diff --git a/templates/gititemrefs.qtpl b/templates/gititemrefs.qtpl
index 5fed393..9c58863 100644
--- a/templates/gititemrefs.qtpl
+++ b/templates/gititemrefs.qtpl
@@ -1,10 +1,46 @@
+{% import "github.com/go-git/go-git/v5/plumbing" %}
+{% import "github.com/go-git/go-git/v5/plumbing/object" %}
+
{% code
type GitItemRefsPage struct {
+ Tags []*object.Tag
+ Branches []*plumbing.Reference
}
%}
{% func (g *GitItemRefsPage) Nav(name string) %}{%= GitItemNav(name ,Refs) %}{% endfunc %}
{% func (g *GitItemRefsPage) GitContent() %}
-<h4>Refs</h4>
+<div class="row">
+ <div class="col-xxl">
+ <h4>Tags</h4>
+ <div class="logs">
+ {% for _, t := range g.Tags %}
+ <div class="row">
+ <div class="col-xxl-2">
+ {%s TimeFormat(t.Tagger.When) %}
+ </div>
+ <div class="col-xxl-7">
+ <pre>{%s t.Message %}</pre>
+ </div>
+ <div class="col-xxl-3">
+ <small>{%s t.Tagger.Name %}</small>
+ </div>
+ </div>
+ {% endfor %}
+ </div>
+ </div>
+ <div class="col-xxl">
+ <h4>Branches</h4>
+ <div class="logs">
+ {% for _, b := range g.Branches %}
+ <div class="row">
+ <div class="col-xxl">
+ {%s b.String() %}
+ </div>
+ </div>
+ {% endfor %}
+ </div>
+ </div>
+</div>
{% endfunc %}
diff --git a/templates/gititemrefs.qtpl.go b/templates/gititemrefs.qtpl.go
index 5294bf9..f2d2b6f 100644
--- a/templates/gititemrefs.qtpl.go
+++ b/templates/gititemrefs.qtpl.go
@@ -5,86 +5,157 @@
package templates
//line gititemrefs.qtpl:1
+import "github.com/go-git/go-git/v5/plumbing"
+
+//line gititemrefs.qtpl:2
+import "github.com/go-git/go-git/v5/plumbing/object"
+
+//line gititemrefs.qtpl:4
import (
qtio422016 "io"
qt422016 "github.com/valyala/quicktemplate"
)
-//line gititemrefs.qtpl:1
+//line gititemrefs.qtpl:4
var (
_ = qtio422016.Copy
_ = qt422016.AcquireByteBuffer
)
-//line gititemrefs.qtpl:2
+//line gititemrefs.qtpl:5
type GitItemRefsPage struct {
+ Tags []*object.Tag
+ Branches []*plumbing.Reference
}
-//line gititemrefs.qtpl:6
+//line gititemrefs.qtpl:11
func (g *GitItemRefsPage) StreamNav(qw422016 *qt422016.Writer, name string) {
-//line gititemrefs.qtpl:6
+//line gititemrefs.qtpl:11
StreamGitItemNav(qw422016, name, Refs)
-//line gititemrefs.qtpl:6
+//line gititemrefs.qtpl:11
}
-//line gititemrefs.qtpl:6
+//line gititemrefs.qtpl:11
func (g *GitItemRefsPage) WriteNav(qq422016 qtio422016.Writer, name string) {
-//line gititemrefs.qtpl:6
+//line gititemrefs.qtpl:11
qw422016 := qt422016.AcquireWriter(qq422016)
-//line gititemrefs.qtpl:6
+//line gititemrefs.qtpl:11
g.StreamNav(qw422016, name)
-//line gititemrefs.qtpl:6
+//line gititemrefs.qtpl:11
qt422016.ReleaseWriter(qw422016)
-//line gititemrefs.qtpl:6
+//line gititemrefs.qtpl:11
}
-//line gititemrefs.qtpl:6
+//line gititemrefs.qtpl:11
func (g *GitItemRefsPage) Nav(name string) string {
-//line gititemrefs.qtpl:6
+//line gititemrefs.qtpl:11
qb422016 := qt422016.AcquireByteBuffer()
-//line gititemrefs.qtpl:6
+//line gititemrefs.qtpl:11
g.WriteNav(qb422016, name)
-//line gititemrefs.qtpl:6
+//line gititemrefs.qtpl:11
qs422016 := string(qb422016.B)
-//line gititemrefs.qtpl:6
+//line gititemrefs.qtpl:11
qt422016.ReleaseByteBuffer(qb422016)
-//line gititemrefs.qtpl:6
+//line gititemrefs.qtpl:11
return qs422016
-//line gititemrefs.qtpl:6
+//line gititemrefs.qtpl:11
}
-//line gititemrefs.qtpl:8
+//line gititemrefs.qtpl:13
func (g *GitItemRefsPage) StreamGitContent(qw422016 *qt422016.Writer) {
-//line gititemrefs.qtpl:8
+//line gititemrefs.qtpl:13
+ qw422016.N().S(`
+<div class="row">
+ <div class="col-xxl">
+ <h4>Tags</h4>
+ <div class="logs">
+ `)
+//line gititemrefs.qtpl:18
+ for _, t := range g.Tags {
+//line gititemrefs.qtpl:18
+ qw422016.N().S(`
+ <div class="row">
+ <div class="col-xxl-2">
+ `)
+//line gititemrefs.qtpl:21
+ qw422016.E().S(TimeFormat(t.Tagger.When))
+//line gititemrefs.qtpl:21
+ qw422016.N().S(`
+ </div>
+ <div class="col-xxl-7">
+ <pre>`)
+//line gititemrefs.qtpl:24
+ qw422016.E().S(t.Message)
+//line gititemrefs.qtpl:24
+ qw422016.N().S(`</pre>
+ </div>
+ <div class="col-xxl-3">
+ <small>`)
+//line gititemrefs.qtpl:27
+ qw422016.E().S(t.Tagger.Name)
+//line gititemrefs.qtpl:27
+ qw422016.N().S(`</small>
+ </div>
+ </div>
+ `)
+//line gititemrefs.qtpl:30
+ }
+//line gititemrefs.qtpl:30
+ qw422016.N().S(`
+ </div>
+ </div>
+ <div class="col-xxl">
+ <h4>Branches</h4>
+ <div class="logs">
+ `)
+//line gititemrefs.qtpl:36
+ for _, b := range g.Branches {
+//line gititemrefs.qtpl:36
+ qw422016.N().S(`
+ <div class="row">
+ <div class="col-xxl">
+ `)
+//line gititemrefs.qtpl:39
+ qw422016.E().S(b.String())
+//line gititemrefs.qtpl:39
+ qw422016.N().S(`
+ </div>
+ </div>
+ `)
+//line gititemrefs.qtpl:42
+ }
+//line gititemrefs.qtpl:42
qw422016.N().S(`
-<h4>Refs</h4>
+ </div>
+ </div>
+</div>
`)
-//line gititemrefs.qtpl:10
+//line gititemrefs.qtpl:46
}
-//line gititemrefs.qtpl:10
+//line gititemrefs.qtpl:46
func (g *GitItemRefsPage) WriteGitContent(qq422016 qtio422016.Writer) {
-//line gititemrefs.qtpl:10
+//line gititemrefs.qtpl:46
qw422016 := qt422016.AcquireWriter(qq422016)
-//line gititemrefs.qtpl:10
+//line gititemrefs.qtpl:46
g.StreamGitContent(qw422016)
-//line gititemrefs.qtpl:10
+//line gititemrefs.qtpl:46
qt422016.ReleaseWriter(qw422016)
-//line gititemrefs.qtpl:10
+//line gititemrefs.qtpl:46
}
-//line gititemrefs.qtpl:10
+//line gititemrefs.qtpl:46
func (g *GitItemRefsPage) GitContent() string {
-//line gititemrefs.qtpl:10
+//line gititemrefs.qtpl:46
qb422016 := qt422016.AcquireByteBuffer()
-//line gititemrefs.qtpl:10
+//line gititemrefs.qtpl:46
g.WriteGitContent(qb422016)
-//line gititemrefs.qtpl:10
+//line gititemrefs.qtpl:46
qs422016 := string(qb422016.B)
-//line gititemrefs.qtpl:10
+//line gititemrefs.qtpl:46
qt422016.ReleaseByteBuffer(qb422016)
-//line gititemrefs.qtpl:10
+//line gititemrefs.qtpl:46
return qs422016
-//line gititemrefs.qtpl:10
+//line gititemrefs.qtpl:46
}