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/git/vole.git

Write over SSH with a registered key:

git clone ssh://git@0.0.0.0:2222/vole.git

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

Tighten up the issue and change review pages

564acd4b6de233740f3c19e297c4655e8952d40c · Keenan Nemetz · 15d ago · parent a464f892

Tighten up the issue and change review pages

- Move contributor-branch CI approval from the Runs tab to the change
  request header, and return the allow form to that request.
- Put issue and change actions in the page header, right aligned with the
  title, instead of duplicating them in the sidebar.
- Drop sidebar details that repeated the header: state, author, age and
  reference. Keep labels, assignees, review base/head, approvals and checks.
- Consolidate approval status into one section and remove the empty-state
  line now covered by the count.
- Fix diff row spacing: keep pre-wrap on the code column only, so template
  whitespace in the gutter cells no longer creates blank lines.

Update the contributor CI test, the HTMX fragment expectations and the
documentation that named the Runs tab as the approval location.

server/issues_changes_test.go −18

@@ -331,15 +331,6 @@ func TestIssueSidebarFragmentsUpdateWithHtmx(t *testing.T) {
331 331 t.Fatalf("labels response is not the expected fragment:\n%s", body)
332 332 }
333 333
334 // State: closing returns the state fragment with the reopen action.
335 resp, body = f.htmxPost(t, "/r/"+f.repo+"/issues/"+id+"/state", cookie, url.Values{
336 "csrf": {sess.CSRF}, "state": {"closed"},
337 })
338 if resp.StatusCode != http.StatusOK || !strings.Contains(body, `id="issue-state"`) ||
339 !strings.Contains(body, "Reopen issue") {
340 t.Fatalf("state response is not the expected fragment (%d):\n%s", resp.StatusCode, body)
341 }
342
343 334 // Assignees: the replacement fragment seeds the token input and keeps the
344 335 // save control.
345 336 resp, body = f.htmxPost(t, "/r/"+f.repo+"/issues/"+id+"/assignees", cookie, url.Values{
@@ -403,15 +394,6 @@ func TestRequestSidebarAndDiscussionUpdateWithHtmx(t *testing.T) {
403 394 !strings.Contains(body, "Review note over HTMX.") {
404 395 t.Fatalf("discussion response is not the expected fragment (%d):\n%s", resp.StatusCode, body)
405 396 }
406
407 // Closing swaps the sidebar and changes the action to reopen.
408 resp, body = f.htmxPost(t, "/r/"+f.repo+"/requests/"+id+"/state", ownerCookie, url.Values{
409 "csrf": {ownerSess.CSRF}, "state": {"closed"},
410 })
411 if resp.StatusCode != http.StatusOK || !strings.Contains(body, `id="request-sidebar"`) ||
412 !strings.Contains(body, "Reopen change") {
413 t.Fatalf("state response is not the expected sidebar (%d):\n%s", resp.StatusCode, body)
414 }
415 397 }
416 398
417 399 func (f *fixture) htmxGet(t *testing.T, path, cookie string) (*http.Response, string) {