@camaradesuk/git-worktree-tools 1.0.3
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/LICENSE +21 -0
- package/README.md +259 -0
- package/dist/cli/cleanpr.d.ts +13 -0
- package/dist/cli/cleanpr.d.ts.map +1 -0
- package/dist/cli/cleanpr.js +441 -0
- package/dist/cli/cleanpr.js.map +1 -0
- package/dist/cli/lswt.d.ts +11 -0
- package/dist/cli/lswt.d.ts.map +1 -0
- package/dist/cli/lswt.js +313 -0
- package/dist/cli/lswt.js.map +1 -0
- package/dist/cli/newpr.d.ts +11 -0
- package/dist/cli/newpr.d.ts.map +1 -0
- package/dist/cli/newpr.js +888 -0
- package/dist/cli/newpr.js.map +1 -0
- package/dist/cli/wtlink.d.ts +15 -0
- package/dist/cli/wtlink.d.ts.map +1 -0
- package/dist/cli/wtlink.js +124 -0
- package/dist/cli/wtlink.js.map +1 -0
- package/dist/e2e/cli.e2e.test.d.ts +2 -0
- package/dist/e2e/cli.e2e.test.d.ts.map +1 -0
- package/dist/e2e/cli.e2e.test.js +215 -0
- package/dist/e2e/cli.e2e.test.js.map +1 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -0
- package/dist/integration/git.integration.test.d.ts +2 -0
- package/dist/integration/git.integration.test.d.ts.map +1 -0
- package/dist/integration/git.integration.test.js +333 -0
- package/dist/integration/git.integration.test.js.map +1 -0
- package/dist/lib/colors.d.ts +59 -0
- package/dist/lib/colors.d.ts.map +1 -0
- package/dist/lib/colors.js +145 -0
- package/dist/lib/colors.js.map +1 -0
- package/dist/lib/colors.test.d.ts +2 -0
- package/dist/lib/colors.test.d.ts.map +1 -0
- package/dist/lib/colors.test.js +69 -0
- package/dist/lib/colors.test.js.map +1 -0
- package/dist/lib/config.d.ts +58 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +91 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/config.test.d.ts +2 -0
- package/dist/lib/config.test.d.ts.map +1 -0
- package/dist/lib/config.test.js +84 -0
- package/dist/lib/config.test.js.map +1 -0
- package/dist/lib/constants.d.ts +37 -0
- package/dist/lib/constants.d.ts.map +1 -0
- package/dist/lib/constants.js +37 -0
- package/dist/lib/constants.js.map +1 -0
- package/dist/lib/errors.d.ts +88 -0
- package/dist/lib/errors.d.ts.map +1 -0
- package/dist/lib/errors.js +112 -0
- package/dist/lib/errors.js.map +1 -0
- package/dist/lib/errors.test.d.ts +2 -0
- package/dist/lib/errors.test.d.ts.map +1 -0
- package/dist/lib/errors.test.js +117 -0
- package/dist/lib/errors.test.js.map +1 -0
- package/dist/lib/git.d.ts +224 -0
- package/dist/lib/git.d.ts.map +1 -0
- package/dist/lib/git.js +524 -0
- package/dist/lib/git.js.map +1 -0
- package/dist/lib/git.test.d.ts +2 -0
- package/dist/lib/git.test.d.ts.map +1 -0
- package/dist/lib/git.test.js +402 -0
- package/dist/lib/git.test.js.map +1 -0
- package/dist/lib/github.d.ts +82 -0
- package/dist/lib/github.d.ts.map +1 -0
- package/dist/lib/github.js +254 -0
- package/dist/lib/github.js.map +1 -0
- package/dist/lib/github.test.d.ts +2 -0
- package/dist/lib/github.test.d.ts.map +1 -0
- package/dist/lib/github.test.js +258 -0
- package/dist/lib/github.test.js.map +1 -0
- package/dist/lib/prompts.d.ts +39 -0
- package/dist/lib/prompts.d.ts.map +1 -0
- package/dist/lib/prompts.js +213 -0
- package/dist/lib/prompts.js.map +1 -0
- package/dist/lib/prompts.test.d.ts +2 -0
- package/dist/lib/prompts.test.d.ts.map +1 -0
- package/dist/lib/prompts.test.js +250 -0
- package/dist/lib/prompts.test.js.map +1 -0
- package/dist/lib/state-detection.d.ts +65 -0
- package/dist/lib/state-detection.d.ts.map +1 -0
- package/dist/lib/state-detection.js +186 -0
- package/dist/lib/state-detection.js.map +1 -0
- package/dist/lib/state-detection.test.d.ts +2 -0
- package/dist/lib/state-detection.test.d.ts.map +1 -0
- package/dist/lib/state-detection.test.js +164 -0
- package/dist/lib/state-detection.test.js.map +1 -0
- package/dist/lib/wtlink/index.d.ts +5 -0
- package/dist/lib/wtlink/index.d.ts.map +1 -0
- package/dist/lib/wtlink/index.js +7 -0
- package/dist/lib/wtlink/index.js.map +1 -0
- package/dist/lib/wtlink/link-configs.d.ts +10 -0
- package/dist/lib/wtlink/link-configs.d.ts.map +1 -0
- package/dist/lib/wtlink/link-configs.js +411 -0
- package/dist/lib/wtlink/link-configs.js.map +1 -0
- package/dist/lib/wtlink/link-configs.test.d.ts +2 -0
- package/dist/lib/wtlink/link-configs.test.d.ts.map +1 -0
- package/dist/lib/wtlink/link-configs.test.js +179 -0
- package/dist/lib/wtlink/link-configs.test.js.map +1 -0
- package/dist/lib/wtlink/main-menu.d.ts +2 -0
- package/dist/lib/wtlink/main-menu.d.ts.map +1 -0
- package/dist/lib/wtlink/main-menu.js +149 -0
- package/dist/lib/wtlink/main-menu.js.map +1 -0
- package/dist/lib/wtlink/manage-manifest.d.ts +9 -0
- package/dist/lib/wtlink/manage-manifest.d.ts.map +1 -0
- package/dist/lib/wtlink/manage-manifest.js +1262 -0
- package/dist/lib/wtlink/manage-manifest.js.map +1 -0
- package/dist/lib/wtlink/validate-manifest.d.ts +6 -0
- package/dist/lib/wtlink/validate-manifest.d.ts.map +1 -0
- package/dist/lib/wtlink/validate-manifest.js +51 -0
- package/dist/lib/wtlink/validate-manifest.js.map +1 -0
- package/dist/lib/wtlink/validate-manifest.test.d.ts +2 -0
- package/dist/lib/wtlink/validate-manifest.test.d.ts.map +1 -0
- package/dist/lib/wtlink/validate-manifest.test.js +115 -0
- package/dist/lib/wtlink/validate-manifest.test.js.map +1 -0
- package/package.json +84 -0
|
@@ -0,0 +1,441 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* cleanpr - Clean up PR worktrees after merge/close
|
|
4
|
+
*
|
|
5
|
+
* Usage:
|
|
6
|
+
* cleanpr # Interactive cleanup of merged/closed PRs
|
|
7
|
+
* cleanpr <PR_NUMBER> # Clean specific PR worktree
|
|
8
|
+
* cleanpr --all # Clean all merged/closed PRs
|
|
9
|
+
* cleanpr <PR_NUMBER> -r # Also delete remote branch
|
|
10
|
+
* cleanpr <PR_NUMBER> -f # Force removal with uncommitted changes
|
|
11
|
+
*/
|
|
12
|
+
import { execSync } from 'child_process';
|
|
13
|
+
import * as path from 'path';
|
|
14
|
+
import * as git from '../lib/git.js';
|
|
15
|
+
import * as github from '../lib/github.js';
|
|
16
|
+
import * as prompts from '../lib/prompts.js';
|
|
17
|
+
import * as colors from '../lib/colors.js';
|
|
18
|
+
import { loadConfig } from '../lib/config.js';
|
|
19
|
+
function parseArgs() {
|
|
20
|
+
const args = process.argv.slice(2);
|
|
21
|
+
let prNumber = null;
|
|
22
|
+
const options = {
|
|
23
|
+
deleteRemote: false,
|
|
24
|
+
force: false,
|
|
25
|
+
all: false,
|
|
26
|
+
interactive: true,
|
|
27
|
+
};
|
|
28
|
+
let i = 0;
|
|
29
|
+
while (i < args.length) {
|
|
30
|
+
const arg = args[i];
|
|
31
|
+
switch (arg) {
|
|
32
|
+
case '-h':
|
|
33
|
+
case '--help':
|
|
34
|
+
printHelp();
|
|
35
|
+
process.exit(0);
|
|
36
|
+
break;
|
|
37
|
+
case '-r':
|
|
38
|
+
case '--remote':
|
|
39
|
+
options.deleteRemote = true;
|
|
40
|
+
break;
|
|
41
|
+
case '-f':
|
|
42
|
+
case '--force':
|
|
43
|
+
options.force = true;
|
|
44
|
+
break;
|
|
45
|
+
case '-a':
|
|
46
|
+
case '--all':
|
|
47
|
+
options.all = true;
|
|
48
|
+
options.interactive = false;
|
|
49
|
+
break;
|
|
50
|
+
default:
|
|
51
|
+
if (arg.startsWith('-')) {
|
|
52
|
+
console.error(colors.error(`Unknown option: ${arg}`));
|
|
53
|
+
process.exit(1);
|
|
54
|
+
}
|
|
55
|
+
// Must be PR number
|
|
56
|
+
const num = parseInt(arg, 10);
|
|
57
|
+
if (isNaN(num)) {
|
|
58
|
+
console.error(colors.error(`Invalid PR number: ${arg}`));
|
|
59
|
+
process.exit(1);
|
|
60
|
+
}
|
|
61
|
+
prNumber = num;
|
|
62
|
+
options.interactive = false;
|
|
63
|
+
}
|
|
64
|
+
i++;
|
|
65
|
+
}
|
|
66
|
+
return { prNumber, options };
|
|
67
|
+
}
|
|
68
|
+
function printHelp() {
|
|
69
|
+
console.log(`
|
|
70
|
+
${colors.bold('cleanpr')} - Clean up PR worktrees after merge/close
|
|
71
|
+
|
|
72
|
+
${colors.bold('USAGE')}
|
|
73
|
+
cleanpr Interactive cleanup of merged/closed PRs
|
|
74
|
+
cleanpr <PR_NUMBER> Clean specific PR worktree
|
|
75
|
+
cleanpr --all Clean all merged/closed PRs automatically
|
|
76
|
+
cleanpr <PR_NUMBER> [options] Clean with options
|
|
77
|
+
|
|
78
|
+
${colors.bold('OPTIONS')}
|
|
79
|
+
-r, --remote Also delete the remote branch
|
|
80
|
+
-f, --force Force removal even if worktree has uncommitted changes
|
|
81
|
+
-a, --all Clean all merged/closed PR worktrees (non-interactive)
|
|
82
|
+
-h, --help Show this help message
|
|
83
|
+
|
|
84
|
+
${colors.bold('EXAMPLES')}
|
|
85
|
+
cleanpr # Interactive mode - select worktrees to clean
|
|
86
|
+
cleanpr 2245 # Remove worktree and local branch for PR #2245
|
|
87
|
+
cleanpr 2245 --remote # Also delete remote branch
|
|
88
|
+
cleanpr 2245 -f -r # Force cleanup and delete remote
|
|
89
|
+
cleanpr --all # Clean all merged/closed PRs
|
|
90
|
+
|
|
91
|
+
${colors.bold('WHAT IT REMOVES')}
|
|
92
|
+
- Git worktree directory
|
|
93
|
+
- Local branch associated with the PR
|
|
94
|
+
- Remote branch (with --remote flag)
|
|
95
|
+
`);
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Extract PR number from worktree path if it matches pattern
|
|
99
|
+
*/
|
|
100
|
+
function extractPrNumber(worktreePath, config) {
|
|
101
|
+
const name = path.basename(worktreePath);
|
|
102
|
+
// Match patterns like "repo.pr123" or custom patterns
|
|
103
|
+
const pattern = config.worktreePattern;
|
|
104
|
+
if (pattern.includes('{number}')) {
|
|
105
|
+
// Build regex from pattern
|
|
106
|
+
const regexStr = pattern
|
|
107
|
+
.replace('{repo}', '.*')
|
|
108
|
+
.replace('{number}', '(\\d+)')
|
|
109
|
+
.replace('.', '\\.');
|
|
110
|
+
const match = name.match(new RegExp(regexStr));
|
|
111
|
+
if (match) {
|
|
112
|
+
return parseInt(match[1], 10);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
// Fallback: try common patterns
|
|
116
|
+
const patterns = [
|
|
117
|
+
/\.pr(\d+)$/, // repo.pr123
|
|
118
|
+
/\.pr-(\d+)$/, // repo.pr-123
|
|
119
|
+
/-pr(\d+)$/, // repo-pr123
|
|
120
|
+
/_pr(\d+)$/, // repo_pr123
|
|
121
|
+
];
|
|
122
|
+
for (const p of patterns) {
|
|
123
|
+
const match = name.match(p);
|
|
124
|
+
if (match) {
|
|
125
|
+
return parseInt(match[1], 10);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
return null;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Check if a worktree has uncommitted changes
|
|
132
|
+
*/
|
|
133
|
+
function hasUncommittedChanges(worktreePath) {
|
|
134
|
+
try {
|
|
135
|
+
const status = execSync('git status --porcelain', {
|
|
136
|
+
cwd: worktreePath,
|
|
137
|
+
encoding: 'utf-8',
|
|
138
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
139
|
+
}).trim();
|
|
140
|
+
return status.length > 0;
|
|
141
|
+
}
|
|
142
|
+
catch {
|
|
143
|
+
return false;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Get PR state from GitHub
|
|
148
|
+
*/
|
|
149
|
+
async function getPrState(prNumber) {
|
|
150
|
+
try {
|
|
151
|
+
const pr = await github.getPr(prNumber);
|
|
152
|
+
if (!pr) {
|
|
153
|
+
return 'UNKNOWN';
|
|
154
|
+
}
|
|
155
|
+
// pr.state is already 'OPEN' | 'CLOSED' | 'MERGED'
|
|
156
|
+
return pr.state;
|
|
157
|
+
}
|
|
158
|
+
catch {
|
|
159
|
+
return 'UNKNOWN';
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Get detailed info about all PR worktrees
|
|
164
|
+
*/
|
|
165
|
+
async function getWorktreeInfoList(repoRoot, config) {
|
|
166
|
+
const worktrees = await git.listWorktrees();
|
|
167
|
+
const result = [];
|
|
168
|
+
for (const wt of worktrees) {
|
|
169
|
+
const prNumber = extractPrNumber(wt.path, config);
|
|
170
|
+
// Skip non-PR worktrees
|
|
171
|
+
if (prNumber === null) {
|
|
172
|
+
continue;
|
|
173
|
+
}
|
|
174
|
+
const prState = await getPrState(prNumber);
|
|
175
|
+
const hasChanges = hasUncommittedChanges(wt.path);
|
|
176
|
+
result.push({
|
|
177
|
+
path: wt.path,
|
|
178
|
+
branch: wt.branch,
|
|
179
|
+
commit: wt.commit,
|
|
180
|
+
prNumber,
|
|
181
|
+
prState,
|
|
182
|
+
hasChanges,
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
return result;
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Remove a single worktree and its branch
|
|
189
|
+
*/
|
|
190
|
+
async function cleanWorktree(info, repoRoot, options) {
|
|
191
|
+
const prLabel = `PR #${info.prNumber}`;
|
|
192
|
+
// Check for uncommitted changes
|
|
193
|
+
if (info.hasChanges && !options.force) {
|
|
194
|
+
console.log(colors.warning(`${prLabel}: Has uncommitted changes (use --force to override)`));
|
|
195
|
+
return false;
|
|
196
|
+
}
|
|
197
|
+
try {
|
|
198
|
+
// Remove worktree
|
|
199
|
+
console.log(colors.info(`${prLabel}: Removing worktree...`));
|
|
200
|
+
await git.removeWorktree(info.path, { force: options.force });
|
|
201
|
+
console.log(colors.success(`${prLabel}: Worktree removed`));
|
|
202
|
+
// Delete local branch
|
|
203
|
+
if (info.branch) {
|
|
204
|
+
console.log(colors.info(`${prLabel}: Deleting local branch ${info.branch}...`));
|
|
205
|
+
try {
|
|
206
|
+
execSync(`git branch -D "${info.branch}"`, {
|
|
207
|
+
cwd: repoRoot,
|
|
208
|
+
encoding: 'utf-8',
|
|
209
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
210
|
+
});
|
|
211
|
+
console.log(colors.success(`${prLabel}: Local branch deleted`));
|
|
212
|
+
}
|
|
213
|
+
catch {
|
|
214
|
+
console.log(colors.warning(`${prLabel}: Could not delete local branch (may already be deleted)`));
|
|
215
|
+
}
|
|
216
|
+
// Delete remote branch if requested
|
|
217
|
+
if (options.deleteRemote) {
|
|
218
|
+
console.log(colors.info(`${prLabel}: Deleting remote branch...`));
|
|
219
|
+
try {
|
|
220
|
+
execSync(`git push origin --delete "${info.branch}"`, {
|
|
221
|
+
cwd: repoRoot,
|
|
222
|
+
encoding: 'utf-8',
|
|
223
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
224
|
+
});
|
|
225
|
+
console.log(colors.success(`${prLabel}: Remote branch deleted`));
|
|
226
|
+
}
|
|
227
|
+
catch {
|
|
228
|
+
console.log(colors.warning(`${prLabel}: Could not delete remote branch (may already be deleted)`));
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
// Prune worktrees
|
|
233
|
+
git.pruneWorktrees();
|
|
234
|
+
return true;
|
|
235
|
+
}
|
|
236
|
+
catch (err) {
|
|
237
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
238
|
+
console.log(colors.error(`${prLabel}: Failed to clean - ${message}`));
|
|
239
|
+
return false;
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* Interactive mode - let user select worktrees to clean
|
|
244
|
+
*/
|
|
245
|
+
async function interactiveClean(repoRoot, config, options) {
|
|
246
|
+
console.log(colors.info('Scanning worktrees...'));
|
|
247
|
+
const worktrees = await getWorktreeInfoList(repoRoot, config);
|
|
248
|
+
if (worktrees.length === 0) {
|
|
249
|
+
console.log(colors.info('No PR worktrees found.'));
|
|
250
|
+
return;
|
|
251
|
+
}
|
|
252
|
+
// Group by status
|
|
253
|
+
const merged = worktrees.filter((w) => w.prState === 'MERGED');
|
|
254
|
+
const closed = worktrees.filter((w) => w.prState === 'CLOSED');
|
|
255
|
+
const open = worktrees.filter((w) => w.prState === 'OPEN');
|
|
256
|
+
const unknown = worktrees.filter((w) => w.prState === 'UNKNOWN');
|
|
257
|
+
console.log('');
|
|
258
|
+
console.log(colors.bold('PR Worktrees:'));
|
|
259
|
+
console.log('');
|
|
260
|
+
if (merged.length > 0) {
|
|
261
|
+
console.log(colors.yellow(` Merged (${merged.length}):`));
|
|
262
|
+
for (const w of merged) {
|
|
263
|
+
const changeIndicator = w.hasChanges ? colors.red(' [has changes]') : '';
|
|
264
|
+
console.log(` PR #${w.prNumber}: ${w.branch}${changeIndicator}`);
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
if (closed.length > 0) {
|
|
268
|
+
console.log(colors.red(` Closed (${closed.length}):`));
|
|
269
|
+
for (const w of closed) {
|
|
270
|
+
const changeIndicator = w.hasChanges ? colors.red(' [has changes]') : '';
|
|
271
|
+
console.log(` PR #${w.prNumber}: ${w.branch}${changeIndicator}`);
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
if (open.length > 0) {
|
|
275
|
+
console.log(colors.green(` Open (${open.length}):`));
|
|
276
|
+
for (const w of open) {
|
|
277
|
+
const changeIndicator = w.hasChanges ? colors.red(' [has changes]') : '';
|
|
278
|
+
console.log(` PR #${w.prNumber}: ${w.branch}${changeIndicator}`);
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
if (unknown.length > 0) {
|
|
282
|
+
console.log(colors.dim(` Unknown (${unknown.length}):`));
|
|
283
|
+
for (const w of unknown) {
|
|
284
|
+
const changeIndicator = w.hasChanges ? colors.red(' [has changes]') : '';
|
|
285
|
+
console.log(` PR #${w.prNumber}: ${w.branch}${changeIndicator}`);
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
console.log('');
|
|
289
|
+
// Build cleanup options
|
|
290
|
+
const cleanable = [...merged, ...closed];
|
|
291
|
+
if (cleanable.length === 0) {
|
|
292
|
+
console.log(colors.info('No merged or closed PRs to clean up.'));
|
|
293
|
+
return;
|
|
294
|
+
}
|
|
295
|
+
const choices = [
|
|
296
|
+
{
|
|
297
|
+
label: `Clean all merged/closed (${cleanable.length})`,
|
|
298
|
+
value: 'all',
|
|
299
|
+
},
|
|
300
|
+
];
|
|
301
|
+
if (merged.length > 0) {
|
|
302
|
+
choices.push({
|
|
303
|
+
label: `Clean merged only (${merged.length})`,
|
|
304
|
+
value: 'merged',
|
|
305
|
+
});
|
|
306
|
+
}
|
|
307
|
+
choices.push({
|
|
308
|
+
label: 'Select individually',
|
|
309
|
+
value: 'select',
|
|
310
|
+
});
|
|
311
|
+
choices.push({
|
|
312
|
+
label: 'Cancel',
|
|
313
|
+
value: 'cancel',
|
|
314
|
+
});
|
|
315
|
+
const action = await prompts.promptChoice('What would you like to clean?', choices);
|
|
316
|
+
if (action === 'cancel') {
|
|
317
|
+
console.log(colors.info('Cancelled.'));
|
|
318
|
+
return;
|
|
319
|
+
}
|
|
320
|
+
let toClean = [];
|
|
321
|
+
if (action === 'all') {
|
|
322
|
+
toClean = cleanable;
|
|
323
|
+
}
|
|
324
|
+
else if (action === 'merged') {
|
|
325
|
+
toClean = merged;
|
|
326
|
+
}
|
|
327
|
+
else if (action === 'select') {
|
|
328
|
+
// Individual selection
|
|
329
|
+
for (const w of cleanable) {
|
|
330
|
+
const confirm = await prompts.promptConfirm(`Clean PR #${w.prNumber} (${w.prState.toLowerCase()})${w.hasChanges ? ' [has changes]' : ''}?`);
|
|
331
|
+
if (confirm) {
|
|
332
|
+
toClean.push(w);
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
if (toClean.length === 0) {
|
|
337
|
+
console.log(colors.info('Nothing to clean.'));
|
|
338
|
+
return;
|
|
339
|
+
}
|
|
340
|
+
// Ask about remote deletion
|
|
341
|
+
if (!options.deleteRemote) {
|
|
342
|
+
const deleteRemote = await prompts.promptConfirm('Also delete remote branches?');
|
|
343
|
+
options.deleteRemote = deleteRemote;
|
|
344
|
+
}
|
|
345
|
+
console.log('');
|
|
346
|
+
// Clean selected worktrees
|
|
347
|
+
let cleaned = 0;
|
|
348
|
+
for (const w of toClean) {
|
|
349
|
+
if (await cleanWorktree(w, repoRoot, options)) {
|
|
350
|
+
cleaned++;
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
console.log('');
|
|
354
|
+
console.log(colors.success(`Cleaned ${cleaned} of ${toClean.length} worktrees.`));
|
|
355
|
+
}
|
|
356
|
+
/**
|
|
357
|
+
* Clean all merged/closed PRs automatically
|
|
358
|
+
*/
|
|
359
|
+
async function cleanAll(repoRoot, config, options) {
|
|
360
|
+
console.log(colors.info('Scanning for merged/closed PR worktrees...'));
|
|
361
|
+
const worktrees = await getWorktreeInfoList(repoRoot, config);
|
|
362
|
+
const cleanable = worktrees.filter((w) => w.prState === 'MERGED' || w.prState === 'CLOSED');
|
|
363
|
+
if (cleanable.length === 0) {
|
|
364
|
+
console.log(colors.info('No merged or closed PR worktrees found.'));
|
|
365
|
+
return;
|
|
366
|
+
}
|
|
367
|
+
console.log(colors.info(`Found ${cleanable.length} merged/closed PR worktrees.`));
|
|
368
|
+
console.log('');
|
|
369
|
+
let cleaned = 0;
|
|
370
|
+
for (const w of cleanable) {
|
|
371
|
+
if (await cleanWorktree(w, repoRoot, options)) {
|
|
372
|
+
cleaned++;
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
console.log('');
|
|
376
|
+
console.log(colors.success(`Cleaned ${cleaned} of ${cleanable.length} worktrees.`));
|
|
377
|
+
}
|
|
378
|
+
/**
|
|
379
|
+
* Clean a specific PR worktree
|
|
380
|
+
*/
|
|
381
|
+
async function cleanSpecific(prNumber, repoRoot, config, options) {
|
|
382
|
+
const worktrees = await getWorktreeInfoList(repoRoot, config);
|
|
383
|
+
const target = worktrees.find((w) => w.prNumber === prNumber);
|
|
384
|
+
if (!target) {
|
|
385
|
+
// Try to find by pattern
|
|
386
|
+
const pattern = config.worktreePattern
|
|
387
|
+
.replace('{repo}', path.basename(repoRoot))
|
|
388
|
+
.replace('{number}', String(prNumber));
|
|
389
|
+
const expectedPath = path.join(path.dirname(repoRoot), pattern);
|
|
390
|
+
console.error(colors.error(`No worktree found for PR #${prNumber}`));
|
|
391
|
+
console.error(colors.dim(`Expected at: ${expectedPath}`));
|
|
392
|
+
process.exit(1);
|
|
393
|
+
}
|
|
394
|
+
console.log(colors.info(`Cleaning PR #${prNumber} worktree...`));
|
|
395
|
+
console.log(colors.dim(` Path: ${target.path}`));
|
|
396
|
+
console.log(colors.dim(` Branch: ${target.branch}`));
|
|
397
|
+
console.log(colors.dim(` State: ${target.prState}`));
|
|
398
|
+
console.log('');
|
|
399
|
+
if (await cleanWorktree(target, repoRoot, options)) {
|
|
400
|
+
console.log('');
|
|
401
|
+
console.log(colors.success(`PR #${prNumber} worktree cleaned up successfully.`));
|
|
402
|
+
}
|
|
403
|
+
else {
|
|
404
|
+
process.exit(1);
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
async function main() {
|
|
408
|
+
const { prNumber, options } = parseArgs();
|
|
409
|
+
// Check prerequisites
|
|
410
|
+
if (!github.isGhInstalled()) {
|
|
411
|
+
console.error(colors.error('GitHub CLI (gh) is required for PR status checking.'));
|
|
412
|
+
console.error(colors.dim('Install: https://cli.github.com/'));
|
|
413
|
+
process.exit(1);
|
|
414
|
+
}
|
|
415
|
+
// Find repo root
|
|
416
|
+
const repoRoot = git.getRepoRoot();
|
|
417
|
+
if (!repoRoot) {
|
|
418
|
+
console.error(colors.error('Not in a git repository.'));
|
|
419
|
+
process.exit(1);
|
|
420
|
+
}
|
|
421
|
+
// Load configuration
|
|
422
|
+
const config = loadConfig(repoRoot);
|
|
423
|
+
console.log('');
|
|
424
|
+
if (prNumber !== null) {
|
|
425
|
+
// Clean specific PR
|
|
426
|
+
await cleanSpecific(prNumber, repoRoot, config, options);
|
|
427
|
+
}
|
|
428
|
+
else if (options.all) {
|
|
429
|
+
// Clean all merged/closed
|
|
430
|
+
await cleanAll(repoRoot, config, options);
|
|
431
|
+
}
|
|
432
|
+
else {
|
|
433
|
+
// Interactive mode
|
|
434
|
+
await interactiveClean(repoRoot, config, options);
|
|
435
|
+
}
|
|
436
|
+
}
|
|
437
|
+
main().catch((err) => {
|
|
438
|
+
console.error(colors.error(`Error: ${err.message}`));
|
|
439
|
+
process.exit(1);
|
|
440
|
+
});
|
|
441
|
+
//# sourceMappingURL=cleanpr.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cleanpr.js","sourceRoot":"","sources":["../../src/cli/cleanpr.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lswt.d.ts","sourceRoot":"","sources":["../../src/cli/lswt.ts"],"names":[],"mappings":";AACA;;;;;;;GAOG"}
|