|
6 | 6 | branchExists, |
7 | 7 | getDefaultBranch, |
8 | 8 | } from "../queries.js"; |
| 9 | +import { safeSymlink } from "../utils.js"; |
9 | 10 |
|
10 | 11 | export interface CreateWorktreeInput extends GitSagaInput { |
11 | 12 | worktreePath: string; |
@@ -63,23 +64,29 @@ export class CreateWorktreeSaga extends GitSaga< |
63 | 64 | execute: async () => { |
64 | 65 | const sourceClaudeDir = path.join(baseDir, ".claude"); |
65 | 66 | const targetClaudeDir = path.join(worktreePath, ".claude"); |
66 | | - try { |
67 | | - await fs.access(sourceClaudeDir); |
68 | | - await fs.symlink(sourceClaudeDir, targetClaudeDir, "dir"); |
| 67 | + const linkedDir = await safeSymlink( |
| 68 | + sourceClaudeDir, |
| 69 | + targetClaudeDir, |
| 70 | + "dir", |
| 71 | + ); |
| 72 | + if (linkedDir) { |
69 | 73 | await addToLocalExclude(worktreePath, ".claude", { |
70 | 74 | abortSignal: signal, |
71 | 75 | }); |
72 | | - } catch {} |
| 76 | + } |
73 | 77 |
|
74 | 78 | const sourceClaudeLocalMd = path.join(baseDir, "CLAUDE.local.md"); |
75 | 79 | const targetClaudeLocalMd = path.join(worktreePath, "CLAUDE.local.md"); |
76 | | - try { |
77 | | - await fs.access(sourceClaudeLocalMd); |
78 | | - await fs.symlink(sourceClaudeLocalMd, targetClaudeLocalMd, "file"); |
| 80 | + const linkedFile = await safeSymlink( |
| 81 | + sourceClaudeLocalMd, |
| 82 | + targetClaudeLocalMd, |
| 83 | + "file", |
| 84 | + ); |
| 85 | + if (linkedFile) { |
79 | 86 | await addToLocalExclude(worktreePath, "CLAUDE.local.md", { |
80 | 87 | abortSignal: signal, |
81 | 88 | }); |
82 | | - } catch {} |
| 89 | + } |
83 | 90 | }, |
84 | 91 | rollback: async () => { |
85 | 92 | const targetClaudeDir = path.join(worktreePath, ".claude"); |
@@ -140,23 +147,29 @@ export class CreateWorktreeForBranchSaga extends GitSaga< |
140 | 147 | execute: async () => { |
141 | 148 | const sourceClaudeDir = path.join(baseDir, ".claude"); |
142 | 149 | const targetClaudeDir = path.join(worktreePath, ".claude"); |
143 | | - try { |
144 | | - await fs.access(sourceClaudeDir); |
145 | | - await fs.symlink(sourceClaudeDir, targetClaudeDir, "dir"); |
| 150 | + const linkedDir = await safeSymlink( |
| 151 | + sourceClaudeDir, |
| 152 | + targetClaudeDir, |
| 153 | + "dir", |
| 154 | + ); |
| 155 | + if (linkedDir) { |
146 | 156 | await addToLocalExclude(worktreePath, ".claude", { |
147 | 157 | abortSignal: signal, |
148 | 158 | }); |
149 | | - } catch {} |
| 159 | + } |
150 | 160 |
|
151 | 161 | const sourceClaudeLocalMd = path.join(baseDir, "CLAUDE.local.md"); |
152 | 162 | const targetClaudeLocalMd = path.join(worktreePath, "CLAUDE.local.md"); |
153 | | - try { |
154 | | - await fs.access(sourceClaudeLocalMd); |
155 | | - await fs.symlink(sourceClaudeLocalMd, targetClaudeLocalMd, "file"); |
| 163 | + const linkedFile = await safeSymlink( |
| 164 | + sourceClaudeLocalMd, |
| 165 | + targetClaudeLocalMd, |
| 166 | + "file", |
| 167 | + ); |
| 168 | + if (linkedFile) { |
156 | 169 | await addToLocalExclude(worktreePath, "CLAUDE.local.md", { |
157 | 170 | abortSignal: signal, |
158 | 171 | }); |
159 | | - } catch {} |
| 172 | + } |
160 | 173 | }, |
161 | 174 | rollback: async () => { |
162 | 175 | const targetClaudeDir = path.join(worktreePath, ".claude"); |
|
0 commit comments