From f29dbbb1f828e010c1293aff902c9732b2981ea9 Mon Sep 17 00:00:00 2001 From: insects Date: Wed, 18 Mar 2026 00:17:14 +0800 Subject: [PATCH] fix(review): disable external diff in git commands (#320) --- apps/pi-extension/review-core.ts | 10 +++++++--- apps/review/server/index.ts | 6 +++--- bun.lock | 7 ++++--- packages/shared/review-core.test.ts | 2 +- packages/shared/review-core.ts | 10 +++++++--- 5 files changed, 22 insertions(+), 13 deletions(-) diff --git a/apps/pi-extension/review-core.ts b/apps/pi-extension/review-core.ts index 7d150c59..180d974e 100644 --- a/apps/pi-extension/review-core.ts +++ b/apps/pi-extension/review-core.ts @@ -188,6 +188,7 @@ async function getUntrackedFileDiffs( const diffResult = await runtime.runGit( [ "diff", + "--no-ext-diff", "--no-index", `--src-prefix=${srcPrefix}`, `--dst-prefix=${dstPrefix}`, @@ -271,6 +272,7 @@ export async function runGitDiff( case "uncommitted": { const trackedDiffArgs = [ "diff", + "--no-ext-diff", "HEAD", "--src-prefix=a/", "--dst-prefix=b/", @@ -298,6 +300,7 @@ export async function runGitDiff( case "staged": { const stagedDiffArgs = [ "diff", + "--no-ext-diff", "--staged", "--src-prefix=a/", "--dst-prefix=b/", @@ -312,7 +315,7 @@ export async function runGitDiff( } case "unstaged": { - const trackedDiffArgs = ["diff", "--src-prefix=a/", "--dst-prefix=b/"]; + const trackedDiffArgs = ["diff", "--no-ext-diff", "--src-prefix=a/", "--dst-prefix=b/"]; const trackedDiff = assertGitSuccess( await runtime.runGit(trackedDiffArgs, { cwd }), trackedDiffArgs, @@ -335,8 +338,8 @@ export async function runGitDiff( ); const args = hasParent.exitCode === 0 - ? ["diff", "HEAD~1..HEAD", "--src-prefix=a/", "--dst-prefix=b/"] - : ["diff", "--root", "HEAD", "--src-prefix=a/", "--dst-prefix=b/"]; + ? ["diff", "--no-ext-diff", "HEAD~1..HEAD", "--src-prefix=a/", "--dst-prefix=b/"] + : ["diff", "--no-ext-diff", "--root", "HEAD", "--src-prefix=a/", "--dst-prefix=b/"]; const lastCommitDiff = assertGitSuccess( await runtime.runGit(args, { cwd }), args, @@ -349,6 +352,7 @@ export async function runGitDiff( case "branch": { const branchDiffArgs = [ "diff", + "--no-ext-diff", `${defaultBranch}..HEAD`, "--src-prefix=a/", "--dst-prefix=b/", diff --git a/apps/review/server/index.ts b/apps/review/server/index.ts index 1c27b2b0..dfefa7c5 100644 --- a/apps/review/server/index.ts +++ b/apps/review/server/index.ts @@ -34,11 +34,11 @@ const gitRef = args.filter((arg) => arg !== "--staged").join(" ").trim(); // Build git diff command let diffCommand: string[]; if (isStaged) { - diffCommand = ["git", "diff", "--staged"]; + diffCommand = ["git", "diff", "--no-ext-diff", "--staged"]; } else if (gitRef) { - diffCommand = ["git", "diff", gitRef]; + diffCommand = ["git", "diff", "--no-ext-diff", gitRef]; } else { - diffCommand = ["git", "diff"]; + diffCommand = ["git", "diff", "--no-ext-diff"]; } // Execute git diff diff --git a/bun.lock b/bun.lock index fc893908..3e18d8f3 100644 --- a/bun.lock +++ b/bun.lock @@ -1,5 +1,6 @@ { "lockfileVersion": 1, + "configVersion": 0, "workspaces": { "": { "name": "plannotator", @@ -51,7 +52,7 @@ }, "apps/opencode-plugin": { "name": "@plannotator/opencode", - "version": "0.13.0", + "version": "0.13.1", "dependencies": { "@opencode-ai/plugin": "^1.1.10", }, @@ -73,7 +74,7 @@ }, "apps/pi-extension": { "name": "@plannotator/pi-extension", - "version": "0.13.0", + "version": "0.13.1", "peerDependencies": { "@mariozechner/pi-coding-agent": ">=0.53.0", }, @@ -153,7 +154,7 @@ }, "packages/server": { "name": "@plannotator/server", - "version": "0.13.0", + "version": "0.13.1", "dependencies": { "@plannotator/shared": "workspace:*", }, diff --git a/packages/shared/review-core.test.ts b/packages/shared/review-core.test.ts index da7104da..65032fd6 100644 --- a/packages/shared/review-core.test.ts +++ b/packages/shared/review-core.test.ts @@ -134,7 +134,7 @@ describe("review-core", () => { expect(result.patch).toBe(""); expect(result.label).toBe("Error: branch"); - expect(result.error).toContain("git diff master..HEAD"); + expect(result.error).toContain("git diff --no-ext-diff master..HEAD"); }); test("git context lists worktrees and file content lookup returns old/new content", async () => { diff --git a/packages/shared/review-core.ts b/packages/shared/review-core.ts index 7d150c59..180d974e 100644 --- a/packages/shared/review-core.ts +++ b/packages/shared/review-core.ts @@ -188,6 +188,7 @@ async function getUntrackedFileDiffs( const diffResult = await runtime.runGit( [ "diff", + "--no-ext-diff", "--no-index", `--src-prefix=${srcPrefix}`, `--dst-prefix=${dstPrefix}`, @@ -271,6 +272,7 @@ export async function runGitDiff( case "uncommitted": { const trackedDiffArgs = [ "diff", + "--no-ext-diff", "HEAD", "--src-prefix=a/", "--dst-prefix=b/", @@ -298,6 +300,7 @@ export async function runGitDiff( case "staged": { const stagedDiffArgs = [ "diff", + "--no-ext-diff", "--staged", "--src-prefix=a/", "--dst-prefix=b/", @@ -312,7 +315,7 @@ export async function runGitDiff( } case "unstaged": { - const trackedDiffArgs = ["diff", "--src-prefix=a/", "--dst-prefix=b/"]; + const trackedDiffArgs = ["diff", "--no-ext-diff", "--src-prefix=a/", "--dst-prefix=b/"]; const trackedDiff = assertGitSuccess( await runtime.runGit(trackedDiffArgs, { cwd }), trackedDiffArgs, @@ -335,8 +338,8 @@ export async function runGitDiff( ); const args = hasParent.exitCode === 0 - ? ["diff", "HEAD~1..HEAD", "--src-prefix=a/", "--dst-prefix=b/"] - : ["diff", "--root", "HEAD", "--src-prefix=a/", "--dst-prefix=b/"]; + ? ["diff", "--no-ext-diff", "HEAD~1..HEAD", "--src-prefix=a/", "--dst-prefix=b/"] + : ["diff", "--no-ext-diff", "--root", "HEAD", "--src-prefix=a/", "--dst-prefix=b/"]; const lastCommitDiff = assertGitSuccess( await runtime.runGit(args, { cwd }), args, @@ -349,6 +352,7 @@ export async function runGitDiff( case "branch": { const branchDiffArgs = [ "diff", + "--no-ext-diff", `${defaultBranch}..HEAD`, "--src-prefix=a/", "--dst-prefix=b/",