| ... | ... | @@ -1,4 +1,5 @@ |
| 1 | 1 | import { spawn } from "node:child_process"; |
| 2 | import fs from "node:fs"; |
| 2 | 3 | import os from "node:os"; |
| 3 | 4 | import path from "node:path"; |
| 4 | 5 | |
| ... | ... | @@ -131,12 +132,14 @@ export async function listGitBranches(input: GitListBranchesInput): Promise<GitL |
| 131 | 132 | defaultRef.code === 0 ? defaultRef.stdout.trim().replace(/^refs\/remotes\/origin\//, "") : null; |
| 132 | 133 | |
| 133 | 134 | // Build branch-name → worktree-path map from porcelain output. |
| 135 | // Only include worktrees whose directories still exist on disk (skip prunable/stale ones). |
| 134 | 136 | const worktreeMap = new Map<string, string>(); |
| 135 | 137 | if (worktreeList.code === 0) { |
| 136 | 138 | let currentPath: string | null = null; |
| 137 | 139 | for (const line of worktreeList.stdout.split("\n")) { |
| 138 | 140 | if (line.startsWith("worktree ")) { |
| 139 | 141 | currentPath = line.slice("worktree ".length); |
| 142 | if (!fs.existsSync(currentPath)) currentPath = null; |
| 140 | 143 | } else if (line.startsWith("branch refs/heads/") && currentPath) { |
| 141 | 144 | worktreeMap.set(line.slice("branch refs/heads/".length), currentPath); |
| 142 | 145 | } else if (line === "") { |