From b5b2bda353e52b94b9f611446546cc271a9315d9 Mon Sep 17 00:00:00 2001 From: cruldra Date: Tue, 1 Sep 2026 20:04:55 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B=20fix(vscode):=20=E5=8F=91?= =?UTF-8?q?=E5=B8=83=E6=8C=89=E9=92=AE=E7=8A=B6=E6=80=81=E6=A3=80=E6=9F=A5?= =?UTF-8?q?=E4=B8=8D=E5=86=8D=E8=B7=91=E5=85=A8=E9=87=8F=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E6=AF=94=E5=AF=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- vscode/package.json | 2 +- vscode/src/git/release.ts | 8 ++++++-- vscode/src/panel/handlers/release.ts | 11 ++++++++--- vscode/test/git/release.test.ts | 2 -- 4 files changed, 15 insertions(+), 8 deletions(-) diff --git a/vscode/package.json b/vscode/package.json index 6229d15..5632250 100644 --- a/vscode/package.json +++ b/vscode/package.json @@ -2,7 +2,7 @@ "publisher": "clurdra", "name": "superpowers-vscode-clurdra", "displayName": "Superpowers-clurdra", - "version": "0.2.113", + "version": "0.2.114", "packageManager": "pnpm@10.27.0", "description": "Superpowers specs and plans Kanban explorer", "author": "clurdra", diff --git a/vscode/src/git/release.ts b/vscode/src/git/release.ts index 9660490..0694bb9 100644 --- a/vscode/src/git/release.ts +++ b/vscode/src/git/release.ts @@ -154,8 +154,12 @@ export async function getReleaseStatus(o: { cwd: string, devBranch: string, pref const current = pickCurrentRelease(o.prefix, await remoteBranchNames(o.cwd, o.prefix)) if (!current) return base - const commits = await listUnreleasedCommits({ cwd: o.cwd, devBranch: o.devBranch, current }) - return { devBranch: o.devBranch, current, unreleased: commits.length } + const count = await mustGit( + o.cwd, + ['rev-list', '--count', '--right-only', '--cherry-pick', '--no-merges', unreleasedRange(current, o.devBranch)], + '统计未发布提交失败', + ) + return { devBranch: o.devBranch, current, unreleased: Number(count) } } /** 新→旧;不 fetch,调用方自己决定何时刷新远端 */ diff --git a/vscode/src/panel/handlers/release.ts b/vscode/src/panel/handlers/release.ts index 8f2ec2a..a52db70 100644 --- a/vscode/src/panel/handlers/release.ts +++ b/vscode/src/panel/handlers/release.ts @@ -31,15 +31,20 @@ export async function handleReleaseStatus(panel: KanbanWebviewPanel): Promise 0, } if (!root) { panel.postMessage({ ...base, unreleased: 0, unavailable: '请先打开一个工作区文件夹' }) return } - const st = await getReleaseStatus({ cwd: root, devBranch: s.devBranch, prefix: s.releaseBranchPrefix }) - panel.postMessage({ ...base, current: st.current, unreleased: st.unreleased, unavailable: st.unavailable }) + try { + const st = await getReleaseStatus({ cwd: root, devBranch: s.devBranch, prefix: s.releaseBranchPrefix }) + panel.postMessage({ ...base, current: st.current, unreleased: st.unreleased, unavailable: st.unavailable }) + } + catch (err) { + const message = err instanceof Error ? err.message : String(err) + panel.postMessage({ ...base, unreleased: 0, unavailable: message }) + } } function requireRoot(): string { diff --git a/vscode/test/git/release.test.ts b/vscode/test/git/release.test.ts index 1d766fd..5597d13 100644 --- a/vscode/test/git/release.test.ts +++ b/vscode/test/git/release.test.ts @@ -168,8 +168,6 @@ describe('集成', () => { git(fx.repo, ['fetch', 'origin']) const list = await listUnreleasedCommits({ cwd: fx.repo, devBranch: 'main', current: 'release/2026-08-31' }) expect(list.map(c => c.subject)).toEqual(['feat: other']) - const s = await getReleaseStatus({ cwd: fx.repo, devBranch: 'main', prefix: 'release/' }) - expect(s.unreleased).toBe(1) }) it('标题相同但改的文件不同,仍算未发布', async () => { fx = await setup()