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.
Build out change review and threaded discussions
f6f4b1db24292d1df877680714952a9c568e2b78 · Keenan Nemetz · 15d ago · parent 564acd4b
Build out change review and threaded discussions - Add Conversation, Files and Runs tabs to change requests. Files uses the code-browser shape with a changed-file tree and one selected-file diff; Runs lists the head commit's workflow results. - Show anchored review comments beneath the line, with a collapsed excerpt read from the exact blob that was reviewed, and return posted anchors to their line note. - Add comment threads: any comment can be replied to, the UI flattens the descendants under one root, reply context links back to the parent, and reply targets feed a single composer at the foot of the discussion. - Collapse reply groups while keeping the root visible, and scroll to the composer when Reply is selected. - Add comment context menus with Reply, Copy text, Copy link, Edit and Delete. Add web edit/delete routes with author or admin checks; deletion leaves a tombstone so replies keep their thread. - Support --reply-to in the issue and change CLI commands, and treat a missing parent as a tombstone rather than an invalid tree. - Fix the diff comment gutter, action button colours, reply labels, and keep the Files tree and diff pane aligned. Update metadata validation, web templates, CSS, JavaScript, tests, and the CLI/change-request/issue docs.
server/web/diff.go +9−5
| @@ -7,9 +7,11 @@ package web | |||
| 7 | 7 | // as cut off rather than as a smaller change. | |
| 8 | 8 | ||
| 9 | 9 | import ( | |
| 10 | "html/template" | ||
| 10 | 11 | "regexp" | |
| 11 | 12 | "strconv" | |
| 12 | 13 | "strings" | |
| 14 | "time" | ||
| 13 | 15 | ) | |
| 14 | 16 | ||
| 15 | 17 | type diffFile struct { | |
| @@ -41,15 +43,17 @@ type diffLine struct { | |||
| 41 | 43 | NewNo int | |
| 42 | 44 | Text string | |
| 43 | 45 | // Comments are review comments anchored to this line, filled in by the request | |
| 44 | // view rather than by the parser: a marker links to the thread, it does not | ||
| 45 | // duplicate it. | ||
| 46 | // view rather than by the parser. They are rendered beneath the line so the | ||
| 47 | // reviewer can read the note where it applies. | ||
| 46 | 48 | Comments []diffComment | |
| 47 | 49 | } | |
| 48 | 50 | ||
| 49 | // diffComment is the marker for a review comment on one line. | ||
| 51 | // diffComment is one review comment shown beneath the line it is anchored to. | ||
| 50 | 52 | type diffComment struct { | |
| 51 | ID string | ||
| 52 | Author string | ||
| 53 | ID string | ||
| 54 | Author string | ||
| 55 | Created time.Time | ||
| 56 | Body template.HTML | ||
| 53 | 57 | } | |
| 54 | 58 | ||
| 55 | 59 | var ( | |