diff --git a/runtime/lua/vim/pack.lua b/runtime/lua/vim/pack.lua index de3a64c325..2962c994f7 100644 --- a/runtime/lua/vim/pack.lua +++ b/runtime/lua/vim/pack.lua @@ -107,7 +107,9 @@ local M = {} local function git_cmd(cmd, cwd) -- Use '-c gc.auto=0' to disable `stderr` "Auto packing..." messages cmd = vim.list_extend({ 'git', '-c', 'gc.auto=0' }, cmd) - local sys_opts = { cwd = cwd, text = true, clear_env = true } + local env = vim.fn.environ() --- @type table + env.GIT_DIR, env.GIT_WORK_TREE = nil, nil + local sys_opts = { cwd = cwd, text = true, env = env, clear_env = true } local out = async.await(3, vim.system, cmd, sys_opts) --- @type vim.SystemCompleted async.await(1, vim.schedule) if out.code ~= 0 then diff --git a/test/functional/plugin/pack_spec.lua b/test/functional/plugin/pack_spec.lua index a8664b80b9..bbd9ada85a 100644 --- a/test/functional/plugin/pack_spec.lua +++ b/test/functional/plugin/pack_spec.lua @@ -664,6 +664,19 @@ describe('vim.pack', function() eq('basic main', exec_lua('return require("basic")')) end) + it('is not affected by special environment variables', function() + fn.setenv('GIT_WORK_TREE', fn.getcwd()) + fn.setenv('GIT_DIR', vim.fs.joinpath(fn.getcwd(), '.git')) + local ref_environ = fn.environ() + + exec_lua(function() + vim.pack.add({ repos_src.basic }) + end) + eq('basic main', exec_lua('return require("basic")')) + + eq(ref_environ, fn.environ()) + end) + it('validates input', function() local validate = function(err_pat, input) local add_input = function() @@ -1163,6 +1176,20 @@ describe('vim.pack', function() eq({ 'return "fetch new 2"' }, fn.readfile(fetch_lua_file)) end) + it('is not affected by special environment variables', function() + fn.setenv('GIT_WORK_TREE', fn.getcwd()) + fn.setenv('GIT_DIR', vim.fs.joinpath(fn.getcwd(), '.git')) + local ref_environ = fn.environ() + + exec_lua(function() + vim.pack.add({ repos_src.fetch }) + vim.pack.update({ 'fetch' }, { force = true }) + end) + eq({ 'return "fetch new 2"' }, fn.readfile(fetch_lua_file)) + + eq(ref_environ, fn.environ()) + end) + it('validates input', function() local validate = function(err_pat, input) local update_input = function()