Sfoglia il codice sorgente

fix(app): use location VCS state (#42666)

opencode-agent[bot] 1 giorno fa
parent
commit
a45b12cfa4

+ 7 - 0
packages/app/src/pages/new-session/new-session-workspace-controller.test.ts

@@ -2,6 +2,7 @@ import { describe, expect, test } from "bun:test"
 import {
   normalizeNewSessionWorktree,
   resolveNewSessionBranch,
+  resolveNewSessionGit,
   resolveNewSessionWorktree,
 } from "./new-session-workspace-controller"
 
@@ -47,4 +48,10 @@ describe("new session workspace selection", () => {
     )
     expect(resolveNewSessionBranch({ worktree: "/missing", local: "dev", worktreeBranch: branch })).toBe("dev")
   })
+
+  test("uses location VCS state when the project inventory is stale", () => {
+    expect(resolveNewSessionGit({ branch: "dev" })).toBe(true)
+    expect(resolveNewSessionGit({ projectVcs: "git" })).toBe(true)
+    expect(resolveNewSessionGit({})).toBe(false)
+  })
 })

+ 9 - 2
packages/app/src/pages/new-session/new-session-workspace-controller.ts

@@ -39,6 +39,10 @@ export function resolveNewSessionBranch(input: {
   return input.worktreeBranch(input.worktree) ?? input.local
 }
 
+export function resolveNewSessionGit(input: { projectVcs?: string; branch?: string }) {
+  return input.projectVcs === "git" || input.branch !== undefined
+}
+
 export function createNewSessionWorkspaceController(input: {
   selected: () => string | undefined
   setSelected: (worktree: string | undefined) => void
@@ -49,7 +53,10 @@ export function createNewSessionWorkspaceController(input: {
   const serverSDK = useServerSDK()
   const serverSync = useServerSync()
   const settings = useSettings()
-  const visible = createMemo(() => sync().project?.vcs === "git")
+  const localVcs = createMemo(() => serverSync.child(sdk().directory)[0].vcs)
+  const visible = createMemo(() =>
+    resolveNewSessionGit({ projectVcs: sync().project?.vcs, branch: localVcs()?.branch }),
+  )
   const selected = createMemo(() => {
     const project = sync().project
     const worktree = input.selected()
@@ -110,7 +117,7 @@ export function createNewSessionWorkspaceController(input: {
         const project = sync().project
         return project ? workspaceDirectories(project) : []
       },
-      git: () => sync().project?.vcs === "git",
+      git: visible,
       openAll: input.onViewAll,
     },
     bar: {