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
1@@ -7,7 +7,12 @@
2 <div class="group-2">
3 <div class="box sticky flex items-center gap border-visited" style="margin: 0 !important;">
4 <code>{{.RevData.Name}}</code>
5- <div><span class="font-bold">{{.NumCommits}}</span> commits</div>
6+ <div>
7+ <span class="font-bold">{{.NumCommits}}</span> commits
8+ {{if and .TotalCommits (ne .NumCommits .TotalCommits)}}
9+ <span class="text-sm">({{.NumCommits}} out of {{.TotalCommits}} generated)</span>
10+ {{end}}
11+ </div>
12 </div>
13
14 {{range .Logs}}
M
main.go
+31,
-7
1@@ -10,8 +10,10 @@ import (
2 "io"
3 "log/slog"
4 "os"
5+ "os/exec"
6 "path/filepath"
7 "sort"
8+ "strconv"
9 "strings"
10 "sync"
11 "time"
12@@ -191,8 +193,9 @@ type TreePageData struct {
13
14 type LogPageData struct {
15 *PageData
16- NumCommits int
17- Logs []*CommitData
18+ NumCommits int
19+ TotalCommits int
20+ Logs []*CommitData
21 }
22
23 type FilePageData struct {
24@@ -484,7 +487,7 @@ func (c *Config) writeTree(data PageData, tree *TreeRoot) {
25 })
26 }
27
28-func (c *Config) writeLog(data PageData, logs []*CommitData) {
29+func (c *Config) writeLog(data PageData, logs []*CommitData, totalCommits int) {
30 data.ActivePage = "commits"
31 c.Logger.Info("writing log file", "revision", data.RevData.Name())
32 c.writeHtml(&WriteData{
33@@ -492,9 +495,10 @@ func (c *Config) writeLog(data PageData, logs []*CommitData) {
34 Subdir: getLogBaseDir(data.RevData),
35 Template: "html/log.page.tmpl",
36 Data: &LogPageData{
37- PageData: &data,
38- NumCommits: len(logs),
39- Logs: logs,
40+ PageData: &data,
41+ NumCommits: len(logs),
42+ TotalCommits: totalCommits,
43+ Logs: logs,
44 },
45 })
46 }
47@@ -701,6 +705,23 @@ func getShortID(id string) string {
48 return id[:7]
49 }
50
51+// countCommits returns the total number of commits reachable from the given ref
52+func countCommits(repo *git.Repository, ref string) int {
53+ // git rev-list --count is the most efficient way to get total commit count
54+ cmd := exec.Command("git", "rev-list", "--count", ref)
55+ cmd.Dir = repo.Path() // run in the repo directory
56+ out, err := cmd.CombinedOutput()
57+ if err != nil {
58+ // fallback: if git command fails, return 0
59+ return 0
60+ }
61+ count, err := strconv.Atoi(strings.TrimSpace(string(out)))
62+ if err != nil {
63+ return 0
64+ }
65+ return count
66+}
67+
68 func (c *Config) writeRepo() *BranchOutput {
69 c.Logger.Info("writing repo", "repoPath", c.RepoPath)
70 repo, err := git.Open(c.RepoPath)
71@@ -1041,6 +1062,9 @@ func (c *Config) writeRevision(repo *git.Repository, pageData *PageData, refs []
72 if pageSize == 0 {
73 pageSize = 5000
74 }
75+ // get total commit count (unlimited) for display
76+ totalCommits := countCommits(repo, pageData.RevData.ID())
77+
78 commits, err := repo.CommitsByPage(pageData.RevData.ID(), 0, pageSize)
79 bail(err)
80
81@@ -1076,7 +1100,7 @@ func (c *Config) writeRevision(repo *git.Repository, pageData *PageData, refs []
82 })
83 }
84
85- c.writeLog(*pageData, logs)
86+ c.writeLog(*pageData, logs, totalCommits)
87
88 for _, cm := range logs {
89 wg.Add(1)