clawt 3.2.0 → 3.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js
CHANGED
|
@@ -299,7 +299,11 @@ ${failures.map((f) => ` \u2717 ${f.path}: ${f.error}`).join("\n")}`,
|
|
|
299
299
|
/** 用户选择保留本地分支 */
|
|
300
300
|
REMOVE_BRANCHES_KEPT: "\u5DF2\u4FDD\u7559\u672C\u5730\u5206\u652F\uFF0C\u53EF\u7A0D\u540E\u4F7F\u7528 git branch -D <\u5206\u652F\u540D> \u624B\u52A8\u5220\u9664",
|
|
301
301
|
/** 确认删除本地分支和验证分支 */
|
|
302
|
-
REMOVE_CONFIRM_DELETE_BRANCHES: "\u662F\u5426\u540C\u65F6\u5220\u9664\u5BF9\u5E94\u7684\u672C\u5730\u5206\u652F\u548C\u9A8C\u8BC1\u5206\u652F\uFF1F"
|
|
302
|
+
REMOVE_CONFIRM_DELETE_BRANCHES: "\u662F\u5426\u540C\u65F6\u5220\u9664\u5BF9\u5E94\u7684\u672C\u5730\u5206\u652F\u548C\u9A8C\u8BC1\u5206\u652F\uFF1F",
|
|
303
|
+
/** 待移除的 worktree 的分支是主 worktree 当前所在分支 */
|
|
304
|
+
REMOVE_BRANCH_IS_CURRENT: (branch) => `\u65E0\u6CD5\u79FB\u9664\uFF1A\u5206\u652F ${branch} \u662F\u4E3B worktree \u5F53\u524D\u6240\u5728\u5206\u652F\uFF0C\u8BF7\u5148\u5207\u6362\u5230\u5176\u4ED6\u5206\u652F\u540E\u518D\u79FB\u9664`,
|
|
305
|
+
/** 待移除的 worktree 对应的验证分支是主 worktree 当前所在分支 */
|
|
306
|
+
REMOVE_VALIDATE_BRANCH_IS_CURRENT: (branch, validateBranch) => `\u65E0\u6CD5\u79FB\u9664\uFF1A\u5206\u652F ${branch} \u7684\u9A8C\u8BC1\u5206\u652F ${validateBranch} \u662F\u4E3B worktree \u5F53\u524D\u6240\u5728\u5206\u652F\uFF0C\u8BF7\u5148\u5207\u6362\u5230\u5176\u4ED6\u5206\u652F\u540E\u518D\u79FB\u9664`
|
|
303
307
|
};
|
|
304
308
|
|
|
305
309
|
// src/constants/messages/reset.ts
|
|
@@ -3811,6 +3815,16 @@ async function handleRemove(options) {
|
|
|
3811
3815
|
printInfo(MESSAGES.NO_WORKTREES);
|
|
3812
3816
|
return;
|
|
3813
3817
|
}
|
|
3818
|
+
const currentBranch = getCurrentBranch();
|
|
3819
|
+
for (const wt of worktreesToRemove) {
|
|
3820
|
+
if (wt.branch === currentBranch) {
|
|
3821
|
+
throw new ClawtError(MESSAGES.REMOVE_BRANCH_IS_CURRENT(wt.branch));
|
|
3822
|
+
}
|
|
3823
|
+
const validateBranch = getValidateBranchName(wt.branch);
|
|
3824
|
+
if (validateBranch === currentBranch) {
|
|
3825
|
+
throw new ClawtError(MESSAGES.REMOVE_VALIDATE_BRANCH_IS_CURRENT(wt.branch, validateBranch));
|
|
3826
|
+
}
|
|
3827
|
+
}
|
|
3814
3828
|
printInfo("\u5373\u5C06\u79FB\u9664\u4EE5\u4E0B worktree \u53CA\u672C\u5730\u5206\u652F\uFF1A\n");
|
|
3815
3829
|
worktreesToRemove.forEach((wt, index) => {
|
|
3816
3830
|
printInfo(` ${index + 1}. ${wt.path} \u2192 \u5206\u652F: ${wt.branch} \u9A8C\u8BC1\u5206\u652F: ${getValidateBranchName(wt.branch)}`);
|
package/dist/postinstall.js
CHANGED
|
@@ -290,7 +290,11 @@ ${failures.map((f) => ` \u2717 ${f.path}: ${f.error}`).join("\n")}`,
|
|
|
290
290
|
/** 用户选择保留本地分支 */
|
|
291
291
|
REMOVE_BRANCHES_KEPT: "\u5DF2\u4FDD\u7559\u672C\u5730\u5206\u652F\uFF0C\u53EF\u7A0D\u540E\u4F7F\u7528 git branch -D <\u5206\u652F\u540D> \u624B\u52A8\u5220\u9664",
|
|
292
292
|
/** 确认删除本地分支和验证分支 */
|
|
293
|
-
REMOVE_CONFIRM_DELETE_BRANCHES: "\u662F\u5426\u540C\u65F6\u5220\u9664\u5BF9\u5E94\u7684\u672C\u5730\u5206\u652F\u548C\u9A8C\u8BC1\u5206\u652F\uFF1F"
|
|
293
|
+
REMOVE_CONFIRM_DELETE_BRANCHES: "\u662F\u5426\u540C\u65F6\u5220\u9664\u5BF9\u5E94\u7684\u672C\u5730\u5206\u652F\u548C\u9A8C\u8BC1\u5206\u652F\uFF1F",
|
|
294
|
+
/** 待移除的 worktree 的分支是主 worktree 当前所在分支 */
|
|
295
|
+
REMOVE_BRANCH_IS_CURRENT: (branch) => `\u65E0\u6CD5\u79FB\u9664\uFF1A\u5206\u652F ${branch} \u662F\u4E3B worktree \u5F53\u524D\u6240\u5728\u5206\u652F\uFF0C\u8BF7\u5148\u5207\u6362\u5230\u5176\u4ED6\u5206\u652F\u540E\u518D\u79FB\u9664`,
|
|
296
|
+
/** 待移除的 worktree 对应的验证分支是主 worktree 当前所在分支 */
|
|
297
|
+
REMOVE_VALIDATE_BRANCH_IS_CURRENT: (branch, validateBranch) => `\u65E0\u6CD5\u79FB\u9664\uFF1A\u5206\u652F ${branch} \u7684\u9A8C\u8BC1\u5206\u652F ${validateBranch} \u662F\u4E3B worktree \u5F53\u524D\u6240\u5728\u5206\u652F\uFF0C\u8BF7\u5148\u5207\u6362\u5230\u5176\u4ED6\u5206\u652F\u540E\u518D\u79FB\u9664`
|
|
294
298
|
};
|
|
295
299
|
|
|
296
300
|
// src/constants/messages/reset.ts
|
package/package.json
CHANGED
package/src/commands/remove.ts
CHANGED
|
@@ -24,6 +24,7 @@ import {
|
|
|
24
24
|
getValidateBranchName,
|
|
25
25
|
deleteValidateBranch,
|
|
26
26
|
requireProjectConfig,
|
|
27
|
+
getCurrentBranch,
|
|
27
28
|
} from '../utils/index.js';
|
|
28
29
|
import type { WorktreeMultiResolveMessages } from '../utils/index.js';
|
|
29
30
|
|
|
@@ -77,6 +78,18 @@ async function handleRemove(options: RemoveOptions): Promise<void> {
|
|
|
77
78
|
return;
|
|
78
79
|
}
|
|
79
80
|
|
|
81
|
+
// 检查待移除的分支是否是主 worktree 当前所在分支
|
|
82
|
+
const currentBranch = getCurrentBranch();
|
|
83
|
+
for (const wt of worktreesToRemove) {
|
|
84
|
+
if (wt.branch === currentBranch) {
|
|
85
|
+
throw new ClawtError(MESSAGES.REMOVE_BRANCH_IS_CURRENT(wt.branch));
|
|
86
|
+
}
|
|
87
|
+
const validateBranch = getValidateBranchName(wt.branch);
|
|
88
|
+
if (validateBranch === currentBranch) {
|
|
89
|
+
throw new ClawtError(MESSAGES.REMOVE_VALIDATE_BRANCH_IS_CURRENT(wt.branch, validateBranch));
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
80
93
|
// 列出即将移除的 worktree
|
|
81
94
|
printInfo('即将移除以下 worktree 及本地分支:\n');
|
|
82
95
|
worktreesToRemove.forEach((wt, index) => {
|
|
@@ -16,4 +16,10 @@ export const REMOVE_MESSAGES = {
|
|
|
16
16
|
REMOVE_BRANCHES_KEPT: '已保留本地分支,可稍后使用 git branch -D <分支名> 手动删除',
|
|
17
17
|
/** 确认删除本地分支和验证分支 */
|
|
18
18
|
REMOVE_CONFIRM_DELETE_BRANCHES: '是否同时删除对应的本地分支和验证分支?',
|
|
19
|
+
/** 待移除的 worktree 的分支是主 worktree 当前所在分支 */
|
|
20
|
+
REMOVE_BRANCH_IS_CURRENT: (branch: string) =>
|
|
21
|
+
`无法移除:分支 ${branch} 是主 worktree 当前所在分支,请先切换到其他分支后再移除`,
|
|
22
|
+
/** 待移除的 worktree 对应的验证分支是主 worktree 当前所在分支 */
|
|
23
|
+
REMOVE_VALIDATE_BRANCH_IS_CURRENT: (branch: string, validateBranch: string) =>
|
|
24
|
+
`无法移除:分支 ${branch} 的验证分支 ${validateBranch} 是主 worktree 当前所在分支,请先切换到其他分支后再移除`,
|
|
19
25
|
} as const;
|
|
@@ -25,6 +25,10 @@ vi.mock('../../../src/constants/index.js', () => ({
|
|
|
25
25
|
REMOVE_MULTIPLE_MATCHES: (name: string) => `"${name}" 匹配到多个分支`,
|
|
26
26
|
REMOVE_NO_MATCH: (name: string, branches: string[]) => `未找到与 "${name}" 匹配的分支,可用:${branches.join(', ')}`,
|
|
27
27
|
REMOVE_BRANCHES_KEPT: '已保留本地分支,可稍后使用 git branch -D <分支名> 手动删除',
|
|
28
|
+
REMOVE_BRANCH_IS_CURRENT: (branch: string) =>
|
|
29
|
+
`无法移除:分支 ${branch} 是主 worktree 当前所在分支,请先切换到其他分支后再移除`,
|
|
30
|
+
REMOVE_VALIDATE_BRANCH_IS_CURRENT: (branch: string, validateBranch: string) =>
|
|
31
|
+
`无法移除:分支 ${branch} 的验证分支 ${validateBranch} 是主 worktree 当前所在分支,请先切换到其他分支后再移除`,
|
|
28
32
|
},
|
|
29
33
|
}));
|
|
30
34
|
|
|
@@ -49,6 +53,7 @@ vi.mock('../../../src/utils/index.js', () => ({
|
|
|
49
53
|
requireProjectConfig: vi.fn().mockReturnValue({ clawtMainWorkBranch: 'main' }),
|
|
50
54
|
getValidateBranchName: vi.fn((name: string) => `clawt-validate-${name}`),
|
|
51
55
|
deleteValidateBranch: vi.fn(),
|
|
56
|
+
getCurrentBranch: vi.fn(),
|
|
52
57
|
}));
|
|
53
58
|
|
|
54
59
|
import { registerRemoveCommand } from '../../../src/commands/remove.js';
|
|
@@ -66,6 +71,7 @@ import {
|
|
|
66
71
|
printError,
|
|
67
72
|
printHint,
|
|
68
73
|
resolveTargetWorktrees,
|
|
74
|
+
getCurrentBranch,
|
|
69
75
|
} from '../../../src/utils/index.js';
|
|
70
76
|
|
|
71
77
|
const mockedGetProjectName = vi.mocked(getProjectName);
|
|
@@ -80,6 +86,7 @@ const mockedPrintSuccess = vi.mocked(printSuccess);
|
|
|
80
86
|
const mockedPrintError = vi.mocked(printError);
|
|
81
87
|
const mockedPrintHint = vi.mocked(printHint);
|
|
82
88
|
const mockedResolveTargetWorktrees = vi.mocked(resolveTargetWorktrees);
|
|
89
|
+
const mockedGetCurrentBranch = vi.mocked(getCurrentBranch);
|
|
83
90
|
|
|
84
91
|
beforeEach(() => {
|
|
85
92
|
vi.mocked(validateMainWorktree).mockReset();
|
|
@@ -95,6 +102,8 @@ beforeEach(() => {
|
|
|
95
102
|
mockedPrintError.mockReset();
|
|
96
103
|
mockedPrintHint.mockReset();
|
|
97
104
|
mockedResolveTargetWorktrees.mockReset();
|
|
105
|
+
mockedGetCurrentBranch.mockReset();
|
|
106
|
+
mockedGetCurrentBranch.mockReturnValue('main');
|
|
98
107
|
});
|
|
99
108
|
|
|
100
109
|
describe('registerRemoveCommand', () => {
|