diff --git a/src/main/ipc/worktree-git-common-watch.test.ts b/src/main/ipc/worktree-git-common-watch.test.ts index bad700b5445..737a173049f 100644 --- a/src/main/ipc/worktree-git-common-watch.test.ts +++ b/src/main/ipc/worktree-git-common-watch.test.ts @@ -626,8 +626,8 @@ describe('worktree git-common narrow watch (local native platforms)', () => { expect(statCalls.filter((path) => path === worktreesDir)).toHaveLength(1) await vi.waitFor(() => { expect(subscribeMock).toHaveBeenCalledTimes(2) + expect(received.flat()).toContainEqual({ type: 'create', path: worktreesDir }) }) - expect(received.flat()).toContainEqual({ type: 'create', path: worktreesDir }) }) it('resumes polling when the dir is still absent on show', async () => { diff --git a/src/shared/workspace-session-terminal-buffers.ts b/src/shared/workspace-session-terminal-buffers.ts index ef8ac6a273b..706dbedc2d7 100644 --- a/src/shared/workspace-session-terminal-buffers.ts +++ b/src/shared/workspace-session-terminal-buffers.ts @@ -77,21 +77,24 @@ export function pruneLocalTerminalScrollbackBuffers( session: WorkspaceSessionState, repos: readonly RepoConnection[] ): WorkspaceSessionState { - const repoById = new Map(repos.map((repo) => [repo.id, repo] as const)) - const worktreeIdByTabId = new Map() + let repoById: Map | null = null + let worktreeIdByTabId: Map | null = null const tabsByWorktree = session.tabsByWorktree ?? {} const terminalLayoutsByTabIdForRead = session.terminalLayoutsByTabId ?? {} - for (const [worktreeId, tabs] of Object.entries(tabsByWorktree)) { - for (const tab of tabs) { - worktreeIdByTabId.set(tab.id, worktreeId) - } - } - let terminalLayoutsByTabId: WorkspaceSessionState['terminalLayoutsByTabId'] | null = null for (const [tabId, layout] of Object.entries(terminalLayoutsByTabIdForRead)) { if (!layout.buffersByLeafId && !layout.scrollbackRefsByLeafId) { continue } + repoById ??= new Map(repos.map((repo) => [repo.id, repo] as const)) + if (!worktreeIdByTabId) { + worktreeIdByTabId = new Map() + for (const [worktreeId, tabs] of Object.entries(tabsByWorktree)) { + for (const tab of tabs) { + worktreeIdByTabId.set(tab.id, worktreeId) + } + } + } const worktreeId = worktreeIdByTabId.get(tabId) if (shouldPreserveTerminalScrollbackBuffersForRepoMap(worktreeId, repoById)) { const capped = capTerminalScrollbackLeafBuffers(layout.buffersByLeafId)