github / github/gh-stack

unstack shows a generic/incorrect error instead of the real API rejection reason

未关闭
#372 1 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看
bug topic: stack management
主要语言
Go
星标
1.5k
派生
70
平均合并
1 天 8 小时
30 天内合并 PR
7

描述

## Summary

`gh stack unstack ` fails on a stack containing merged PRs, but the plain (non-debug) error message names an unrelated cause. The actual server-side reason is only visible with `GH_DEBUG=api`.

## Repro

1. Create a stack with `gh stack link` (or `submit`), e.g. `main <- a <- b <- c <- d <- e`.
2. Merge `a` and `b` (via merge queue or a normal merge — doesn't matter which).
3. Run `gh stack unstack ` on that stack.

## Actual

```
⚠ Some pull requests are queued for merge or have auto-merge enabled and remain stacked on GitHub
The stack was left in place — local tracking is unchanged
```

I verified via `gh api graphql` that **none** of the stack's PRs had `autoMergeRequest` set or a `mergeQueueEntry` — so the stated reason doesn't match reality.

Running the identical command with `GH_DEBUG=api gh stack unstack ` shows the real HTTP exchange:

```
POST /repos/{owner}/{repo}/stacks/{id}/unstack
< HTTP/2.0 422 Unprocessable Entity
{
"message": "Pull requests #.. , #.. cannot be removed from this stack",
"documentation_url": "https://docs.github.com/rest/pulls/stacks#remove-pull-requests-from-a-pull-request-stack",
"status": "422"
}
```

Interestingly, in the `GH_DEBUG=api` run the CLI's own final stderr line correctly echoed this specific message (`✗ Unstacking not allowed: Pull requests #.., #.. cannot be removed from this stack`) — a materially different, and accurate, explanation compared to the generic message shown without debug logging.

## Expected

The non-debug error message should reflect the actual REST API rejection (a stack can't be unstacked once any of its PRs have merged), not a generic, unrelated "queued for merge / auto-merge enabled" message.

## Environment

`gh-stack` version 0.0.8, installed via `gh extension install github/gh-stack`.

贡献指南

打开贡献指南

调研方向

Start by reproducing `gh stack unstack ` on a stack with merged pull requests, comparing normal output with `GH_DEBUG=api`. Trace the unstack error handling and the REST API's 422 response; done means the non-debug output reports the actual rejection reason rather than the unrelated queued-for-merge message.

由索引模型根据 Issue 内容生成。

评估

技术栈
github, go
领域
api, cli
Issue 类型
缺陷
难度
3/5
预计耗时
1-2 天
活跃度
活跃
描述清晰度
基本清楚
新手友好度
67/100

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。