From 4817a771c8d41acc4e43f15f0f47bece49f540eb Mon Sep 17 00:00:00 2001 From: Amolith Date: Mon, 13 Oct 2025 13:21:56 -0600 Subject: [PATCH] fix: display full branch names in breadcrumbs Previously, the breadcrumb navigation would truncate all refs using shortHash, causing branch names like "generate-promo-codes" to display as just "generate". This change adds an IsCommitHash field to template data structures and updates the templates to conditionally apply shortHash only for actual commit hashes while showing full names for branches and tags. Implements: bug-bf0175a Co-Authored-By: Crush --- pkg/web/templates/blob.html | 2 +- pkg/web/templates/tree.html | 4 ++-- pkg/web/webui_blob.go | 6 ++++-- pkg/web/webui_commits.go | 2 +- pkg/web/webui_git.go | 7 ++++--- pkg/web/webui_tree.go | 4 +++- 6 files changed, 15 insertions(+), 10 deletions(-) diff --git a/pkg/web/templates/blob.html b/pkg/web/templates/blob.html index c013d91ec71b25e8c669534c53a8b31299170ebf..81923ac0f8c12889cb9e4b92d74ec98a745130df 100644 --- a/pkg/web/templates/blob.html +++ b/pkg/web/templates/blob.html @@ -2,7 +2,7 @@ diff --git a/pkg/web/webui_blob.go b/pkg/web/webui_blob.go index 89f92d3127f257e1714acb267ed5db416fbe8b16..2cc6d66549a6c0c50a6c975a83682894b709803c 100644 --- a/pkg/web/webui_blob.go +++ b/pkg/web/webui_blob.go @@ -30,6 +30,7 @@ type BlobData struct { ShowSource bool ActiveTab string ServerName string + IsCommitHash bool } // repoBlob handles file content view. @@ -55,7 +56,7 @@ func repoBlob(w http.ResponseWriter, r *http.Request) { refAndPath := vars["refAndPath"] ref, path := parseRefAndPath(gr, refAndPath) - refObj, err := resolveAndBuildRef(gr, ref) + refObj, isCommitHash, err := resolveAndBuildRef(gr, ref) if err != nil { logger.Debug("failed to resolve ref or commit", "repo", repo.Name(), "ref", ref, "err", err) renderNotFound(w, r) @@ -112,6 +113,7 @@ func repoBlob(w http.ResponseWriter, r *http.Request) { ShowSource: showSource, ActiveTab: "tree", ServerName: cfg.Name, + IsCommitHash: isCommitHash, } renderHTML(w, "blob.html", data) @@ -134,7 +136,7 @@ func repoBlobRaw(w http.ResponseWriter, r *http.Request) { refAndPath := vars["refAndPath"] ref, path := parseRefAndPath(gr, refAndPath) - refObj, err := resolveAndBuildRef(gr, ref) + refObj, _, err := resolveAndBuildRef(gr, ref) if err != nil { logger.Debug("failed to resolve ref or commit", "repo", repo.Name(), "ref", ref, "err", err) renderNotFound(w, r) diff --git a/pkg/web/webui_commits.go b/pkg/web/webui_commits.go index 082445bee01d0c8323a635f641f130b6fd0b0c02..6898ea3ddda7fd299145000806f32dd529e61338 100644 --- a/pkg/web/webui_commits.go +++ b/pkg/web/webui_commits.go @@ -46,7 +46,7 @@ func repoCommits(w http.ResponseWriter, r *http.Request) { return } - refObj, err := resolveAndBuildRef(gr, ref) + refObj, _, err := resolveAndBuildRef(gr, ref) if err != nil { logger.Debug("failed to resolve ref or commit", "repo", repo.Name(), "ref", ref, "err", err) renderNotFound(w, r) diff --git a/pkg/web/webui_git.go b/pkg/web/webui_git.go index a48d8f174ce1716e9f4ff994bb9a31de41c57f37..bc4aebb335eabd1939fca69c7741b57dd2cc284c 100644 --- a/pkg/web/webui_git.go +++ b/pkg/web/webui_git.go @@ -78,10 +78,11 @@ func parseRefAndPath(gr *git.Repository, refAndPath string) (ref string, path st } // resolveAndBuildRef resolves a ref or hash and builds a git.Reference object. -func resolveAndBuildRef(gr *git.Repository, refOrHash string) (*git.Reference, error) { +// Returns the reference, whether it's a commit hash (vs named ref), and any error. +func resolveAndBuildRef(gr *git.Repository, refOrHash string) (*git.Reference, bool, error) { hash, isRef, err := resolveRefOrHash(gr, refOrHash) if err != nil { - return nil, err + return nil, false, err } refSpec := refOrHash @@ -100,7 +101,7 @@ func resolveAndBuildRef(gr *git.Repository, refOrHash string) (*git.Reference, e ID: hash, Refspec: refSpec, }, - }, nil + }, !isRef, nil } // FetchRefsPaginated efficiently fetches a paginated subset of refs sorted by date. diff --git a/pkg/web/webui_tree.go b/pkg/web/webui_tree.go index ba8d2d2c9008c6c33fe4e31d1c821e187c196d04..d8398b86b448cb3be87cd6f9e452f75b8ec5bcc2 100644 --- a/pkg/web/webui_tree.go +++ b/pkg/web/webui_tree.go @@ -19,6 +19,7 @@ type TreeData struct { Entries git.Entries ActiveTab string ServerName string + IsCommitHash bool } func repoTree(w http.ResponseWriter, r *http.Request) { @@ -49,7 +50,7 @@ func repoTree(w http.ResponseWriter, r *http.Request) { } } - refObj, err := resolveAndBuildRef(gr, ref) + refObj, isCommitHash, err := resolveAndBuildRef(gr, ref) if err != nil { logger.Debug("failed to resolve ref or commit", "repo", repo.Name(), "ref", ref, "err", err) renderNotFound(w, r) @@ -82,6 +83,7 @@ func repoTree(w http.ResponseWriter, r *http.Request) { Entries: entries, ActiveTab: "tree", ServerName: cfg.Name, + IsCommitHash: isCommitHash, } renderHTML(w, "tree.html", data)