·
33 commits
to main
since this release
Immutable
release. Only release title and notes can be modified.
jj-stack 0.1.5 completes merges in one command, including through a merge queue, and explains what still blocks a PR that has approvals and passing checks.
Breaking changes
jj-stack mergeno longer returns as soon as GitHub queues the PRs. It waits for the merge to finish, then fetches trunk, removes the merged changes from your local stack, rebases the rest, and updates their PRs, so a queued merge no longer needs a separatejj-stack sync. Scripts that relied on the early return must pass--no-waitand runjj-stack sync <head-change-id>in a later step once GitHub has merged.
Highlights
- While a merge queue is working,
jj-stack mergeshows each PR's queue position, GitHub's time estimate, and the state of the queue's checks. Press Ctrl-C to stop waiting, or pass--no-waitto return as soon as GitHub accepts the request; neither cancels it. Rerun the samejj-stack mergeto resume waiting, or runjj-stack sync <head-change-id>after GitHub finishes. - If GitHub removes a PR from the merge queue,
jj-stack mergestops without changing anything locally, reports GitHub's reason, links to the checks on the queue's temporary merge commit (they never appear on the PR's own Checks tab), and names the next step:jj-stack sync <head-change-id>when a lower PR already merged, otherwise the samejj-stack mergeagain. jj-stack viewandjj-stack listreport GitHub's merge state separately from review decisions and checks. An approved PR with passing checks can showmerge blocked, for example while review threads remain unresolved, andreview requiredappears when GitHub still requires a review.jj-stack view --verboselists unresolved review threads and failed or pending checks with links. In JSON, changes gainmerge_state_statusand thereview_requiredstatus, andview --verbose --jsonaddsmerge_detailswithunresolved_threadsandchecks, ormerge_details_errorwhen the details could not be read.- If your working copy is on a change that just merged,
jj-stack sync(including the automatic sync aftermerge) moves it to a new empty change on trunk before removing the merged change, instead of stopping and asking you to runjj new 'trunk()'first. Only a different workspace sitting on the merged change still stops the sync.
Fixes
- After a merge queue lands the bottom of a stack and drops the PR above it, GitHub leaves that PR at its submitted commit on its old base.
jj-stack syncnow rebases the remaining changes onto trunk and retargets that PR, instead of stopping with "Imported pull request heads no longer form the expected stack". - When someone pushed to your PR branch outside jj-stack and GitHub then merged the PR,
jj-stack syncstill stops rather than delete your local change, but its hint now names the commit that merged and how to resolve it: compare the PR's files withjj diff -r <change-id>, then eitherjj abandon <change-id>and runjj-stack cleanup, or runjj-stack unstack --local <change-id>and submit again. The old hint blamed yourtrunk()revset. jj-stack submitexplains when GitHub refuses to add a PR with auto-merge enabled to a stack and tells you to disable auto-merge on that PR first, instead of a generic retry hint that led back to the same failure.- When a repository rule rejects the PR-branch push, such as an org ruleset that blocks force pushes or requires signatures, the error shows Git's report of each rejected ref and GitHub's reason and says that no PR branch changed, instead of printing the underlying push command line.
- Recovery hints fill in the selected head's short change ID or the linked PR number when the command knows it, instead of placeholders such as
HEADorCHANGE, and use<change-id>and<pr>otherwise, matching the guides.jj-stack unstackreports an untrusted saved link with the same explanation, hint, and exit code as the other commands. - Several errors now say what happened and what to do next. An undescribed change names
jj describe; immutable, merge-commit, and not-on-trunk changes gain hints; the signed-commit stop explains that merging can discard signatures and that a choice is only needed when the repo allows several methods; and the closed-PR stops insubmitall namejj-stack cleanup --pull-request <pr>. Authentication failures mentionGITHUB_TOKEN,GH_TOKEN, and yourghlogin rather thanGITHUB_TOKENalone. - Other jj-stack commands in the repo no longer fail with
jj-stack submit is already running in this repowhilesubmit --edithas your editor open or a--describe-withhelper is running. Submit reads the stack and GitHub again once the editor closes; if the stack changed meanwhile, it stops before pushing anything, with the usual--resume-edithint. --helpoutput has its color highlighting back and is available even when jj configuration cannot be read. Settingui.color=alwaysin jj no longer prevents jj-stack from reading your configuration.jj-stack view --verboseshows a PR's details only when it has unresolved threads or check results to report, is blocked without any, or could not be inspected, instead of one block per healthy PR. Its advisory rows name the head's short change ID rather than a full 32-character ID.- Terminal hyperlinks are underlined so they are recognizable as links.
jj-stack mergeno longer prints aTrunk:line in its result; each action row already names the base branch.