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 the forge web UI
f09ef39efe44de693748053a7b596ef328fcf06b · Keenan Nemetz · 15d ago · parent 70b70264
Build out the forge web UI Turn the web surface into a compact, server-rendered forge with HTMX as the progressive dynamic layer. - Split templates and assets into embedded files; add a tokenised dark theme, Lucide icons, and vendored HTMX. - Add the repository Overview page and a separate chronological Activity feed with type filters and HTMX fragment updates. - Finish the issue and change workflows: create pages, comments, close/reopen, labels and assignees, approval, discussion, line-anchored review comments, and HTMX list filters. - Add syntax-highlighted blobs, contributor/statistics derivation, branch-aware code browsing, and a repository Runs list. - Add a loopback-only development login for local write testing, with explicit configuration and listener checks. - Extend tests for the new pages, fragments, labels, assignees, anchors, and development login.
server/web/commit.go +13−8
| @@ -39,16 +39,19 @@ func (w *Web) CommitView(rw http.ResponseWriter, r *http.Request) { | |||
| 39 | 39 | body, _ := g.CommitBody(sha) | |
| 40 | 40 | files := parseDiff(patch) | |
| 41 | 41 | added, removed := diffSummary(files) | |
| 42 | parents, _ := g.CommitParents(sha) | ||
| 42 | 43 | ||
| 43 | 44 | w.render(rw, "commit", struct { | |
| 44 | 45 | Page | |
| 45 | Name string | ||
| 46 | Commit git.Commit | ||
| 47 | Body string | ||
| 48 | Files []diffFile | ||
| 49 | Added int | ||
| 50 | Removed int | ||
| 51 | Truncated bool | ||
| 46 | Name string | ||
| 47 | Commit git.Commit | ||
| 48 | Body string | ||
| 49 | Files []diffFile | ||
| 50 | Added int | ||
| 51 | Removed int | ||
| 52 | Truncated bool | ||
| 53 | Parents []string | ||
| 54 | LineCommentURL string | ||
| 52 | 55 | }{ | |
| 53 | 56 | Page: w.page(r, m.Name+" · "+log[0].Subject), | |
| 54 | 57 | Name: m.Name, | |
| @@ -59,6 +62,8 @@ func (w *Web) CommitView(rw http.ResponseWriter, r *http.Request) { | |||
| 59 | 62 | Removed: removed, | |
| 60 | 63 | // A cut patch and a patch with nothing in it look the same to a parser; | |
| 61 | 64 | // the flag is what tells the reader which one they have. | |
| 62 | Truncated: truncated, | ||
| 65 | Truncated: truncated, | ||
| 66 | Parents: parents, | ||
| 67 | LineCommentURL: "", | ||
| 63 | 68 | }, 0) | |
| 64 | 69 | } | |