From 2c99f2f2e8b8ebe8868f9233e7fed7208a30e5da Mon Sep 17 00:00:00 2001 From: can1357 Date: Wed, 29 Jul 2026 22:52:43 +0200 Subject: [PATCH] fix(git): preserve effective character locale (cherry picked from commit ef7abf60ad1b80642ba1731e043f8eeb82c6a6aa) --- packages/coding-agent/src/utils/git.ts | 6 +----- packages/coding-agent/test/tools/gh.test.ts | 8 ++++++-- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/packages/coding-agent/src/utils/git.ts b/packages/coding-agent/src/utils/git.ts index db3f2fb9d..2b31ea95d 100644 --- a/packages/coding-agent/src/utils/git.ts +++ b/packages/coding-agent/src/utils/git.ts @@ -385,11 +385,7 @@ function buildNonInteractiveEnv( pinnedEnv: Record, ): Record { const preservedCharacterLocale = - (env.LC_CTYPE === undefined || env.LC_CTYPE === "") && - env.LC_ALL !== undefined && - /(?:^|[._-])utf-?8(?:$|[.@_-])/i.test(env.LC_ALL) - ? env.LC_ALL - : undefined; + env.LC_ALL !== undefined && /(?:^|[._-])utf-?8(?:$|[.@_-])/i.test(env.LC_ALL) ? env.LC_ALL : undefined; return { ...env, ...(preservedCharacterLocale === undefined ? {} : { LC_CTYPE: preservedCharacterLocale }), diff --git a/packages/coding-agent/test/tools/gh.test.ts b/packages/coding-agent/test/tools/gh.test.ts index b5794135f..120b5c776 100644 --- a/packages/coding-agent/test/tools/gh.test.ts +++ b/packages/coding-agent/test/tools/gh.test.ts @@ -1130,6 +1130,12 @@ exec ${JSON.stringify(realGit)} "$@" delete process.env.LC_MESSAGES; await git.diff(remoteFixture.repoRoot, { env: { LC_MESSAGES: undefined } }); + process.env.EXPECTED_LC_CTYPE = "fr_FR.UTF-8"; + process.env.LC_ALL = "fr_FR.UTF-8"; + process.env.LC_CTYPE = "C"; + process.env.LC_MESSAGES = "fr_FR.UTF-8"; + await git.diff(remoteFixture.repoRoot, { env: { LC_MESSAGES: undefined } }); + process.env.EXPECTED_LC_CTYPE = "UTF-8-SENTINEL"; process.env.LC_ALL = "fr_FR.UTF-8"; process.env.LC_CTYPE = "UTF-8-SENTINEL"; @@ -1184,8 +1190,6 @@ echo ok `, ); const realWhich = $which; - process.env.PATH = ""; - expect(realWhich("gh", { cache: WhichCachePolicy.Bypass, PATH: "" })).toBeNull(); const whichSpy = vi .spyOn(piUtils, "$which") .mockImplementation((command, options) =>