From 2dabbf1200414953f0807931f3e115aa0fc9f5d1 Mon Sep 17 00:00:00 2001 From: cruldra Date: Mon, 19 Oct 2026 08:34:39 +1100 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B=20fix(vscode):=20GitHub=20?= =?UTF-8?q?=E5=B7=A5=E5=8D=95=E5=B7=B2=E8=A2=AB=E5=88=A0=E9=99=A4=EF=BC=88?= =?UTF-8?q?410=EF=BC=89=E6=97=B6=E6=8C=89=E4=B8=8D=E5=AD=98=E5=9C=A8?= =?UTF-8?q?=E5=A4=84=E7=90=86=EF=BC=8C=E4=B8=8D=E5=86=8D=E6=8A=A5=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- vscode/src/forge/github/provider.test.ts | 5 +++++ vscode/src/forge/github/provider.ts | 4 ++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/vscode/src/forge/github/provider.test.ts b/vscode/src/forge/github/provider.test.ts index 2811121..8ddba6c 100644 --- a/vscode/src/forge/github/provider.test.ts +++ b/vscode/src/forge/github/provider.test.ts @@ -148,6 +148,11 @@ describe('工单', () => { expect(await p.getIssue(9)).toBeNull() }) + it('工单已被删除(410)也返回 null', async () => { + stubFetch(new Response('{"message":"This issue was deleted"}', { status: 410 })) + expect(await provider().getIssue(5)).toBeNull() + }) + it('其它失败照常抛 ForgeApiError', async () => { stubFetch(new Response('boom', { status: 500 })) await expect(provider().getIssue(1)).rejects.toBeInstanceOf(ForgeApiError) diff --git a/vscode/src/forge/github/provider.ts b/vscode/src/forge/github/provider.ts index 96fbea2..a6c5e0c 100644 --- a/vscode/src/forge/github/provider.ts +++ b/vscode/src/forge/github/provider.ts @@ -251,14 +251,14 @@ export class GitHubProvider implements ForgeProvider { return raws.filter(raw => raw.pull_request === undefined).map(toIssue) } - /** 这个编号是 PR 时也返回 `null`。 */ + /** 工单不存在(404)、已被删除(GitHub 回 410)或这个编号其实是 PR 时都返回 `null`。 */ async getIssue(issueNumber: number): Promise { try { const raw = await this.rawIssue(issueNumber) return raw.pull_request === undefined ? toIssue(raw) : null } catch (err) { - if (err instanceof ForgeApiError && err.status === 404) + if (err instanceof ForgeApiError && (err.status === 404 || err.status === 410)) return null throw err }