diff --git a/packages/app/src/new-session/workspace/controller.test.ts b/packages/app/src/new-session/workspace/controller.test.ts index 4c5f242f772..44949821938 100644 --- a/packages/app/src/new-session/workspace/controller.test.ts +++ b/packages/app/src/new-session/workspace/controller.test.ts @@ -1,10 +1,5 @@ import { describe, expect, test } from "bun:test" -import { - normalizeNewSessionWorktree, - resolveNewSessionBranch, - resolveNewSessionGit, - resolveNewSessionWorktree, -} from "./controller" +import { resolveNewSessionBranch, resolveNewSessionGit, resolveNewSessionWorktree } from "./controller" describe("new session workspace selection", () => { test("uses main when the workspace bar is unavailable", () => { @@ -12,8 +7,6 @@ describe("new session workspace selection", () => { resolveNewSessionWorktree({ enabled: false, selected: "/project/feature", - directory: "/project/feature", - projectWorktree: "/project", }), ).toBe("main") }) @@ -22,31 +15,21 @@ describe("new session workspace selection", () => { expect( resolveNewSessionWorktree({ enabled: true, - directory: "/project/feature", - projectWorktree: "/project", fallback: "create", }), ).toBe("create") expect( resolveNewSessionWorktree({ enabled: true, - directory: "/project/feature", - projectWorktree: "/project", fallback: "main", }), - ).toBe("/project") - }) - - test("normalizes main to the project root outside the main worktree", () => { - expect(normalizeNewSessionWorktree("main", "/project/feature", "/project")).toBe("/project") - expect(normalizeNewSessionWorktree("main", "/project", "/project")).toBe("main") - }) - - test("treats equivalent Windows roots as the main worktree", () => { - expect( - resolveNewSessionWorktree({ enabled: true, directory: "C:\\Repo\\", projectWorktree: "c:/repo" }), ).toBe("main") - expect(normalizeNewSessionWorktree("main", "C:\\Repo\\", "c:/repo")).toBe("main") + }) + + test("keeps local selection when the cached project path is stale", () => { + const input = { enabled: true, directory: "C:/Projects/repo", projectWorktree: "D:/Projects/repo" } + expect(resolveNewSessionWorktree(input)).toBe("main") + expect(resolveNewSessionWorktree({ ...input, selected: "/worktree" })).toBe("/worktree") }) test("resolves the branch from the active location", () => { diff --git a/packages/app/src/new-session/workspace/controller.ts b/packages/app/src/new-session/workspace/controller.ts index 6bdfcd7e9e8..b0e42ddb91f 100644 --- a/packages/app/src/new-session/workspace/controller.ts +++ b/packages/app/src/new-session/workspace/controller.ts @@ -11,27 +11,15 @@ import { normalizeProjectInfo } from "@/runtime/server/global-sync/utils" import { isWorkspaceDirectory, isWorkspaceSelection, - sameDirectory, workspaceDefaultSelection, workspaceDirectories, workspaceSelectionDestination, } from "@/workspaces/paths" -export function resolveNewSessionWorktree(input: { - enabled: boolean - selected?: string - directory: string - projectWorktree?: string - fallback?: string -}) { +export function resolveNewSessionWorktree(input: { enabled: boolean; selected?: string; fallback?: string }) { if (!input.enabled) return "main" if (input.selected) return input.selected - return normalizeNewSessionWorktree(input.fallback ?? "main", input.directory, input.projectWorktree) -} - -export function normalizeNewSessionWorktree(value: string, directory: string, projectWorktree?: string) { - if (value === "main" && projectWorktree && !sameDirectory(directory, projectWorktree)) return projectWorktree - return value + return input.fallback ?? "main" } export function resolveNewSessionBranch(input: { @@ -92,8 +80,6 @@ export function createNewSessionWorkspaceController(input: { resolveNewSessionWorktree({ enabled: visible(), selected: selected(), - directory: sdk().directory, - projectWorktree: currentProject()?.worktree, fallback: fallback(), }), ) @@ -145,7 +131,7 @@ export function createNewSessionWorkspaceController(input: { remember, set: (worktree: string) => { input.setSelectedBranch(undefined) - input.setSelectedWorktree(normalizeNewSessionWorktree(worktree, sdk().directory, currentProject()?.worktree)) + input.setSelectedWorktree(worktree) remember(worktree) }, create: (branch: string) => {