Commit 22172c0

mo khan <mo@mokhan.ca>
2026-02-01 07:14:55
feat: add compare between latest branch and HEAD
1 parent b7c1e89
Changed files (4)
internal/generator/compare.go
@@ -24,6 +24,13 @@ func GenerateComparePages(tags []git.Tag, branches []git.Ref, params Params) err
 		return err
 	}
 
+	if len(tags) > 0 {
+		latestTag := tags[0].Name
+		if err := generateComparePage(latestTag, "HEAD", params); err != nil {
+			Echo(fmt.Sprintf("  warning: compare %s...HEAD failed: %v", latestTag, err))
+		}
+	}
+
 	if len(tags) > 1 {
 		for i := 0; i < len(tags)-1; i++ {
 			base := tags[i+1].Name
@@ -152,7 +159,11 @@ func generateComparePage(base, head string, params Params) error {
 		commits[i].Href = filepath.ToSlash(filepath.Join("../../commit", commits[i].Hash+".html"))
 	}
 
-	dirName := baseRef.DirName() + "..." + headRef.DirName()
+	headDirName := headRef.DirName()
+	if head == "HEAD" {
+		headDirName = "HEAD"
+	}
+	dirName := baseRef.DirName() + "..." + headDirName
 	outDir := filepath.Join(params.OutputDir, "compare", dirName)
 	if err := os.MkdirAll(outDir, 0o755); err != nil {
 		return err
internal/generator/tags.go
@@ -33,6 +33,12 @@ func GenerateTags(entries []git.Tag, params Params) error {
 		}
 	}
 
+	var unreleasedHref string
+	if len(entries) > 0 {
+		latestTag := git.NewRef(entries[0].Name)
+		unreleasedHref = fmt.Sprintf("compare/%s...HEAD/", latestTag.DirName())
+	}
+
 	return templates.TagsTemplate.ExecuteTemplate(f, "layout.gohtml", templates.TagsParams{
 		LayoutParams: templates.LayoutParams{
 			Title:         fmt.Sprintf("Tags %s %s", Dot, params.Name),
@@ -41,6 +47,7 @@ func GenerateTags(entries []git.Tag, params Params) error {
 			CurrentRefDir: params.DefaultRef.DirName(),
 			Selected:      "tags",
 		},
-		Tags: tagEntries,
+		Tags:           tagEntries,
+		UnreleasedHref: unreleasedHref,
 	})
 }
internal/templates/tags.gohtml
@@ -54,6 +54,9 @@
 
 {{- define "body" -}}
 <h1>Tags</h1>
+{{- if .UnreleasedHref}}
+<p><a href="{{.UnreleasedHref}}">Unreleased changes</a></p>
+{{- end}}
 <div class="tags">
 {{- if .Tags}}
 {{- range .Tags}}
internal/templates/templates.go
@@ -140,7 +140,8 @@ type BranchEntry struct {
 
 type TagsParams struct {
 	LayoutParams
-	Tags []TagEntry
+	Tags           []TagEntry
+	UnreleasedHref string
 }
 
 type TagEntry struct {