fix(vim.system): clear_env=true gives an invalid env to uv.spawn #33955

Problem:
In setup_env, some needed logic is bypassed when clear_env=true.

Solution:
Drop the early return in setup_env().

Co-authored-by: BirdeeHub <birdee@localhost>
This commit is contained in:
Birdee
2025-06-25 15:15:19 -07:00
committed by GitHub
parent 4369d7d9a7
commit 731e616a79
2 changed files with 24 additions and 6 deletions

View File

@ -208,15 +208,13 @@ end
--- @param clear_env? boolean
--- @return string[]?
local function setup_env(env, clear_env)
if clear_env then
return env
if not clear_env then
--- @type table<string,string|number>
env = vim.tbl_extend('force', base_env(), env or {})
end
--- @type table<string,string|number>
env = vim.tbl_extend('force', base_env(), env or {})
local renv = {} --- @type string[]
for k, v in pairs(env) do
for k, v in pairs(env or {}) do
renv[#renv + 1] = string.format('%s=%s', k, tostring(v))
end

View File

@ -73,6 +73,26 @@ describe('vim.system', function()
eq('hellocat', system({ 'cat' }, { stdin = 'hellocat', text = true }).stdout)
end)
it('can set environment', function()
eq(
'TESTVAL',
system(
{ n.testprg('printenv-test'), 'TEST' },
{ env = { TEST = 'TESTVAL' }, text = true }
).stdout
)
end)
it('can set environment with clear_env = true', function()
eq(
'TESTVAL',
system(
{ n.testprg('printenv-test'), 'TEST' },
{ clear_env = true, env = { TEST = 'TESTVAL' }, text = true }
).stdout
)
end)
it('supports timeout', function()
eq({
code = 124,