Commit 8e1573e

Eric Bower  ·  2026-05-16 09:26:14 -0400 EDT
parent ac17667
style: show total commit in log when truncated
2 files changed,  +37, -8
+6, -1
......@@ -7,7 +7,12 @@
77 <div class="group-2">
88 <div class="box sticky flex items-center gap border-visited" style="margin: 0 !important;">
99 <code>{{.RevData.Name}}</code>
10- <div><span class="font-bold">{{.NumCommits}}</span> commits</div>
10+ <div>
11+ <span class="font-bold">{{.NumCommits}}</span> commits
12+ {{if and .TotalCommits (ne .NumCommits .TotalCommits)}}
13+ <span class="text-sm">({{.NumCommits}} out of {{.TotalCommits}} generated)</span>
14+ {{end}}
15+ </div>
1116 </div>
1217
1318 {{range .Logs}}
+31, -7
......@@ -10,8 +10,10 @@ import (
1010 "io"
1111 "log/slog"
1212 "os"
13+ "os/exec"
1314 "path/filepath"
1415 "sort"
16+ "strconv"
1517 "strings"
1618 "sync"
1719 "time"
......@@ -191,8 +193,9 @@ type TreePageData struct {
191193
192194 type LogPageData struct {
193195 *PageData
194- NumCommits int
195- Logs []*CommitData
196+ NumCommits int
197+ TotalCommits int
198+ Logs []*CommitData
196199 }
197200
198201 type FilePageData struct {
......@@ -484,7 +487,7 @@ func (c *Config) writeTree(data PageData, tree *TreeRoot) {
484487 })
485488 }
486489
487-func (c *Config) writeLog(data PageData, logs []*CommitData) {
490+func (c *Config) writeLog(data PageData, logs []*CommitData, totalCommits int) {
488491 data.ActivePage = "commits"
489492 c.Logger.Info("writing log file", "revision", data.RevData.Name())
490493 c.writeHtml(&WriteData{
......@@ -492,9 +495,10 @@ func (c *Config) writeLog(data PageData, logs []*CommitData) {
492495 Subdir: getLogBaseDir(data.RevData),
493496 Template: "html/log.page.tmpl",
494497 Data: &LogPageData{
495- PageData: &data,
496- NumCommits: len(logs),
497- Logs: logs,
498+ PageData: &data,
499+ NumCommits: len(logs),
500+ TotalCommits: totalCommits,
501+ Logs: logs,
498502 },
499503 })
500504 }
......@@ -701,6 +705,23 @@ func getShortID(id string) string {
701705 return id[:7]
702706 }
703707
708+// countCommits returns the total number of commits reachable from the given ref
709+func countCommits(repo *git.Repository, ref string) int {
710+ // git rev-list --count is the most efficient way to get total commit count
711+ cmd := exec.Command("git", "rev-list", "--count", ref)
712+ cmd.Dir = repo.Path() // run in the repo directory
713+ out, err := cmd.CombinedOutput()
714+ if err != nil {
715+ // fallback: if git command fails, return 0
716+ return 0
717+ }
718+ count, err := strconv.Atoi(strings.TrimSpace(string(out)))
719+ if err != nil {
720+ return 0
721+ }
722+ return count
723+}
724+
704725 func (c *Config) writeRepo() *BranchOutput {
705726 c.Logger.Info("writing repo", "repoPath", c.RepoPath)
706727 repo, err := git.Open(c.RepoPath)
......@@ -1041,6 +1062,9 @@ func (c *Config) writeRevision(repo *git.Repository, pageData *PageData, refs []
10411062 if pageSize == 0 {
10421063 pageSize = 5000
10431064 }
1065+ // get total commit count (unlimited) for display
1066+ totalCommits := countCommits(repo, pageData.RevData.ID())
1067+
10441068 commits, err := repo.CommitsByPage(pageData.RevData.ID(), 0, pageSize)
10451069 bail(err)
10461070
......@@ -1076,7 +1100,7 @@ func (c *Config) writeRevision(repo *git.Repository, pageData *PageData, refs []
10761100 })
10771101 }
10781102
1079- c.writeLog(*pageData, logs)
1103+ c.writeLog(*pageData, logs, totalCommits)
10801104
10811105 for _, cm := range logs {
10821106 wg.Add(1)