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.
Search every issue, change and comment from the top bar
6c03e6d3243d31a82210cc7bc689ab3e28226b6c · Keenan Nemetz · 10d ago · parent 389317ee
Search every issue, change and comment from the top bar The top bar's search now opens a command palette instead of a text field. The dialog asks the same index and visibility rule as /search, so private repositories stay out, and it answers with a short list plus a link to the full results. A button that looks like the old input launches it, labelled with the platform's shortcut; Ctrl K or Cmd K works anywhere. The bar's contents also line up with the page column now, and Home is marked current only on the landing page rather than on every repository page.
server/web/page.go +6−4
| @@ -54,12 +54,14 @@ type Page struct { | |||
| 54 | 54 | memo *requestMemo | |
| 55 | 55 | } | |
| 56 | 56 | ||
| 57 | // pageSection maps a request path to the global destination it belongs to. A | ||
| 58 | // repository page belongs to Repositories: the repository's own tabs carry the | ||
| 59 | // finer context. | ||
| 57 | // pageSection maps a request path to the global destination it belongs to. The | ||
| 58 | // landing page is Home; a repository page belongs to Repositories, which is not | ||
| 59 | // the same place, so the bar does not mark Home current there. | ||
| 60 | 60 | func pageSection(path string) string { | |
| 61 | 61 | switch { | |
| 62 | case path == "/" || path == "/repos/new" || strings.HasPrefix(path, "/r/"): | ||
| 62 | case path == "/": | ||
| 63 | return "home" | ||
| 64 | case path == "/repos/new" || strings.HasPrefix(path, "/r/"): | ||
| 63 | 65 | return "repos" | |
| 64 | 66 | case strings.HasPrefix(path, "/activity"): | |
| 65 | 67 | return "activity" | |