Commit 8b73af24fa
8b73af24faa9b2d2fbac94cb9fcbb3bee3384b01
parent: c16661f662
Verified · cmc ci/build: success ci/test: success
cmc <hello@cleberg.net> · 2026-09-29 03:35 UTC
wiki, changelog: mr merge --when-ready
Closes #289
Layout: unified · split
.gitbay/wiki/Parity.org
+1
| @@ -40,6 +40,7 @@ browser-only and the iOS build screen unable to say more than the log. |
| 40 | 40 | | resolve a thread | yes | yes | yes | |
| 41 | 41 | | comment on a diff line | yes | yes | yes | |
| 42 | 42 | | merge (all strategies) | yes | yes | yes | |
| 43 | | merge when ready, cancel | yes | yes | no | |
| 43 | 44 | | close | yes | yes | yes | |
| 44 | 45 | | close in favour of another | yes | yes | yes | |
| 45 | 46 | | create | yes | yes | yes | |
.gitbay/wiki/Users.org
+28
| @@ -453,6 +453,7 @@ gitbay mr checkout 4 # local branch mr/4 from the MR head |
| 453 | 453 | gitbay mr review 4 --approve # or --request-changes / --comment |
| 454 | 454 | gitbay mr label 4 --add bug --remove wontfix |
| 455 | 455 | gitbay mr merge 4 [--strategy ff|merge|squash|rebase] |
| 456 | gitbay mr merge 4 --when-ready # merge once the gates pass; --cancel dequeues |
| 456 | 457 | gitbay mr close 4 |
| 457 | 458 | #+end_src |
| 458 | 459 | |
| @@ -511,6 +512,33 @@ merge= names every unmet gate at once rather than the first. =mr |
| 511 | 512 | review= says when a verdict is advisory, which it is from anyone |
| 512 | 513 | without write access: the gates do not count it. |
| 513 | 514 | |
| 515 | =mr merge <n> --when-ready= queues the merge and merges once the gates |
| 516 | pass, or at once if they already do. It is tried again when a status |
| 517 | is reported on the head, a review is submitted, a thread is resolved, |
| 518 | the request is marked ready, and the source branch is pushed; a push |
| 519 | by someone who can write to the target keeps it queued, and the new |
| 520 | head has to pass on its own. The merge is made as the user who queued |
| 521 | it, with their rights checked at that moment. Anything the queuer can |
| 522 | fix (an unmet gate, a conflict, a branch behind a |
| 523 | =require_signed_commits= target that needs a rebase) leaves it queued |
| 524 | with the reason shown on =mr show= and the page. |
| 525 | |
| 526 | The queue is bound to the credential it was made with. It is dequeued, |
| 527 | with the reason on the request's timeline, when: |
| 528 | |
| 529 | - the queuer loses write access or their account is disabled; |
| 530 | - the SSH key or API token it was queued with is removed, revoked, |
| 531 | expires, or no longer has full scope (a merge queued from the web |
| 532 | rests on the account alone); |
| 533 | - someone who cannot write to the target pushes to the source branch |
| 534 | or retargets the request; |
| 535 | - the source branch is deleted, or the request is closed. |
| 536 | |
| 537 | An expiring key or token cannot queue a merge; use one without an |
| 538 | expiry, or the web. =mr merge <n> --cancel= dequeues without closing. |
| 539 | =merge= and =squash= are refused at queue time on a |
| 540 | =require_signed_commits= repository. |
| 541 | |
| 514 | 542 | Those gates apply to =mr merge=. A direct push to a protected branch |
| 515 | 543 | passes none of them until =require-mr on=: then an existing protected |
| 516 | 544 | branch refuses every push, including =repo commit-file= and the web |
CHANGELOG.org
+12
| @@ -29,6 +29,18 @@ anything beyond "replace the binary and restart" is needed. |
| 29 | 29 | the scratch-repository test: a build failing SSH logins must not |
| 30 | 30 | lock the runner out. Run it before pointing the runner back at real |
| 31 | 31 | repositories; the Admin page has the steps and the rollback. (#260) |
| 32 | - =mr merge <n> --when-ready= queues a merge until the gates pass, |
| 33 | merging as the queuing user with their rights checked then; tried on |
| 34 | a status, a review, a resolved thread, =mr ready= and a push to the |
| 35 | source branch. A refusal the queuer can fix, such as a branch behind |
| 36 | a =require_signed_commits= target, keeps it queued with the reason |
| 37 | on =mr show= and the page. The queue is bound to the key or token it |
| 38 | was made with: removing, revoking, expiring or narrowing it |
| 39 | dequeues, as do losing write access, a push or retarget by someone |
| 40 | who cannot write to the target, deleting the source branch, and |
| 41 | closing. An expiring credential cannot queue. =--cancel= dequeues. |
| 42 | =mr show=, =mr list= and the dashboard carry =queued=. Migration |
| 43 | 0067 (#289). |
| 32 | 44 | |
| 33 | 45 | * v1.37.0 — 2026-09-29 |
| 34 | 46 | |