diff --git a/runtime/lua/vim/pack.lua b/runtime/lua/vim/pack.lua index 13a97fa334..7b0aebaff9 100644 --- a/runtime/lua/vim/pack.lua +++ b/runtime/lua/vim/pack.lua @@ -654,15 +654,18 @@ end --- @async --- @param p vim.pack.Plug --- @param timestamp string -local function checkout(p, timestamp) +--- @param skip_stash? boolean +local function checkout(p, timestamp, skip_stash) infer_revisions(p) - local stash_cmd = { 'stash', '--quiet' } - if git_version > vim.version.parse('2.13') then - stash_cmd[#stash_cmd + 1] = '--message' - stash_cmd[#stash_cmd + 1] = ('vim.pack: %s Stash before checkout'):format(timestamp) + if not skip_stash then + local stash_cmd = { 'stash', '--quiet' } + if git_version > vim.version.parse('2.13') then + stash_cmd[#stash_cmd + 1] = '--message' + stash_cmd[#stash_cmd + 1] = ('vim.pack: %s Stash before checkout'):format(timestamp) + end + git_cmd(stash_cmd, p.path) end - git_cmd(stash_cmd, p.path) git_cmd({ 'checkout', '--quiet', p.info.sha_target }, p.path) @@ -691,7 +694,7 @@ local function install_list(plug_list, confirm) -- Prefer revision from the lockfile instead of using `version` p.info.sha_target = (plugin_lock.plugins[p.spec.name] or {}).rev - checkout(p, timestamp) + checkout(p, timestamp, true) p.info.installed = true trigger_event(p, 'PackChanged', 'install') diff --git a/test/functional/plugin/pack_spec.lua b/test/functional/plugin/pack_spec.lua index 1d3822cc40..9b4feb1b3b 100644 --- a/test/functional/plugin/pack_spec.lua +++ b/test/functional/plugin/pack_spec.lua @@ -369,6 +369,11 @@ describe('vim.pack', function() vim.pack.add({ repos_src.basic }) end) eq(exec_lua('return #_G.event_log'), 0) + + -- Should not create redundant stash entry + local basic_path = pack_get_plug_path('basic') + local stash_list = system_sync({ 'git', 'stash', 'list' }, { cwd = basic_path }).stdout or '' + eq('', stash_list) end) it('passes `data` field through to `opts.load`', function()