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
client/remote.go +18
| @@ -261,6 +261,24 @@ func (a *Actor) Page(kind, id, anchor string) string { | |||
| 261 | 261 | return u | |
| 262 | 262 | } | |
| 263 | 263 | ||
| 264 | // ChangeStatus asks the instance whether the combined result for a change request | ||
| 265 | // has been tested. It answers one line per fact ("combined: ...", "merge: ..."), | ||
| 266 | // which the show command prints as it received them. | ||
| 267 | func ChangeStatus(gitDir, remote, id string) (string, error) { | ||
| 268 | host, port, path, err := SSHTarget(gitDir, remote) | ||
| 269 | if err != nil { | ||
| 270 | return "", err | ||
| 271 | } | ||
| 272 | if RepoNameFromPath(path) == "" { | ||
| 273 | return "", fmt.Errorf("%s does not name a repository", remote) | ||
| 274 | } | ||
| 275 | out, err := RunSSH(host, port, "vole-change-status "+path+" "+id) | ||
| 276 | if err != nil { | ||
| 277 | return "", err | ||
| 278 | } | ||
| 279 | return strings.TrimSpace(out), nil | ||
| 280 | } | ||
| 281 | |||
| 264 | 282 | // MergeChange asks the instance to land a change request, and returns the server's | |
| 265 | 283 | // one-line answer. | |
| 266 | 284 | // | |