fix(cli): hide commit-message git windows on Windows (#7692)

Prevent cmd.exe flashes when commit message generation shells out to git on Windows and add a regression test for the subprocess flags.
This commit is contained in:
Marius
2026-03-26 13:59:04 +01:00
committed by GitHub
parent 589e7a08e0
commit 79d2567e6c
2 changed files with 40 additions and 1 deletions
@@ -133,6 +133,7 @@ function git(args: string[], cwd: string): string {
cwd,
stdout: "pipe",
stderr: "pipe",
windowsHide: true, // kilocode_change - prevent cmd.exe flash on Windows
})
return result.stdout.toString().trimEnd()
}
@@ -144,7 +145,7 @@ function parseNameStatus(output: string): Array<{ status: string; path: string }
let path: string
if (status!.startsWith("R")) {
// Rename: rest = ["old.ts", "new.ts"], use the new path
path = rest[1] ?? rest[0]
path = rest[1] ?? rest[0] ?? ""
} else {
path = rest.join("\t")
}
@@ -0,0 +1,38 @@
import { describe, expect, spyOn, test } from "bun:test"
import { getGitContext } from "../../src/commit-message/git-context"
describe("commit-message git context", () => {
test("hides Windows console windows for git subprocesses", async () => {
const out = new Map([
["branch --show-current", "main"],
["log --oneline -5", "abc1234 init"],
["diff --name-status --cached", "M\tsrc/index.ts"],
["diff --cached -- src/index.ts", "+console.log('hi')"],
])
const spy = spyOn(Bun, "spawnSync").mockImplementation(((cmd: unknown, opts: unknown) => {
const key = Array.isArray(cmd) ? cmd.slice(1).join(" ") : ""
return {
stdout: Buffer.from(out.get(key) ?? ""),
stderr: Buffer.alloc(0),
} as never
}) as unknown as typeof Bun.spawnSync)
try {
await getGitContext("/repo")
expect(spy).toHaveBeenCalledTimes(4)
for (const call of spy.mock.calls) {
expect(call[0]).toEqual(expect.arrayContaining(["git"]))
expect(call[1]).toMatchObject({
cwd: "/repo",
stdout: "pipe",
stderr: "pipe",
windowsHide: true,
})
}
} finally {
spy.mockRestore()
}
})
})