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.

Make change requests follow branches and allow base retargeting

e050e14a64f6f19c1b1478c4c073d690ef3d3129 · Keenan Nemetz · 13d ago · parent 59464445

Make change requests follow branches and allow base retargeting

A request opened from a branch now follows it: post-receive moves the
request's head to the new tip after an accepted push, so approvals and
checks that named the old tip stop counting. Approvals stay bound to an
exact base and commit; the approval writers now require the base and head
the approver saw, so a push or retarget cannot silently approve a target
nobody reviewed. Merged requests freeze the reviewed head.

Add `vole change update --base` and a Change base control for stacked
requests. A new base changes the diff and therefore invalidates approvals,
which is what retargeting an upper request after its lower branch lands
needs. Base names may now contain slashes.

Also fix a second-boundary flake in the landing test.

docs/cli.md +7−2

@@ -176,7 +176,7 @@ vole change show <id>
176 176 vole change comment <id> [-m <text> | -F <file>] [--path <file> --line <n> [--side new|old]] [--reply-to <comment-id>]
177 177 vole change edit-comment <id> <comment-id> [-m <text> | -F <file>]
178 178 vole change rm-comment <id> <comment-id>
179 vole change update <id> [--head <rev>] [--closes <issue>]... [--no-closes]
179 vole change update <id> [--base <branch>] [--head <rev>] [--closes <issue>]... [--no-closes]
180 180 vole change approve <id> [--as <account>]
181 181 vole change close <id>
182 182 vole change reopen <id>
@@ -186,7 +186,12 @@ vole change reopen <id>
186 186 approval is only accepted from the account it names. `--closes` takes a full
187 187 issue id (repeatable, comma lists accepted) and names the issues landing the
188 188 request closes; it replaces the list on `update`, and `--no-closes` clears it.
189 See [Change requests](change-requests.md).
189 A request opened with `--head <branch>` follows that branch: a later push moves its
190 head and invalidates the old approvals and checks. `--head <commit>` (or a tag)
191 pins the request to that commit instead. `--base <branch>` on `update` retargets an
192 open request, which is how a stacked request moves onto `main` after the branch
193 below it lands; approvals named the old base and stop counting. See
194 [Change requests](change-requests.md).
190 195
191 196 ## Releases
192 197