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)