diff --git a/packages/app/src/runtime/server/global-sync/utils.test.ts b/packages/app/src/runtime/server/global-sync/utils.test.ts index da051c3311c..7a29c194019 100644 --- a/packages/app/src/runtime/server/global-sync/utils.test.ts +++ b/packages/app/src/runtime/server/global-sync/utils.test.ts @@ -1,6 +1,6 @@ import { describe, expect, test } from "bun:test" -import type { AgentListOutput, ModelListOutput, ProviderListOutput } from "@opencode-ai/client/promise" -import { directoryKey, normalizeAgentList, normalizeProviderList } from "./utils" +import type { AgentListOutput, ModelListOutput, Project, ProviderListOutput } from "@opencode-ai/client/promise" +import { directoryKey, normalizeAgentList, normalizeProjectInfo, normalizeProviderList } from "./utils" describe("normalizeAgentList", () => { test("adapts current agents to the app agent shape", () => { @@ -85,6 +85,15 @@ describe("normalizeProviderList", () => { }) }) +describe("normalizeProjectInfo", () => { + test("keeps the project VCS backend", () => { + const project = { id: "prj", canonical: "/repo", time: { created: 1, updated: 1 }, sandboxes: [] } + expect(normalizeProjectInfo({ ...project, vcs: "git" } as Project).vcs).toBe("git") + expect(normalizeProjectInfo({ ...project, vcs: "hg" } as Project).vcs).toBe("hg") + expect(normalizeProjectInfo(project as Project).vcs).toBeUndefined() + }) +}) + describe("directoryKey", () => { test("normalizes slashes", () => { expect(String(directoryKey("C:\\Repos\\sst\\opencode"))).toBe("C:/Repos/sst/opencode") diff --git a/packages/app/src/runtime/server/global-sync/utils.ts b/packages/app/src/runtime/server/global-sync/utils.ts index 3cddc558a21..a83ef47e9c9 100644 --- a/packages/app/src/runtime/server/global-sync/utils.ts +++ b/packages/app/src/runtime/server/global-sync/utils.ts @@ -135,6 +135,5 @@ export function normalizeProjectInfo(project: Project | CurrentProject): Project ...project, worktree, worktrees: "worktrees" in project ? project.worktrees : [{ directory: worktree }], - vcs: project.vcs === "git" ? "git" : undefined, } } diff --git a/packages/app/src/session/review/model.ts b/packages/app/src/session/review/model.ts index d4f1da6c4ca..d4d9cd68ddb 100644 --- a/packages/app/src/session/review/model.ts +++ b/packages/app/src/session/review/model.ts @@ -55,9 +55,9 @@ export function createSessionReview(input: { const options = createMemo(() => { const list: ChangeMode[] = [] const project = input.session.project() - if (project?.vcs === "git") list.push("git") + if (project?.vcs) list.push("git") if ( - project?.vcs === "git" && + project?.vcs && vcs()?.branch.current && vcs()?.branch.default && vcs()?.branch.current !== vcs()?.branch.default @@ -94,7 +94,7 @@ export function createSessionReview(input: { const value = vcsMode() return { queryKey: [...vcsKey(), value] as const, - enabled: server.connection.status() === "connected" && wantsReview() && input.session.project()?.vcs === "git", + enabled: server.connection.status() === "connected" && wantsReview() && !!input.session.project()?.vcs, refetchOnMount: "always" as const, refetchOnWindowFocus: true, queryFn: value @@ -110,7 +110,7 @@ export function createSessionReview(input: { }) const detailsQuery = createQuery(() => ({ queryKey: [server.scope, "session-details", input.session.workspace.directory()] as const, - enabled: state.detailsOpen && server.connection.status() === "connected" && input.session.project()?.vcs === "git", + enabled: state.detailsOpen && server.connection.status() === "connected" && !!input.session.project()?.vcs, queryFn: () => server.api.vcs .diff({ location: { directory: input.session.workspace.directory() }, mode: "working" }) @@ -413,7 +413,7 @@ export function createSessionReview(input: { tab: () => state.mobileTab, }, mode, - noGit: createMemo(() => !!input.session.project() && input.session.project()?.vcs !== "git"), + noGit: createMemo(() => !!input.session.project() && !input.session.project()?.vcs), open, openFile, options, diff --git a/packages/app/src/session/screen.tsx b/packages/app/src/session/screen.tsx index 7bec153f9d2..f227eba5868 100644 --- a/packages/app/src/session/screen.tsx +++ b/packages/app/src/session/screen.tsx @@ -165,7 +165,7 @@ export function SessionScreen(props: { session: SessionModel }) { baseBranch={ session.shared.data.location.vcs.info({ directory: project().worktree })?.branch.current } - diffs={project().vcs === "git" ? review.details.diffs() : []} + diffs={project().vcs ? review.details.diffs() : []} sessionID={session.identity.params.id ?? ""} moveEligible={composer.workspaceMoveEligible()} moveDismissed={store.mobileMoveDismissed}