fix(vim.system): env=nil passes env=nil to uv.spawn

731e616a79 made it so passing `{env = nil, clear_env = true }` would
pass `{env = {}}` to `vim.uv.spawn`.

However this is not what `clear_env` is (arguably) supposed to do.
If `env=nil` then that implies the uses wants `vim.uv.spawn()` to use
the default environment. Adding `clear_env = true` simply prevents
`NVIM` (the base environment) from being added.

Fixes #34730

(cherry picked from commit 4eebc46930)
This commit is contained in:
Lewis Russell
2025-07-02 12:08:48 +01:00
committed by github-actions[bot]
parent 2d3517012a
commit e732cbe36c
4 changed files with 32 additions and 4 deletions

View File

@@ -93,6 +93,27 @@ describe('vim.system', function()
)
end)
it('can set environment with clear_env = true and env = nil', function()
exec_lua(function()
vim.env.TEST = 'TESTVAL'
end)
-- Not passing env with clear_env should not clear the environment
eq(
'TESTVAL',
system({ n.testprg('printenv-test'), 'TEST' }, { clear_env = true, text = true }).stdout
)
-- Passing env = {} with clear_env should clear the environment
eq(
'',
system(
{ n.testprg('printenv-test'), 'TEST' },
{ env = {}, clear_env = true, text = true }
).stdout
)
end)
it('supports timeout', function()
eq({
code = 124,