From 58302b2010913d6e236570bbe8c9abe38de7fa18 Mon Sep 17 00:00:00 2001 From: Eric Tsai <52527831+EricTsai83@users.noreply.github.com> Date: Fri, 17 Jul 2026 19:14:29 +0800 Subject: [PATCH] fix(git): treat selected commit paths literally (#3998) --- apps/server/src/vcs/GitVcsDriverCore.test.ts | 18 ++++++++++++++++++ apps/server/src/vcs/GitVcsDriverCore.ts | 1 + 2 files changed, 19 insertions(+) diff --git a/apps/server/src/vcs/GitVcsDriverCore.test.ts b/apps/server/src/vcs/GitVcsDriverCore.test.ts index dc58fc2543c65252bd6c7f0400fb209358697057..ea8d03eb97182bd253ac41eba22ef1dce5ec1db1 100644 --- a/apps/server/src/vcs/GitVcsDriverCore.test.ts +++ b/apps/server/src/vcs/GitVcsDriverCore.test.ts @@ -620,6 +620,24 @@ it.layer(TestLayer)("GitVcsDriver core integration", (it) => { assert.notInclude(status, "a.txt"); }), ); + + it.effect("treats selected file paths literally", () => + Effect.gen(function* () { + const cwd = yield* makeTmpDir(); + yield* initRepoWithCommit(cwd); + const driver = yield* GitVcsDriver.GitVcsDriver; + + yield* writeTextFile(cwd, "selected[1].txt", "literal\n"); + yield* writeTextFile(cwd, "selected1.txt", "pattern match\n"); + + yield* driver.prepareCommitContext(cwd, ["selected[1].txt"]); + + assert.equal(yield* git(cwd, ["diff", "--cached", "--name-only"]), "selected[1].txt"); + + const status = yield* git(cwd, ["status", "--porcelain"]); + assert.include(status, "?? selected1.txt"); + }), + ); }); describe("remote operations", () => { diff --git a/apps/server/src/vcs/GitVcsDriverCore.ts b/apps/server/src/vcs/GitVcsDriverCore.ts index a406cbce5491b1eabf670ba6118e1134d9095aa8..d780ac23d2f7a8a43e80cb7525f24f176bc81732 100644 --- a/apps/server/src/vcs/GitVcsDriverCore.ts +++ b/apps/server/src/vcs/GitVcsDriverCore.ts @@ -1524,6 +1524,7 @@ export const makeGitVcsDriverCore = Effect.fn("makeGitVcsDriverCore")(function* }), ); yield* runGit("GitVcsDriver.prepareCommitContext.addSelected", cwd, [ + "--literal-pathspecs", "add", "-A", "--", -- 2.54.0