From dc8235c48c8be65659f75461d8cb185ab1941d0f Mon Sep 17 00:00:00 2001 From: Evgeni Chasnovski Date: Sat, 4 Oct 2025 16:15:54 +0300 Subject: feat(pack): prefer using revision from lockfile during install Problem: Installing plugin always pulls latest `version` changes (usually from the default branch or "latest version tag"). It is more robust to prefer initial installation to use the latest recorded (i.e. "working") revision. Solution: Prefer using revision from the lockfile (if present) during install. The extra `update()` will pull the latest changes. --- runtime/lua/vim/pack.lua | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'runtime/lua/vim/pack.lua') diff --git a/runtime/lua/vim/pack.lua b/runtime/lua/vim/pack.lua index 268f43e063..6790350bc3 100644 --- a/runtime/lua/vim/pack.lua +++ b/runtime/lua/vim/pack.lua @@ -18,7 +18,8 @@ ---located at `$XDG_CONFIG_HOME/nvim/nvim-pack-lock.json`. It is a JSON file that ---is used to persistently track data about plugins. ---For a more robust config treat lockfile like its part: put under version control, etc. ----Should not be edited by hand or deleted. +---In this case initial install prefers revision from the lockfile instead of +---inferring from `version`. Should not be edited by hand or deleted. --- ---Example workflows ~ --- @@ -56,7 +57,8 @@ ---``` --- ---- Restart Nvim (for example, with |:restart|). Plugins that were not yet ----installed will be available on disk in target state after `add()` call. +---installed will be available on disk after `add()` call. Their revision is +---taken from |vim.pack-lockfile| (if present) or inferred from the `version`. --- ---- To update all plugins with new changes: --- - Execute |vim.pack.update()|. This will download updates from source and @@ -625,6 +627,9 @@ local function install_list(plug_list, confirm) plugin_lock.plugins[p.spec.name].src = p.spec.src + -- Prefer revision from the lockfile instead of using `version` + p.info.sha_target = (plugin_lock.plugins[p.spec.name] or {}).rev + -- Do not skip checkout even if HEAD and target have same commit hash to -- have new repo in expected detached HEAD state and generated help files. checkout(p, timestamp, false) -- cgit