wbthomason / packer.nvim

A use-package inspired plugin manager for Neovim. Uses native packages, supports Luarocks dependencies, written in Lua, allows for expressive config
MIT License
7.72k stars 263 forks source link

Use of local plugin generates symlink to origin directory, not to other symlinks #1220

Open ArtAndreev opened 1 year ago

ArtAndreev commented 1 year ago

Packer generates symlinks to origin directory for local plugins, not to other symlinks. This leads to problem with updating local plugins if they are managed with package manager like brew. After updating origin directory will not exist and symlink will be broken. See steps below.

Plugin specification file(s) ```lua local ensure_packer = function() local fn = vim.fn local install_path = fn.stdpath('data')..'/site/pack/packer/start/packer.nvim' if fn.empty(fn.glob(install_path)) > 0 then fn.system({'git', 'clone', '--depth', '1', 'https://github.com/wbthomason/packer.nvim', install_path}) vim.cmd [[packadd packer.nvim]] return true end return false end local packer_bootstrap = ensure_packer() return require('packer').startup(function(use) use 'wbthomason/packer.nvim' use 'AndrewRadev/splitjoin.vim' if vim.fn.executable('fzf') then use '/opt/homebrew/opt/fzf' use 'junegunn/fzf.vim' end use 'preservim/nerdtree' use 'Xuyuanp/nerdtree-git-plugin' use 'tpope/vim-fugitive' use 'junegunn/gv.vim' use 'preservim/nerdcommenter' use 'tpope/vim-surround' use 'sainnhe/sonokai' use 'mhinz/vim-signify' use 'LunarWatcher/auto-pairs' use 'vim-airline/vim-airline' use 'vim-airline/vim-airline-themes' use 'prabirshrestha/asyncomplete.vim' if vim.fn.has('python3') then use 'SirVer/ultisnips' use 'prabirshrestha/asyncomplete-ultisnips.vim' end use 'prabirshrestha/vim-lsp' use 'prabirshrestha/asyncomplete-lsp.vim' use 'thomasfaingnaert/vim-lsp-snippets' if vim.fn.has('python3') then use 'thomasfaingnaert/vim-lsp-ultisnips' end use 'dense-analysis/ale' use 'rhysd/vim-lsp-ale' use 'dag/vim-fish' use 'vim-test/vim-test' use 'puremourning/vimspector' use 'wsdjeg/vim-fetch' use 'junegunn/vim-easy-align' use 'buoto/gotests-vim' use 'rhysd/vim-go-impl' use 'ryanoasis/vim-devicons' if packer_bootstrap then require('packer').sync() end end) ```
packer log file nothing
packer compiled file ```lua -- Automatically generated packer.nvim plugin loader code if vim.api.nvim_call_function('has', {'nvim-0.5'}) ~= 1 then vim.api.nvim_command('echohl WarningMsg | echom "Invalid Neovim version for packer.nvim! | echohl None"') return end vim.api.nvim_command('packadd packer.nvim') local no_errors, error_msg = pcall(function() _G._packer = _G._packer or {} _G._packer.inside_compile = true local time local profile_info local should_profile = false if should_profile then local hrtime = vim.loop.hrtime profile_info = {} time = function(chunk, start) if start then profile_info[chunk] = hrtime() else profile_info[chunk] = (hrtime() - profile_info[chunk]) / 1e6 end end else time = function(chunk, start) end end local function save_profiles(threshold) local sorted_times = {} for chunk_name, time_taken in pairs(profile_info) do sorted_times[#sorted_times + 1] = {chunk_name, time_taken} end table.sort(sorted_times, function(a, b) return a[2] > b[2] end) local results = {} for i, elem in ipairs(sorted_times) do if not threshold or threshold and elem[2] > threshold then results[i] = elem[1] .. ' took ' .. elem[2] .. 'ms' end end if threshold then table.insert(results, '(Only showing plugins that took longer than ' .. threshold .. ' ms ' .. 'to load)') end _G._packer.profile_output = results end time([[Luarocks path setup]], true) local package_path_str = "/Users/artyom/.cache/nvim/packer_hererocks/2.1.0-beta3/share/lua/5.1/?.lua;/Users/artyom/.cache/nvim/packer_hererocks/2.1.0-beta3/share/lua/5.1/?/init.lua;/Users/artyom/.cache/nvim/packer_hererocks/2.1.0-beta3/lib/luarocks/rocks-5.1/?.lua;/Users/artyom/.cache/nvim/packer_hererocks/2.1.0-beta3/lib/luarocks/rocks-5.1/?/init.lua" local install_cpath_pattern = "/Users/artyom/.cache/nvim/packer_hererocks/2.1.0-beta3/lib/lua/5.1/?.so" if not string.find(package.path, package_path_str, 1, true) then package.path = package.path .. ';' .. package_path_str end if not string.find(package.cpath, install_cpath_pattern, 1, true) then package.cpath = package.cpath .. ';' .. install_cpath_pattern end time([[Luarocks path setup]], false) time([[try_loadstring definition]], true) local function try_loadstring(s, component, name) local success, result = pcall(loadstring(s), name, _G.packer_plugins[name]) if not success then vim.schedule(function() vim.api.nvim_notify('packer.nvim: Error running ' .. component .. ' for ' .. name .. ': ' .. result, vim.log.levels.ERROR, {}) end) end return result end time([[try_loadstring definition]], false) time([[Defining packer_plugins]], true) _G.packer_plugins = { ale = { loaded = true, path = "/Users/artyom/.local/share/nvim/site/pack/packer/start/ale", url = "https://github.com/dense-analysis/ale" }, ["asyncomplete-lsp.vim"] = { loaded = true, path = "/Users/artyom/.local/share/nvim/site/pack/packer/start/asyncomplete-lsp.vim", url = "https://github.com/prabirshrestha/asyncomplete-lsp.vim" }, ["asyncomplete-ultisnips.vim"] = { loaded = true, path = "/Users/artyom/.local/share/nvim/site/pack/packer/start/asyncomplete-ultisnips.vim", url = "https://github.com/prabirshrestha/asyncomplete-ultisnips.vim" }, ["asyncomplete.vim"] = { loaded = true, path = "/Users/artyom/.local/share/nvim/site/pack/packer/start/asyncomplete.vim", url = "https://github.com/prabirshrestha/asyncomplete.vim" }, ["auto-pairs"] = { loaded = true, path = "/Users/artyom/.local/share/nvim/site/pack/packer/start/auto-pairs", url = "https://github.com/LunarWatcher/auto-pairs" }, fzf = { loaded = true, path = "/Users/artyom/.local/share/nvim/site/pack/packer/start/fzf", url = "/opt/homebrew/opt/fzf" }, ["fzf.vim"] = { loaded = true, path = "/Users/artyom/.local/share/nvim/site/pack/packer/start/fzf.vim", url = "https://github.com/junegunn/fzf.vim" }, ["gotests-vim"] = { loaded = true, path = "/Users/artyom/.local/share/nvim/site/pack/packer/start/gotests-vim", url = "https://github.com/buoto/gotests-vim" }, ["gv.vim"] = { loaded = true, path = "/Users/artyom/.local/share/nvim/site/pack/packer/start/gv.vim", url = "https://github.com/junegunn/gv.vim" }, nerdcommenter = { loaded = true, path = "/Users/artyom/.local/share/nvim/site/pack/packer/start/nerdcommenter", url = "https://github.com/preservim/nerdcommenter" }, nerdtree = { loaded = true, path = "/Users/artyom/.local/share/nvim/site/pack/packer/start/nerdtree", url = "https://github.com/preservim/nerdtree" }, ["nerdtree-git-plugin"] = { loaded = true, path = "/Users/artyom/.local/share/nvim/site/pack/packer/start/nerdtree-git-plugin", url = "https://github.com/Xuyuanp/nerdtree-git-plugin" }, ["packer.nvim"] = { loaded = true, path = "/Users/artyom/.local/share/nvim/site/pack/packer/start/packer.nvim", url = "https://github.com/wbthomason/packer.nvim" }, sonokai = { loaded = true, path = "/Users/artyom/.local/share/nvim/site/pack/packer/start/sonokai", url = "https://github.com/sainnhe/sonokai" }, ["splitjoin.vim"] = { loaded = true, path = "/Users/artyom/.local/share/nvim/site/pack/packer/start/splitjoin.vim", url = "https://github.com/AndrewRadev/splitjoin.vim" }, ultisnips = { loaded = true, path = "/Users/artyom/.local/share/nvim/site/pack/packer/start/ultisnips", url = "https://github.com/SirVer/ultisnips" }, ["vim-airline"] = { loaded = true, path = "/Users/artyom/.local/share/nvim/site/pack/packer/start/vim-airline", url = "https://github.com/vim-airline/vim-airline" }, ["vim-airline-themes"] = { loaded = true, path = "/Users/artyom/.local/share/nvim/site/pack/packer/start/vim-airline-themes", url = "https://github.com/vim-airline/vim-airline-themes" }, ["vim-devicons"] = { loaded = true, path = "/Users/artyom/.local/share/nvim/site/pack/packer/start/vim-devicons", url = "https://github.com/ryanoasis/vim-devicons" }, ["vim-easy-align"] = { loaded = true, path = "/Users/artyom/.local/share/nvim/site/pack/packer/start/vim-easy-align", url = "https://github.com/junegunn/vim-easy-align" }, ["vim-fetch"] = { loaded = true, path = "/Users/artyom/.local/share/nvim/site/pack/packer/start/vim-fetch", url = "https://github.com/wsdjeg/vim-fetch" }, ["vim-fish"] = { loaded = true, path = "/Users/artyom/.local/share/nvim/site/pack/packer/start/vim-fish", url = "https://github.com/dag/vim-fish" }, ["vim-fugitive"] = { loaded = true, path = "/Users/artyom/.local/share/nvim/site/pack/packer/start/vim-fugitive", url = "https://github.com/tpope/vim-fugitive" }, ["vim-go-impl"] = { loaded = true, path = "/Users/artyom/.local/share/nvim/site/pack/packer/start/vim-go-impl", url = "https://github.com/rhysd/vim-go-impl" }, ["vim-lsp"] = { loaded = true, path = "/Users/artyom/.local/share/nvim/site/pack/packer/start/vim-lsp", url = "https://github.com/prabirshrestha/vim-lsp" }, ["vim-lsp-ale"] = { loaded = true, path = "/Users/artyom/.local/share/nvim/site/pack/packer/start/vim-lsp-ale", url = "https://github.com/rhysd/vim-lsp-ale" }, ["vim-lsp-snippets"] = { loaded = true, path = "/Users/artyom/.local/share/nvim/site/pack/packer/start/vim-lsp-snippets", url = "https://github.com/thomasfaingnaert/vim-lsp-snippets" }, ["vim-lsp-ultisnips"] = { loaded = true, path = "/Users/artyom/.local/share/nvim/site/pack/packer/start/vim-lsp-ultisnips", url = "https://github.com/thomasfaingnaert/vim-lsp-ultisnips" }, ["vim-signify"] = { loaded = true, path = "/Users/artyom/.local/share/nvim/site/pack/packer/start/vim-signify", url = "https://github.com/mhinz/vim-signify" }, ["vim-surround"] = { loaded = true, path = "/Users/artyom/.local/share/nvim/site/pack/packer/start/vim-surround", url = "https://github.com/tpope/vim-surround" }, ["vim-test"] = { loaded = true, path = "/Users/artyom/.local/share/nvim/site/pack/packer/start/vim-test", url = "https://github.com/vim-test/vim-test" }, vimspector = { loaded = true, path = "/Users/artyom/.local/share/nvim/site/pack/packer/start/vimspector", url = "https://github.com/puremourning/vimspector" } } time([[Defining packer_plugins]], false) _G._packer.inside_compile = false if _G._packer.needs_bufread == true then vim.cmd("doautocmd BufRead") end _G._packer.needs_bufread = false if should_profile then save_profiles() end end) if not no_errors then error_msg = error_msg:gsub('"', '\\"') vim.api.nvim_command('echohl ErrorMsg | echom "Error in packer_compiled: '..error_msg..'" | echom "Please check your config for correctness" | echohl None') end ```