From 4d0d5f1f50c9c5e32a5bffa9bbf41c4513f6bbd0 Mon Sep 17 00:00:00 2001 From: BlankParticle Date: Sun, 4 Oct 2026 15:39:51 +0530 Subject: [PATCH] fix(server): honor submodule settings when creating worktrees --- apps/server/src/git/GitManager.ts | 20 ++++++++++++++++++++ apps/server/src/git/GitWorkflowService.ts | 2 +- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/apps/server/src/git/GitManager.ts b/apps/server/src/git/GitManager.ts index 2b88cd79f8e6..e5cb12c233c8 100644 --- a/apps/server/src/git/GitManager.ts +++ b/apps/server/src/git/GitManager.ts @@ -35,6 +35,8 @@ import { type SourceControlProviderKind, type SourceControlWritingStyleSettings, type ThreadId, + type VcsCreateWorktreeInput, + type VcsCreateWorktreeResult, } from "@t3tools/contracts"; import { hasProjectSettingsOverrides, @@ -103,6 +105,10 @@ interface SourceControlTextGenerationSettings { export class GitManager extends Context.Service< GitManager, { + readonly createWorktree: ( + input: VcsCreateWorktreeInput, + options?: GitVcsDriver.CreateWorktreeOptions, + ) => Effect.Effect; readonly status: ( input: VcsStatusInput, ) => Effect.Effect; @@ -727,6 +733,19 @@ export const make = Effect.gen(function* () { ); return resolveProjectSettings(settings, projectId).settings; }); + const createWorktree: GitManager["Service"]["createWorktree"] = Effect.fn( + "GitManager.createWorktree", + )(function* (input, options) { + const submodules = + options?.submodules !== undefined + ? options.submodules + : yield* projectSettingsFor(input).pipe( + Effect.map((settings) => settings.worktreeSubmodules), + Effect.orElseSucceed(() => null), + ); + return yield* gitCore.createWorktree(input, { ...options, submodules }); + }); + const readRepositoryInstructions = (cwd: string, fileName: string) => Effect.gen(function* () { const root = yield* fileSystem.realPath(cwd); @@ -2848,6 +2867,7 @@ export const make = Effect.gen(function* () { ); return GitManager.of({ + createWorktree, localStatus, remoteStatus, status, diff --git a/apps/server/src/git/GitWorkflowService.ts b/apps/server/src/git/GitWorkflowService.ts index 912e0c1f4620..bc7f2d9fb2ea 100644 --- a/apps/server/src/git/GitWorkflowService.ts +++ b/apps/server/src/git/GitWorkflowService.ts @@ -347,7 +347,7 @@ export const make = Effect.gen(function* () { ), createWorktree: (input, options) => ensureGitCommand("GitWorkflowService.createWorktree", input.cwd).pipe( - Effect.andThen(git.createWorktree(input, options)), + Effect.andThen(gitManager.createWorktree(input, options)), ), listLocalBranchNames: (cwd) => ensureGitCommand("GitWorkflowService.listLocalBranchNames", cwd).pipe(