diff --git a/lua/lazy/core/plugin.lua b/lua/lazy/core/plugin.lua index b83cd5a..659c45f 100644 --- a/lua/lazy/core/plugin.lua +++ b/lua/lazy/core/plugin.lua @@ -16,7 +16,6 @@ local M = {} ---@field dirty? boolean ---@field updated? {from:string, to:string} ---@field is_local boolean ----@field is_symlink? boolean ---@field cloned? boolean ---@field dep? boolean True if this plugin is only in the spec as a dependency @@ -165,11 +164,13 @@ function M.update_state() or plugin.cmd plugin.lazy = lazy and true or false end - plugin.dir = Config.root .. "/" .. plugin.name - plugin._.is_local = plugin.uri:sub(1, 4) ~= "http" and plugin.uri:sub(1, 3) ~= "git" - plugin._.is_symlink = installed[plugin.name] == "link" - plugin._.installed = installed[plugin.name] ~= nil - if plugin._.is_local == plugin._.is_symlink then + if plugin.uri:sub(1, 4) ~= "http" and plugin.uri:sub(1, 3) ~= "git" then + plugin._.is_local = true + plugin.dir = plugin.uri + plugin._.installed = true -- user should make sure the directory exists + else + plugin.dir = Config.root .. "/" .. plugin.name + plugin._.installed = installed[plugin.name] ~= nil installed[plugin.name] = nil end end @@ -240,11 +241,8 @@ end -- Finds the plugin that has this path ---@param path string function M.find(path) - if path:find(Config.root, 1, true) == 1 then - local plugin = path:sub(#Config.root + 2) - local idx = plugin:find("/", 1, true) - return idx and Config.plugins[plugin:sub(1, idx - 1)] or nil - end + local name = path:match("/([^/]+)/lua") or path:match("/([^/]+)/?$") + return name and Config.plugins[name] or nil end return M diff --git a/lua/lazy/manage/init.lua b/lua/lazy/manage/init.lua index 8817c16..2e22e93 100644 --- a/lua/lazy/manage/init.lua +++ b/lua/lazy/manage/init.lua @@ -54,7 +54,6 @@ end function M.install(opts) M.run({ pipeline = { - "fs.symlink", "git.clone", "git.checkout", "plugin.docs", @@ -72,7 +71,6 @@ function M.update(opts) opts = opts or {} M.run({ pipeline = { - "fs.symlink", "git.branch", "git.fetch", { "git.checkout", lockfile = opts.lockfile }, diff --git a/lua/lazy/manage/task/fs.lua b/lua/lazy/manage/task/fs.lua index 47659d9..57839f4 100644 --- a/lua/lazy/manage/task/fs.lua +++ b/lua/lazy/manage/task/fs.lua @@ -1,52 +1,31 @@ local Util = require("lazy.util") +local Config = require("lazy.core.config") ---@type table local M = {} M.clean = { + skip = function(plugin) + return plugin._.is_local + end, run = function(self) local dir = self.plugin.dir:gsub("/+$", "") - local stat = vim.loop.fs_lstat(dir) + assert(dir:find(Config.root, 1, true) == 1, self.plugin.dir .. " should be under packpath!") - if stat.type == "directory" then - Util.walk(dir, function(path, _, type) - if type == "directory" then - vim.loop.fs_rmdir(path) - else - vim.loop.fs_unlink(path) - end - end) - vim.loop.fs_rmdir(dir) - else - vim.loop.fs_unlink(dir) - end + local stat = vim.loop.fs_lstat(dir) + assert(stat.type == "directory", self.plugin.dir .. " should be a directory!") + + Util.walk(dir, function(path, _, type) + if type == "directory" then + vim.loop.fs_rmdir(path) + else + vim.loop.fs_unlink(path) + end + end) + vim.loop.fs_rmdir(dir) self.plugin._.installed = false end, } -M.symlink = { - skip = function(plugin) - if not plugin._.is_local then - return true - end - return not plugin._.is_symlink and plugin._.installed - end, - run = function(self) - local stat = vim.loop.fs_lstat(self.plugin.dir) - if stat then - if vim.loop.fs_realpath(self.plugin.uri) == vim.loop.fs_realpath(self.plugin.dir) then - self.plugin._.installed = true - return - else - vim.loop.fs_unlink(self.plugin.dir) - end - end - vim.loop.fs_symlink(self.plugin.uri, self.plugin.dir, { dir = true }) - vim.opt.runtimepath:append(self.plugin.uri) - self.plugin._.installed = true - self.plugin._.cloned = true - end, -} - return M