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.
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/server.go +3
| @@ -156,6 +156,7 @@ func New(cfg *config.Config, binPath string, log *slog.Logger) (*Server, error) | |||
| 156 | 156 | Proxy: proxy, SSH: ssh, Web: wp, Log: log, | |
| 157 | 157 | } | |
| 158 | 158 | wp.AllowCI = s.allowContributorCI | |
| 159 | wp.EnsureCandidate = s.ensureCandidateForWeb | ||
| 159 | 160 | wp.RenameRepo = inst.RenameRepo | |
| 160 | 161 | wp.DeleteRepo = inst.DeleteRepo | |
| 161 | 162 | // Sites are opt-in: without a pages domain there is no host to serve them on, | |
| @@ -177,6 +178,8 @@ func New(cfg *config.Config, binPath string, log *slog.Logger) (*Server, error) | |||
| 177 | 178 | go s.watchRoster(s.ctx) | |
| 178 | 179 | go s.watchSpool(s.ctx) | |
| 179 | 180 | go s.watchRefs(s.ctx) | |
| 181 | go s.watchCandidates(s.ctx) | ||
| 182 | go s.watchAutoMerges(s.ctx) | ||
| 180 | 183 | go s.watchLeases(s.ctx) | |
| 181 | 184 | // An instance that stored objects before they were scoped by repository needs its | |
| 182 | 185 | // links, and nobody reads an upgrade note. This is idempotent and deletes nothing. | |