parent:
4cda3b879627a0422d8884f8dd70e4d3e59e7015
nmyk <nick@nmyk.io>
2026-03-01T11:12:31-05:00
adds annotations to refs/tags page sorts tags in reverse chronological order
diff --git a/internal/handlers/formatting.go b/internal/handlers/formatting.go
index 37cc7e2f529e5310c33143f7ebcbb0f9e108274f..e73959e58f88047130a8ed5efae9b1508745f823 100644
--- a/internal/handlers/formatting.go
+++ b/internal/handlers/formatting.go
@@ -9,14 +9,14 @@ func fmtAuthor(name string, email string) string {
return name + " <" + email + ">"
}
-type Crumb struct {
+type crumb struct {
Name string
URL string
IsLast bool
}
-func breadcrumbs(repoName string, refLabel string, p string) []Crumb {
- var crumbs []Crumb
+func breadcrumbs(repoName string, refLabel string, p string) []crumb {
+ var crumbs []crumb
last := true
cur := p
for {
@@ -24,7 +24,7 @@ base := path.Base(cur)
if base == "." || base == "/" {
break
}
- crumbs = append(crumbs, Crumb{
+ crumbs = append(crumbs, crumb{
Name: base,
URL: path.Join(repoName, "tree", refLabel, cur),
IsLast: last,
diff --git a/internal/handlers/handlers.go b/internal/handlers/handlers.go
index 02671d9981532bd09e5dc6092300168e17c539fb..49ec5f8365ac11617947b660587767000d4d2848 100644
--- a/internal/handlers/handlers.go
+++ b/internal/handlers/handlers.go
@@ -153,7 +153,9 @@ Name string
}
type TagMeta struct {
- Name string
+ Name string
+ Annotation string
+ When time.Time
}
type RefsData struct {
@@ -195,13 +197,32 @@ return
}
var tags []TagMeta
err = tagIter.ForEach(func(ref *plumbing.Reference) error {
- tags = append(tags, TagMeta{ref.Name().Short()})
+ var t TagMeta
+ tagObj, err := repo.TagObject(ref.Hash())
+ switch err {
+ case nil:
+ t.Annotation = tagObj.Message
+ t.When = tagObj.Tagger.When
+ case plumbing.ErrObjectNotFound:
+ commit, err := repo.CommitObject(ref.Hash())
+ if err != nil {
+ return err
+ }
+ t.When = commit.Committer.When
+ default:
+ return err
+ }
+ t.Name = ref.Name().Short()
+ tags = append(tags, t)
return nil
})
if err != nil {
s.error(w, err)
return
}
+ slices.SortFunc(tags, func(a TagMeta, b TagMeta) int {
+ return -1 * a.When.Compare(b.When)
+ })
refType := r.PathValue("type")
if !slices.Contains([]string{"branches", "tags"}, refType) {
refType = "branches"
@@ -332,7 +353,7 @@ type BlobData struct {
Repo string
RefLabel string
Path string
- Crumbs []Crumb
+ Crumbs []crumb
Content string
}
@@ -387,7 +408,7 @@ RefLabel string
Commit string
HeadRef string
Path string
- Crumbs []Crumb
+ Crumbs []crumb
Entries []EntryMeta
ReadmeName string
Readme string
diff --git a/internal/handlers/templates/refs.tmpl b/internal/handlers/templates/refs.tmpl
index 1a2d878e194b02853a3df4d462c39a70a830bf8d..c058e830e6e559805c9f35b30972032e66776ba4 100644
--- a/internal/handlers/templates/refs.tmpl
+++ b/internal/handlers/templates/refs.tmpl
@@ -20,6 +20,7 @@ {{end}}
{{else if eq .Type "tags"}}
{{range .Tags}}
<li><a href="/{{$.Repo}}/tree/{{.Name}}">{{.Name}}</a></li>
+ {{ if ne .Annotation "" }}<pre>{{ .Annotation }}</pre>{{ end }}
{{end}}
{{else}}
{{end}}