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/web/web.go +4
| @@ -46,6 +46,10 @@ type Web struct { | |||
| 46 | 46 | // AllowCI is the server's queue-side operation: record a maintainer's approval | |
| 47 | 47 | // for one contributor tip and enqueue it. The web owns the form and ACL check. | |
| 48 | 48 | AllowCI func(repo, ref, sha, approver string) error | |
| 49 | // EnsureCandidate publishes and queues the combined result for a request. The | ||
| 50 | // merge handler calls it before arming so the first look does not wait for the | ||
| 51 | // reconciler, and so a Merge click is useful even before the next tick. | ||
| 52 | EnsureCandidate func(repo, request string) error | ||
| 49 | 53 | // RenameRepo and DeleteRepo are the instance operations that also move the | |
| 50 | 54 | // index, queue, LFS namespace, and locks. The web owns the form and ACL check. | |
| 51 | 55 | // DeleteRepo takes the account so the deletion is recorded against it. | |