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)