cerrado @ d2c4023832e26d3fe3f77c9fa8581588ea812cc2

fix: Add support lightweight tags

For now all tags are read as reference. That cause tags to not carry its
message body by default but it will be added in the future. For now
simple tags will do.
diff --git a/pkg/git/git.go b/pkg/git/git.go
index ad5d3bca28fe075da5da0ea6ae72cb87bd09861a..428bfb164e78ca7e8055097fbe77a31b985e5da4 100644
--- a/pkg/git/git.go
+++ b/pkg/git/git.go
@@ -107,14 +107,14 @@ func (g *GitRepository) Head() (*plumbing.Reference, error) {
 	return g.repository.Head()
 }
 
-func (g *GitRepository) Tags() ([]*object.Tag, error) {
-	ti, err := g.repository.TagObjects()
+func (g *GitRepository) Tags() ([]*plumbing.Reference, error) {
+	ti, err := g.repository.Tags()
 	if err != nil {
 		return nil, err
 	}
 
-	tags := []*object.Tag{}
-	err = ti.ForEach(func(t *object.Tag) error {
+	tags := []*plumbing.Reference{}
+	err = ti.ForEach(func(t *plumbing.Reference) error {
 		tags = append(tags, t)
 		return nil
 	})
diff --git a/pkg/handler/git/handler.go b/pkg/handler/git/handler.go
index b4c7c5481ede247f1e2f67f7b9aa4c2ca6373863..48093629296b5531caef1fe0e4736576b205fca6 100644
--- a/pkg/handler/git/handler.go
+++ b/pkg/handler/git/handler.go
@@ -33,7 +33,7 @@ 		ListCommits(name string, ref string) ([]*object.Commit, error)
 		GetHead(name string) (*plumbing.Reference, error)
 		GetTree(name, ref, path string) (*object.Tree, error)
 		GetFileContent(name, ref, path string) (string, error)
-		ListTags(name string) ([]*object.Tag, error)
+		ListTags(name string) ([]*plumbing.Reference, error)
 		ListBranches(name string) ([]*plumbing.Reference, error)
 	}
 
diff --git a/pkg/service/git.go b/pkg/service/git.go
index 0907924cf24789e3a8f5a558231b7af319e409d1..071e10d640e86887901e442c608f898fa6058ffe 100644
--- a/pkg/service/git.go
+++ b/pkg/service/git.go
@@ -128,7 +128,7 @@
 	return repo.FileContent(path)
 }
 
-func (g *GitService) ListTags(name string) ([]*object.Tag, error) {
+func (g *GitService) ListTags(name string) ([]*plumbing.Reference, error) {
 	r := g.configRepo.GetByName(name)
 	if r == nil {
 		return nil, RepositoryNotFoundErr
diff --git a/scss/main.scss b/scss/main.scss
index 5500a383ec0e462a371173601b8a19e63e0820a0..af8a00210b514e60d9459176b42217b525a24b92 100644
--- a/scss/main.scss
+++ b/scss/main.scss
@@ -58,8 +58,14 @@     values: (
       start: left,
       end: right,
       center: center,
-  )
-),
+    )
+  ),
+  "margin-end": (
+    responsive: true,
+    property: margin-right,
+    class: me,
+    values: map-merge($spacers, (auto: auto))
+  ),
 );
 
 @import "bootstrap/scss/utilities/_api.scss";
diff --git a/templates/gititemrefs.qtpl b/templates/gititemrefs.qtpl
index 47a69e32967bc8e90fd2595efa487ff71380d593..09d7446a2dfa524db36d016a9ffcffafc57d504b 100644
--- a/templates/gititemrefs.qtpl
+++ b/templates/gititemrefs.qtpl
@@ -1,9 +1,8 @@
 {% 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
+    Tags []*plumbing.Reference
     Branches []*plumbing.Reference
 }
 %}
@@ -13,21 +12,25 @@
 {% func (g *GitItemRefsPage) GitContent(name, ref string) %}
 <div class="row">
   <div class="col-md-8">
+    {% if len(g.Tags) > 0 %}
     <div class="event-list">
       {% for _, t := range g.Tags %}
-      <div class="row event">
-          <div class="col-xxl-2">
-           {%s TimeFormat(t.Tagger.When) %}
+      <div class="row event me-md-2">
+          <div class="col-4">
+           {%s t.Name().Short() %}
           </div>
-          <div class="col-xxl-7">
-           <pre>{%s t.Message %}</pre>
-          </div>
-          <div class="col-xxl-3">
-           <small>{%s t.Tagger.Name %}</small>
+          <div class="col-8">
+            <div class="float-end">
+              <a href="/{%s name %}/tree/{%s t.Name().Short() %}">tree</a>
+              <a href="/{%s name %}/log/{%s t.Name().Short() %}">log</a>
+            </div>
           </div>
       </div>
       {% endfor %}
     </div>
+    {% else %}
+        <p> No tags </p>
+    {% endif %}
   </div>
   <div class="col-md-4">
     <div class="event-list">
diff --git a/templates/gititemrefs.qtpl.go b/templates/gititemrefs.qtpl.go
index 95dd31a0114a36ee774711c902dea4bf809bc2df..62c1725248bccf069a7ab9b0f1fa10816fb1bc90 100644
--- a/templates/gititemrefs.qtpl.go
+++ b/templates/gititemrefs.qtpl.go
@@ -7,175 +7,196 @@
 //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
+//line gititemrefs.qtpl:3
 import (
 	qtio422016 "io"
 
 	qt422016 "github.com/valyala/quicktemplate"
 )
 
-//line gititemrefs.qtpl:4
+//line gititemrefs.qtpl:3
 var (
 	_ = qtio422016.Copy
 	_ = qt422016.AcquireByteBuffer
 )
 
-//line gititemrefs.qtpl:5
+//line gititemrefs.qtpl:4
 type GitItemRefsPage struct {
-	Tags     []*object.Tag
+	Tags     []*plumbing.Reference
 	Branches []*plumbing.Reference
 }
 
-//line gititemrefs.qtpl:11
+//line gititemrefs.qtpl:10
 func (g *GitItemRefsPage) StreamNav(qw422016 *qt422016.Writer, name, ref string) {
-//line gititemrefs.qtpl:11
+//line gititemrefs.qtpl:10
 	StreamGitItemNav(qw422016, name, ref, Refs)
-//line gititemrefs.qtpl:11
+//line gititemrefs.qtpl:10
 }
 
-//line gititemrefs.qtpl:11
+//line gititemrefs.qtpl:10
 func (g *GitItemRefsPage) WriteNav(qq422016 qtio422016.Writer, name, ref string) {
-//line gititemrefs.qtpl:11
+//line gititemrefs.qtpl:10
 	qw422016 := qt422016.AcquireWriter(qq422016)
-//line gititemrefs.qtpl:11
+//line gititemrefs.qtpl:10
 	g.StreamNav(qw422016, name, ref)
-//line gititemrefs.qtpl:11
+//line gititemrefs.qtpl:10
 	qt422016.ReleaseWriter(qw422016)
-//line gititemrefs.qtpl:11
+//line gititemrefs.qtpl:10
 }
 
-//line gititemrefs.qtpl:11
+//line gititemrefs.qtpl:10
 func (g *GitItemRefsPage) Nav(name, ref string) string {
-//line gititemrefs.qtpl:11
+//line gititemrefs.qtpl:10
 	qb422016 := qt422016.AcquireByteBuffer()
-//line gititemrefs.qtpl:11
+//line gititemrefs.qtpl:10
 	g.WriteNav(qb422016, name, ref)
-//line gititemrefs.qtpl:11
+//line gititemrefs.qtpl:10
 	qs422016 := string(qb422016.B)
-//line gititemrefs.qtpl:11
+//line gititemrefs.qtpl:10
 	qt422016.ReleaseByteBuffer(qb422016)
-//line gititemrefs.qtpl:11
+//line gititemrefs.qtpl:10
 	return qs422016
-//line gititemrefs.qtpl:11
+//line gititemrefs.qtpl:10
 }
 
-//line gititemrefs.qtpl:13
+//line gititemrefs.qtpl:12
 func (g *GitItemRefsPage) StreamGitContent(qw422016 *qt422016.Writer, name, ref string) {
-//line gititemrefs.qtpl:13
+//line gititemrefs.qtpl:12
 	qw422016.N().S(`
 <div class="row">
   <div class="col-md-8">
+    `)
+//line gititemrefs.qtpl:15
+	if len(g.Tags) > 0 {
+//line gititemrefs.qtpl:15
+		qw422016.N().S(`
     <div class="event-list">
       `)
 //line gititemrefs.qtpl:17
-	for _, t := range g.Tags {
+		for _, t := range g.Tags {
 //line gititemrefs.qtpl:17
-		qw422016.N().S(`
-      <div class="row event">
-          <div class="col-xxl-2">
+			qw422016.N().S(`
+      <div class="row event me-md-2">
+          <div class="col-4">
            `)
 //line gititemrefs.qtpl:20
-		qw422016.E().S(TimeFormat(t.Tagger.When))
+			qw422016.E().S(t.Name().Short())
 //line gititemrefs.qtpl:20
-		qw422016.N().S(`
+			qw422016.N().S(`
           </div>
-          <div class="col-xxl-7">
-           <pre>`)
-//line gititemrefs.qtpl:23
-		qw422016.E().S(t.Message)
-//line gititemrefs.qtpl:23
-		qw422016.N().S(`</pre>
-          </div>
-          <div class="col-xxl-3">
-           <small>`)
-//line gititemrefs.qtpl:26
-		qw422016.E().S(t.Tagger.Name)
-//line gititemrefs.qtpl:26
-		qw422016.N().S(`</small>
+          <div class="col-8">
+            <div class="float-end">
+              <a href="/`)
+//line gititemrefs.qtpl:24
+			qw422016.E().S(name)
+//line gititemrefs.qtpl:24
+			qw422016.N().S(`/tree/`)
+//line gititemrefs.qtpl:24
+			qw422016.E().S(t.Name().Short())
+//line gititemrefs.qtpl:24
+			qw422016.N().S(`">tree</a>
+              <a href="/`)
+//line gititemrefs.qtpl:25
+			qw422016.E().S(name)
+//line gititemrefs.qtpl:25
+			qw422016.N().S(`/log/`)
+//line gititemrefs.qtpl:25
+			qw422016.E().S(t.Name().Short())
+//line gititemrefs.qtpl:25
+			qw422016.N().S(`">log</a>
+            </div>
           </div>
       </div>
       `)
 //line gititemrefs.qtpl:29
+		}
+//line gititemrefs.qtpl:29
+		qw422016.N().S(`
+    </div>
+    `)
+//line gititemrefs.qtpl:31
+	} else {
+//line gititemrefs.qtpl:31
+		qw422016.N().S(`
+        <p> No tags </p>
+    `)
+//line gititemrefs.qtpl:33
 	}
-//line gititemrefs.qtpl:29
+//line gititemrefs.qtpl:33
 	qw422016.N().S(`
-    </div>
   </div>
   <div class="col-md-4">
     <div class="event-list">
       `)
-//line gititemrefs.qtpl:34
+//line gititemrefs.qtpl:37
 	for _, b := range g.Branches {
-//line gititemrefs.qtpl:34
+//line gititemrefs.qtpl:37
 		qw422016.N().S(`
       <div class="row event">
           <div class="col-4">
            `)
-//line gititemrefs.qtpl:37
+//line gititemrefs.qtpl:40
 		qw422016.E().S(b.Name().Short())
-//line gititemrefs.qtpl:37
+//line gititemrefs.qtpl:40
 		qw422016.N().S(`
           </div>
           <div class="col-8">
             <div class="float-end">
               <a href="/`)
-//line gititemrefs.qtpl:41
+//line gititemrefs.qtpl:44
 		qw422016.E().S(name)
-//line gititemrefs.qtpl:41
+//line gititemrefs.qtpl:44
 		qw422016.N().S(`/tree/`)
-//line gititemrefs.qtpl:41
+//line gititemrefs.qtpl:44
 		qw422016.E().S(b.Name().Short())
-//line gititemrefs.qtpl:41
+//line gititemrefs.qtpl:44
 		qw422016.N().S(`">tree</a>
               <a href="/`)
-//line gititemrefs.qtpl:42
+//line gititemrefs.qtpl:45
 		qw422016.E().S(name)
-//line gititemrefs.qtpl:42
+//line gititemrefs.qtpl:45
 		qw422016.N().S(`/log/`)
-//line gititemrefs.qtpl:42
+//line gititemrefs.qtpl:45
 		qw422016.E().S(b.Name().Short())
-//line gititemrefs.qtpl:42
+//line gititemrefs.qtpl:45
 		qw422016.N().S(`">log</a>
             </div>
           </div>
       </div>
       `)
-//line gititemrefs.qtpl:46
+//line gititemrefs.qtpl:49
 	}
-//line gititemrefs.qtpl:46
+//line gititemrefs.qtpl:49
 	qw422016.N().S(`
     </div>
   </div>
 </div>
 `)
-//line gititemrefs.qtpl:50
+//line gititemrefs.qtpl:53
 }
 
-//line gititemrefs.qtpl:50
+//line gititemrefs.qtpl:53
 func (g *GitItemRefsPage) WriteGitContent(qq422016 qtio422016.Writer, name, ref string) {
-//line gititemrefs.qtpl:50
+//line gititemrefs.qtpl:53
 	qw422016 := qt422016.AcquireWriter(qq422016)
-//line gititemrefs.qtpl:50
+//line gititemrefs.qtpl:53
 	g.StreamGitContent(qw422016, name, ref)
-//line gititemrefs.qtpl:50
+//line gititemrefs.qtpl:53
 	qt422016.ReleaseWriter(qw422016)
-//line gititemrefs.qtpl:50
+//line gititemrefs.qtpl:53
 }
 
-//line gititemrefs.qtpl:50
+//line gititemrefs.qtpl:53
 func (g *GitItemRefsPage) GitContent(name, ref string) string {
-//line gititemrefs.qtpl:50
+//line gititemrefs.qtpl:53
 	qb422016 := qt422016.AcquireByteBuffer()
-//line gititemrefs.qtpl:50
+//line gititemrefs.qtpl:53
 	g.WriteGitContent(qb422016, name, ref)
-//line gititemrefs.qtpl:50
+//line gititemrefs.qtpl:53
 	qs422016 := string(qb422016.B)
-//line gititemrefs.qtpl:50
+//line gititemrefs.qtpl:53
 	qt422016.ReleaseByteBuffer(qb422016)
-//line gititemrefs.qtpl:50
+//line gititemrefs.qtpl:53
 	return qs422016
-//line gititemrefs.qtpl:50
+//line gititemrefs.qtpl:53
 }