2022-11-23 04:28:08 +08:00
|
|
|
local Config = require("lazy.core.config")
|
2022-11-27 18:02:28 +08:00
|
|
|
local Runner = require("lazy.manage.runner")
|
2022-11-26 05:48:17 +08:00
|
|
|
local Plugin = require("lazy.core.plugin")
|
2022-11-21 05:33:47 +08:00
|
|
|
|
|
|
|
local M = {}
|
|
|
|
|
2022-11-28 18:04:32 +08:00
|
|
|
---@class ManagerOpts
|
|
|
|
---@field wait? boolean
|
|
|
|
---@field clear? boolean
|
|
|
|
---@field interactive? boolean
|
2022-11-21 05:33:47 +08:00
|
|
|
|
2022-11-28 18:04:32 +08:00
|
|
|
---@param ropts RunnerOpts
|
2022-11-21 05:33:47 +08:00
|
|
|
---@param opts? ManagerOpts
|
2022-11-28 18:04:32 +08:00
|
|
|
function M.run(ropts, opts)
|
2022-11-21 05:34:55 +08:00
|
|
|
opts = opts or {}
|
2022-11-28 18:04:32 +08:00
|
|
|
if opts.interactive == nil then
|
|
|
|
opts.interactive = Config.options.interactive
|
|
|
|
end
|
2022-11-21 05:34:55 +08:00
|
|
|
|
|
|
|
if opts.clear then
|
|
|
|
M.clear()
|
|
|
|
end
|
|
|
|
|
2022-11-28 18:04:32 +08:00
|
|
|
if opts.interactive then
|
2022-11-29 14:56:29 +08:00
|
|
|
vim.schedule(function()
|
|
|
|
require("lazy.view").show()
|
|
|
|
end)
|
2022-11-21 05:34:55 +08:00
|
|
|
end
|
|
|
|
|
|
|
|
---@type Runner
|
2022-11-28 18:04:32 +08:00
|
|
|
local runner = Runner.new(ropts)
|
|
|
|
runner:start()
|
2022-11-21 05:34:55 +08:00
|
|
|
|
|
|
|
vim.cmd([[do User LazyRender]])
|
|
|
|
|
2022-11-28 18:04:32 +08:00
|
|
|
-- wait for post-install to finish
|
2022-11-21 05:34:55 +08:00
|
|
|
runner:wait(function()
|
2022-11-28 18:04:32 +08:00
|
|
|
vim.cmd([[do User LazyRender]])
|
2022-11-21 05:34:55 +08:00
|
|
|
end)
|
|
|
|
|
|
|
|
if opts.wait then
|
|
|
|
runner:wait()
|
|
|
|
end
|
2022-11-29 07:15:13 +08:00
|
|
|
return runner
|
2022-11-21 05:33:47 +08:00
|
|
|
end
|
|
|
|
|
|
|
|
---@param opts? ManagerOpts
|
|
|
|
function M.install(opts)
|
2022-11-28 18:04:32 +08:00
|
|
|
M.run({
|
2022-11-29 05:03:44 +08:00
|
|
|
pipeline = {
|
|
|
|
"fs.symlink",
|
|
|
|
"git.clone",
|
|
|
|
"git.checkout",
|
|
|
|
"plugin.docs",
|
|
|
|
"wait",
|
|
|
|
"plugin.run",
|
|
|
|
},
|
2022-11-28 18:04:32 +08:00
|
|
|
plugins = function(plugin)
|
2022-11-28 18:19:50 +08:00
|
|
|
return plugin.uri and not plugin._.installed
|
2022-11-28 18:04:32 +08:00
|
|
|
end,
|
|
|
|
}, opts)
|
2022-11-21 05:33:47 +08:00
|
|
|
end
|
|
|
|
|
2022-11-29 07:15:13 +08:00
|
|
|
---@param opts? ManagerOpts|{lockfile?:boolean}
|
2022-11-21 05:33:47 +08:00
|
|
|
function M.update(opts)
|
2022-11-29 07:15:13 +08:00
|
|
|
opts = opts or {}
|
2022-11-28 18:04:32 +08:00
|
|
|
M.run({
|
2022-11-29 05:03:44 +08:00
|
|
|
pipeline = {
|
|
|
|
"fs.symlink",
|
|
|
|
"git.branch",
|
|
|
|
"git.fetch",
|
2022-11-29 07:15:13 +08:00
|
|
|
{ "git.checkout", lockfile = opts.lockfile },
|
2022-11-29 05:03:44 +08:00
|
|
|
"plugin.docs",
|
|
|
|
"wait",
|
2022-11-29 07:15:13 +08:00
|
|
|
"plugin.run",
|
2022-11-29 05:03:44 +08:00
|
|
|
{ "git.log", updated = true },
|
|
|
|
},
|
2022-11-28 18:04:32 +08:00
|
|
|
plugins = function(plugin)
|
2022-11-28 18:19:50 +08:00
|
|
|
return plugin.uri and plugin._.installed
|
2022-11-28 18:04:32 +08:00
|
|
|
end,
|
2022-11-29 07:15:13 +08:00
|
|
|
}, opts):wait(function()
|
|
|
|
require("lazy.manage.lock").update()
|
|
|
|
end)
|
2022-11-21 05:33:47 +08:00
|
|
|
end
|
|
|
|
|
2022-11-23 04:12:50 +08:00
|
|
|
---@param opts? ManagerOpts
|
|
|
|
function M.log(opts)
|
2022-11-28 18:04:32 +08:00
|
|
|
M.run({
|
|
|
|
pipeline = { "git.log" },
|
|
|
|
plugins = function(plugin)
|
2022-11-28 18:19:50 +08:00
|
|
|
return plugin.uri and plugin._.installed
|
2022-11-28 18:04:32 +08:00
|
|
|
end,
|
|
|
|
}, opts)
|
2022-11-23 23:12:43 +08:00
|
|
|
end
|
|
|
|
|
2022-11-21 05:33:47 +08:00
|
|
|
---@param opts? ManagerOpts
|
|
|
|
function M.clean(opts)
|
2022-11-26 05:48:17 +08:00
|
|
|
Plugin.update_state(true)
|
2022-11-28 18:04:32 +08:00
|
|
|
M.run({
|
2022-11-29 05:03:44 +08:00
|
|
|
pipeline = { "fs.clean" },
|
2022-11-28 18:04:32 +08:00
|
|
|
plugins = Config.to_clean,
|
|
|
|
}, opts)
|
2022-11-21 05:33:47 +08:00
|
|
|
end
|
|
|
|
|
|
|
|
function M.clear()
|
2022-11-29 07:15:13 +08:00
|
|
|
Plugin.update_state(true)
|
2022-11-21 07:27:28 +08:00
|
|
|
for _, plugin in pairs(Config.plugins) do
|
2022-11-28 18:19:50 +08:00
|
|
|
plugin._.updated = nil
|
2022-11-29 07:15:13 +08:00
|
|
|
plugin._.cloned = nil
|
|
|
|
plugin._.dirty = nil
|
2022-11-21 05:34:55 +08:00
|
|
|
-- clear finished tasks
|
2022-11-28 18:19:50 +08:00
|
|
|
if plugin._.tasks then
|
2022-11-21 06:25:56 +08:00
|
|
|
---@param task LazyTask
|
2022-11-28 18:19:50 +08:00
|
|
|
plugin._.tasks = vim.tbl_filter(function(task)
|
2022-11-28 18:04:32 +08:00
|
|
|
return task:is_running()
|
2022-11-28 18:19:50 +08:00
|
|
|
end, plugin._.tasks)
|
2022-11-21 05:34:55 +08:00
|
|
|
end
|
|
|
|
end
|
2022-11-23 23:12:43 +08:00
|
|
|
vim.cmd([[do User LazyRender]])
|
2022-11-21 05:33:47 +08:00
|
|
|
end
|
|
|
|
|
|
|
|
return M
|