Sign in

Search issue titles and bodies, change requests and comments. Private repositories you cannot read are not included.

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.