diff --git a/vscode/package.json b/vscode/package.json index f2f2efe..d40bbc8 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.117", + "version": "0.2.118", "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 54027d0..d6bdb81 100644 --- a/vscode/src/git/release.ts +++ b/vscode/src/git/release.ts @@ -268,7 +268,7 @@ export async function listUnreleasedCommits(o: { cwd: string, devBranch: string, ) if (!out) return [] - const commits = out.split('\x1e').flatMap((chunk) => { + const commits = out.split('\x1E').flatMap((chunk) => { const trimmed = chunk.replace(/^\n+/, '').trimEnd() if (!trimmed) return [] diff --git a/vscode/test/git/release.test.ts b/vscode/test/git/release.test.ts index 5597d13..bed3b09 100644 --- a/vscode/test/git/release.test.ts +++ b/vscode/test/git/release.test.ts @@ -7,14 +7,14 @@ import { cherryPickToRelease, cutRelease, getReleaseStatus, + groupCommitsByPr, + indexUnreleasedByMergePr, listReleaseBranches, listUnreleasedCommits, normalizeReleasePrefix, + parseGiteaMergeSubject, pickCurrentRelease, todayReleaseBranch, - groupCommitsByPr, - parseGiteaMergeSubject, - indexUnreleasedByMergePr, } from '../../src/git/release' const gitEnv = { ...process.env, GIT_CONFIG_NOSYSTEM: '1', GIT_CONFIG_GLOBAL: '/dev/null', GIT_TERMINAL_PROMPT: '0', GIT_AUTHOR_NAME: 't', GIT_AUTHOR_EMAIL: 't@t', GIT_COMMITTER_NAME: 't', GIT_COMMITTER_EMAIL: 't@t' } @@ -60,7 +60,7 @@ describe('纯函数', () => { expect(pickCurrentRelease('release/', ['main'])).toBeUndefined() }) it('parseGiteaMergeSubject 认 Gitea 合并说明', () => { - expect(parseGiteaMergeSubject("Merge pull request '连续包月会员订阅体系' (#260) from feature/monthly-membership into main")).toEqual({ + expect(parseGiteaMergeSubject('Merge pull request \'连续包月会员订阅体系\' (#260) from feature/monthly-membership into main')).toEqual({ number: 260, title: '连续包月会员订阅体系', }) @@ -135,7 +135,7 @@ describe('集成', () => { const a = commit(fx.peer, 'b.txt', 'b', 'fix(admin): 会员档位隐藏') const b = commit(fx.peer, 'c.txt', 'c', 'fix(membership): 年付月度发卡') git(fx.peer, ['checkout', 'main']) - git(fx.peer, ['merge', '--no-ff', '-m', "Merge pull request '连续包月会员订阅体系' (#260) from feature into main", 'feature']) + git(fx.peer, ['merge', '--no-ff', '-m', 'Merge pull request \'连续包月会员订阅体系\' (#260) from feature into main', 'feature']) git(fx.peer, ['push', 'origin', 'main']) git(fx.repo, ['fetch', 'origin']) const map = await indexUnreleasedByMergePr({ diff --git a/vscode/test/git/worktreeFromRemote.test.ts b/vscode/test/git/worktreeFromRemote.test.ts index ae33b3e..791ea28 100644 --- a/vscode/test/git/worktreeFromRemote.test.ts +++ b/vscode/test/git/worktreeFromRemote.test.ts @@ -1,5 +1,5 @@ import { execFileSync } from 'node:child_process' -import { existsSync, promises as fsp, rmSync, writeFileSync } from 'node:fs' +import { existsSync, promises as fsp, realpathSync, rmSync, writeFileSync } from 'node:fs' import * as os from 'node:os' import * as path from 'node:path' import { afterEach, describe, expect, it } from 'vitest' @@ -24,7 +24,9 @@ interface Fixture { root: string, origin: string, repo: string, templatePath: st /** origin(bare)← 同事的 clone push feature 分支;repo 是接管方的 clone,只有 main。 */ async function setup(): Promise { - const root = await fsp.mkdtemp(path.join(os.tmpdir(), 'sw-remote-')) + // macOS 的 tmpdir 是 /var → /private/var 的软链,git worktree list 报的是真实路径; + // 夹具根目录先取真实路径,复用分支返回的路径才能和模板路径按字符串相等。 + const root = realpathSync(await fsp.mkdtemp(path.join(os.tmpdir(), 'sw-remote-'))) const origin = path.join(root, 'origin.git') git(root, ['init', '--bare', '-b', 'main', origin]) const peer = path.join(root, 'peer') diff --git a/vscode/webview-ui/src/lib/cherryPickView.test.ts b/vscode/webview-ui/src/lib/cherryPickView.test.ts index ff2422c..855f395 100644 --- a/vscode/webview-ui/src/lib/cherryPickView.test.ts +++ b/vscode/webview-ui/src/lib/cherryPickView.test.ts @@ -1,5 +1,5 @@ -import { describe, expect, it } from 'vitest' import type { ReleaseCommitGroup } from './messages' +import { describe, expect, it } from 'vitest' import { filterCherryPickGroups, uniqueAuthors } from './cherryPickView' const groups: ReleaseCommitGroup[] = [