neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

commit 731e616a79d01e4797badbb4e18d167c51125151
parent 4369d7d9a7804b8f9c2254da9f153d428115334a
Author: Birdee <85372418+BirdeeHub@users.noreply.github.com>
Date:   Wed, 25 Jun 2025 15:15:19 -0700

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>
Diffstat:
Mruntime/lua/vim/_system.lua | 10++++------
Mtest/functional/lua/system_spec.lua | 20++++++++++++++++++++
2 files changed, 24 insertions(+), 6 deletions(-)

diff --git a/runtime/lua/vim/_system.lua b/runtime/lua/vim/_system.lua @@ -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 diff --git a/test/functional/lua/system_spec.lua b/test/functional/lua/system_spec.lua @@ -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,