checkout: detect remote stack from current branch - #475
Conversation
There was a problem hiding this comment.
Pull request overview
Adds best-effort remote stack detection to interactive checkout.
Changes:
- Detects a unique remote stack containing the current branch.
- Adds paginated stack retrieval and tests.
- Updates checkout documentation.
Show a summary per file
| File | Description |
|---|---|
README.md |
Documents auto-detection. |
cmd/checkout.go |
Implements detection and confirmation. |
cmd/checkout_picker_test.go |
Tests detection behavior. |
internal/github/github.go |
Paginates stack listing. |
internal/github/github_test.go |
Tests pagination. |
docs/src/content/docs/reference/cli.md |
Updates CLI reference. |
Review details
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
- Files reviewed: 6/6 changed files
- Comments generated: 3
- Review effort level: Balanced
ktravers
left a comment
There was a problem hiding this comment.
Left one question just for my own understanding, otherwise looks good 🚀
| // matchingRemoteStacksForBranch returns picker-eligible remote stacks that | ||
| // contain branch exactly once per stack. Empty and fully merged stacks are not | ||
| // actionable and are omitted, matching the picker. | ||
| func matchingRemoteStacksForBranch(remote []github.RemoteStack, branch string) []*github.RemoteStack { |
There was a problem hiding this comment.
A branch can only belong to one stack, right? 🤔 Or does this cover the default branch as well, which is the one branch that can match many stacks?
There was a problem hiding this comment.
Technically the limitation is only at a PR-level to only have a PR in one stack. It is possible to reuse a branch name, which is how you'd end up with multiple stacks matching for a branch. This can happen if a PR was closed and then opened for the same head branch, or if you open a new PR with a different base-head combo.
gh stack checkout(no args) to auto-detect and checkout the stack for the current branch #426When
gh stack checkoutruns without a target, it now checks whether the current branch is not part of a local stack but belongs to an active stack on GitHub. If found, it offers to check out that stack locally.The lookup remains best-effort: network failures, no or multiple matches, and declined confirmation fall through to the existing picker. Fully merged stacks are ignored, Ctrl+C still aborts, and non-interactive behavior is unchanged.
Stack created with GitHub Stacks CLI • Give Feedback 💬