diff options
| author | Gabriel A. Giovanini <mail@gabrielgio.me> | 2024-06-01 18:24:22 +0200 | 
|---|---|---|
| committer | Gabriel A. Giovanini <mail@gabrielgio.me> | 2024-06-01 18:24:22 +0200 | 
| commit | f1643ffcbd543cacfe9ab5e46eafdd0c39cd47fd (patch) | |
| tree | a24d3cbb625f642c25cdc14124b8971fa9bfeb04 | |
| parent | 4ea63e98cc999ab05d1ac98b64875d7413e86972 (diff) | |
| download | cerrado-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.go | 48 | ||||
| -rw-r--r-- | pkg/handler/git/handler.go | 23 | ||||
| -rw-r--r-- | pkg/service/git.go | 17 | ||||
| -rw-r--r-- | scss/main.scss | 15 | ||||
| -rw-r--r-- | templates/gititemlog.qtpl | 8 | ||||
| -rw-r--r-- | templates/gititemlog.qtpl.go | 10 | ||||
| -rw-r--r-- | templates/gititemrefs.qtpl | 38 | ||||
| -rw-r--r-- | templates/gititemrefs.qtpl.go | 137 | 
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  } | 
