From bac4cde9cd43dcb1bb962d71f3f9253813a701a3 Mon Sep 17 00:00:00 2001 From: Evgeni Chasnovski Date: Mon, 12 Jan 2026 22:57:38 +0200 Subject: fix(pack): actually checkout proper version of submodules Problem: Installing plugin with submodules doesn't check out their state (due to `git clone --no-checkout` to not end up with default branch code in case of invalid `version`). Updating a plugin with submodules doesn't update their state. Solution: Update `git_checkout` helper to account for submodules. Another approach would be `git checkout --recurse-submodules ...`, but that doesn't seem to allow `--filter=blob:none` for submodules, which is nice to have. Also make `git_clone` wrapper simpler since `--no-checkout` makes `--recurse-submodules` and `--also-filter-submodules` do nothing. --- runtime/lua/vim/pack.lua | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) (limited to 'runtime/lua/vim/pack.lua') diff --git a/runtime/lua/vim/pack.lua b/runtime/lua/vim/pack.lua index 7b0aebaff9..9aabc91351 100644 --- a/runtime/lua/vim/pack.lua +++ b/runtime/lua/vim/pack.lua @@ -264,17 +264,12 @@ end --- @param url string --- @param path string local function git_clone(url, path) - local cmd = { 'clone', '--quiet', '--no-checkout', '--recurse-submodules' } + local cmd = { 'clone', '--quiet', '--no-checkout' } if vim.startswith(url, 'file://') then cmd[#cmd + 1] = '--no-hardlinks' - else - if git_version >= vim.version.parse('2.36') then - cmd[#cmd + 1] = '--filter=blob:none' - cmd[#cmd + 1] = '--also-filter-submodules' - elseif git_version >= vim.version.parse('2.27') then - cmd[#cmd + 1] = '--filter=blob:none' - end + elseif git_version >= vim.version.parse('2.27') then + cmd[#cmd + 1] = '--filter=blob:none' end vim.list_extend(cmd, { '--origin', 'origin', url, path }) @@ -669,6 +664,12 @@ local function checkout(p, timestamp, skip_stash) git_cmd({ 'checkout', '--quiet', p.info.sha_target }, p.path) + local submodule_cmd = { 'submodule', 'update', '--init', '--recursive' } + if git_version >= vim.version.parse('2.36') then + submodule_cmd[#submodule_cmd + 1] = '--filter=blob:none' + end + git_cmd(submodule_cmd, p.path) + plugin_lock.plugins[p.spec.name].rev = p.info.sha_target -- (Re)Generate help tags according to the current help files. -- cgit