(params: DeleteWorkTreeParams)
| 1266 | } |
| 1267 | |
| 1268 | async function handleDeleteWorkTree(params: DeleteWorkTreeParams): Promise<DeleteWorkTreeResponse> { |
| 1269 | const startTime = Date.now() |
| 1270 | logger.info("[Git:deleteWorkTree] Deleting worktree", JSON.stringify({ repoDir: params.repoDir, id: params.id })) |
| 1271 | |
| 1272 | try { |
| 1273 | validateRepoDir(params.repoDir) |
| 1274 | validateWorkTreeId(params.id) |
| 1275 | |
| 1276 | const { repoRoot } = await resolveGitInfo(params.repoDir) |
| 1277 | const worktreePath = getWorktreePath(params.id) |
| 1278 | |
| 1279 | // First, manually delete the directory if it exists (handles node_modules etc) |
| 1280 | if (fs.existsSync(worktreePath)) { |
| 1281 | logger.info("[Git:deleteWorkTree] Removing directory first", JSON.stringify({ worktreePath })) |
| 1282 | await fsExtra.remove(worktreePath) |
| 1283 | } |
| 1284 | |
| 1285 | // Then prune git's worktree tracking |
| 1286 | await execGit(["worktree", "prune"], repoRoot) |
| 1287 | |
| 1288 | logger.info("[Git:deleteWorkTree] Worktree removed successfully", JSON.stringify({ worktreePath, duration: Date.now() - startTime })) |
| 1289 | return { deleted: true } |
| 1290 | } catch (error: unknown) { |
| 1291 | const errorMessage = error instanceof Error ? error.message : String(error) |
| 1292 | const errorStack = error instanceof Error ? error.stack : undefined |
| 1293 | logger.error("[Git:deleteWorkTree] Error:", JSON.stringify({ error: errorMessage, stack: errorStack, duration: Date.now() - startTime })) |
| 1294 | return { deleted: false, error: errorMessage } |
| 1295 | } |
| 1296 | } |
| 1297 | |
| 1298 | async function handleIsBranchMerged(params: IsBranchMergedParams): Promise<boolean> { |
| 1299 | const { repoRoot } = await resolveGitInfo(params.repoDir) |
no test coverage detected