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.
Fold admin work into repository settings and a Users page
9579c1f976254fdeb2ec73d4016db5b25c7921c1 · Keenan Nemetz · 14d ago · parent 381d6aac
Fold admin work into repository settings and a Users page Remove the combined /admin tabs. Per-repository access rules now live on the repository's Settings page, visible to instance admins while repository details and the danger zone stay with repository admins. User management moves to /users, linked from the top navigation only for instance admins, and repository creation moves to /repos/new. Align the invite, danger-zone, and settings forms with the shared card-and-actions layout, and make settings section headings consistent.
server/web/home_test.go +11−13
| @@ -65,19 +65,17 @@ func TestPaginateClampsToTheFeed(t *testing.T) { | |||
| 65 | 65 | ||
| 66 | 66 | func TestPageSection(t *testing.T) { | |
| 67 | 67 | cases := map[string]string{ | |
| 68 | "/": "repos", | ||
| 69 | "/r/demo": "repos", | ||
| 70 | "/r/demo/issues": "repos", | ||
| 71 | "/runners": "runners", | ||
| 72 | "/activity": "activity", | ||
| 73 | "/admin": "admin-repos", | ||
| 74 | "/admin/repos/new": "admin-repos", | ||
| 75 | "/admin/repos/demo/access": "admin-repos", | ||
| 76 | "/admin/users": "admin-users", | ||
| 77 | "/admin/users/keenan": "admin-users", | ||
| 78 | "/account": "account", | ||
| 79 | "/login": "", | ||
| 80 | "/status": "", | ||
| 68 | "/": "repos", | ||
| 69 | "/r/demo": "repos", | ||
| 70 | "/r/demo/issues": "repos", | ||
| 71 | "/runners": "runners", | ||
| 72 | "/activity": "activity", | ||
| 73 | "/repos/new": "repos", | ||
| 74 | "/users": "users", | ||
| 75 | "/users/keenan": "users", | ||
| 76 | "/account": "account", | ||
| 77 | "/login": "", | ||
| 78 | "/status": "", | ||
| 81 | 79 | } | |
| 82 | 80 | for path, want := range cases { | |
| 83 | 81 | if got := pageSection(path); got != want { | |