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.
Test the merge result before landing it
e5478085e5b53a2892d0649d6f07c6f0a5653378 · Keenan Nemetz · 11d ago · parent db5e4382
Test the merge result before landing it A protected branch could receive a non-fast-forward landing whose tree was never built: the gate asked for checks on the request head, and the merge commit was made at landing time. A pushed merge with the right parents but extra content was accepted too. Publish the merge commit under refs/vole/candidates/, test it as the base branch, and make the gate require its results. Approvals name the head and the base branch, so a moved base retests without a new approval. A merger who clicks while that run is still going waits for it instead of clicking again. A pushed merge commit now has to carry exactly the tree a clean merge would produce. Closes: 01M61QQ56TESQ1HTMB1Z5C3733
server/routes.go +1
| @@ -153,6 +153,7 @@ func (s *Server) repoRoutes(mux *http.ServeMux) { | |||
| 153 | 153 | mux.HandleFunc("GET /r/{name}/requests/{id}/comment-form", w.RequestCommentForm) | |
| 154 | 154 | mux.HandleFunc("POST /r/{name}/requests/{id}/approve", w.ApproveRequest) | |
| 155 | 155 | mux.HandleFunc("POST /r/{name}/requests/{id}/merge", w.MergeRequest) | |
| 156 | mux.HandleFunc("POST /r/{name}/requests/{id}/merge/cancel", w.CancelMerge) | ||
| 156 | 157 | mux.HandleFunc("POST /r/{name}/requests/{id}/comments", w.AddRequestComment) | |
| 157 | 158 | mux.HandleFunc("POST /r/{name}/requests/{id}/comments/{comment}/edit", w.EditRequestComment) | |
| 158 | 159 | mux.HandleFunc("POST /r/{name}/requests/{id}/comments/{comment}/delete", w.DeleteRequestComment) | |