Detect merge queue status via the GitHub GraphQL API's mergeQueueEntry
field and temporarily skip queued branches in push, sync, and submit
commands. Unlike merged state (which is persisted permanently), queued
state is transient — held in-memory only via a json:"-" tagged field
on BranchRef. Each command run re-checks queue status from the API, so
if a PR is ejected from the queue it becomes active again on next run.
Changes:
- Add MergeQueueEntry to PullRequest GraphQL struct and PRDetails
- Add IsQueued()/IsSkipped()/QueuedBranches() to stack model
- Update ActiveBranches() family to exclude queued branches
- Skip queued branches in push, sync (rebase + push), and submit
- Add queued icon, style, and QUEUED state label in TUI view
- Add comprehensive tests for queued state handling
Closesgithub/pull-requests#24019
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Introduce Ops interface and MockOps for git operations, and ClientOps
interface with MockClient for GitHub API operations. This enables
command-level tests to inject mocks without changing production code.
- git.Ops interface wraps all 34 public git functions
- Package-level functions now delegate through a swappable ops variable
- SetOps()/CurrentOps() allow tests to inject MockOps
- github.ClientOps interface covers all Client methods
- MockClient provides configurable function-field test doubles
- All defaults return zero values; no-op for error returns
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>