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 }