| 18 | } |
| 19 | |
| 20 | export function acquireServerLock( |
| 21 | lockDir: string, |
| 22 | init: { |
| 23 | port: number; |
| 24 | worktreeRoot: string; |
| 25 | kind?: LockKind; |
| 26 | parentPid?: number; |
| 27 | capabilities?: string[]; |
| 28 | }, |
| 29 | ): string { |
| 30 | try { |
| 31 | const handle = acquireProcessLock({ lockName: 'server', lockDir, metadata: init }); |
| 32 | return handle.lockPath; |
| 33 | } catch (err) { |
| 34 | if (err instanceof ProcessLockCollisionError && err.lockName === 'server') { |
| 35 | throw new ServerLockCollisionError(err.existing, err.lockPath); |
| 36 | } |
| 37 | throw err; |
| 38 | } |
| 39 | } |
| 40 | |
| 41 | export function updateServerLockPort(lockDir: string, port: number): void { |
| 42 | updateProcessLockPort({ lockName: 'server', lockDir, port }); |