Sign in

Search issue titles and bodies, change requests and comments. Private repositories you cannot read are not included.

vole
Clone

Read only, no credentials:

https://rodent.software/vole.git

Write over SSH with a registered key:

git clone ssh://git@rodent.software:2222/vole.git

A free and open-source forge that lives in your Git repo.

Render the styled error page for every miss and failure

e84a66f5b53c269d8b0c207d0335b537e1646cb3 · Keenan Nemetz · 15d ago · parent f6f4b1db

Render the styled error page for every miss and failure

Handler-level 404s now use the same view as the catch-all, including unknown
detail resources and download paths. Internal 500s render the shared error
layout and log the detail instead of exposing it. A panic before the first
byte is recovered into that page; a partial response is left to net/http.

Also mark label/assignee triage and inline review comments done in the UI plan,
where the slice order was stale.

server/web/requests.go +3−3

@@ -77,7 +77,7 @@ func (w *Web) Requests(rw http.ResponseWriter, r *http.Request) {
77 77 }
78 78 list, err := metadata.LoadRequests(m.Git(), metadata.Ref)
79 79 if err != nil {
80 http.Error(rw, "cannot read change requests: "+err.Error(), http.StatusInternalServerError)
80 w.serverError(rw, r, "cannot read change requests: "+err.Error())
81 81 return
82 82 }
83 83 state := strings.TrimSpace(r.URL.Query().Get("state"))
@@ -627,7 +627,7 @@ func (w *Web) RequestCommentForm(rw http.ResponseWriter, r *http.Request) {
627 627 }
628 628 req, err := metadata.GetRequest(m.Git(), r.PathValue("id"))
629 629 if err != nil {
630 http.NotFound(rw, r)
630 w.notFound(rw, r)
631 631 return
632 632 }
633 633 target := commentTargetFromQuery(r)
@@ -685,7 +685,7 @@ func (w *Web) RequestView(rw http.ResponseWriter, r *http.Request) {
685 685 }
686 686 req, err := metadata.GetRequest(m.Git(), r.PathValue("id"))
687 687 if err != nil {
688 http.NotFound(rw, r)
688 w.notFound(rw, r)
689 689 return
690 690 }
691 691