mirror of https://github.com/folke/lazy.nvim.git
fix(runner): sync package specs after installing and before building
This commit is contained in:
parent
656d3d1f5b
commit
105d4805ad
|
@ -342,6 +342,7 @@ function M.load()
|
|||
Config.plugins[name]._ = plugin._
|
||||
Config.plugins[name]._.dep = new_state.dep
|
||||
Config.plugins[name]._.frags = new_state.frags
|
||||
Config.plugins[name]._.pkg = new_state.pkg
|
||||
end
|
||||
end
|
||||
Util.track()
|
||||
|
|
|
@ -83,7 +83,13 @@ function M.install(opts)
|
|||
"git.clone",
|
||||
{ "git.checkout", lockfile = opts.lockfile },
|
||||
"plugin.docs",
|
||||
"wait",
|
||||
{
|
||||
"wait",
|
||||
sync = function()
|
||||
require("lazy.pkg").update()
|
||||
Plugin.load()
|
||||
end,
|
||||
},
|
||||
"plugin.build",
|
||||
},
|
||||
plugins = function(plugin)
|
||||
|
@ -92,7 +98,6 @@ function M.install(opts)
|
|||
}, opts):wait(function()
|
||||
require("lazy.manage.lock").update()
|
||||
require("lazy.help").update()
|
||||
require("lazy.pkg").update()
|
||||
end)
|
||||
end
|
||||
|
||||
|
@ -107,7 +112,13 @@ function M.update(opts)
|
|||
"git.status",
|
||||
{ "git.checkout", lockfile = opts.lockfile },
|
||||
"plugin.docs",
|
||||
"wait",
|
||||
{
|
||||
"wait",
|
||||
sync = function()
|
||||
require("lazy.pkg").update()
|
||||
Plugin.load()
|
||||
end,
|
||||
},
|
||||
"plugin.build",
|
||||
{ "git.log", updated = true },
|
||||
},
|
||||
|
@ -117,7 +128,6 @@ function M.update(opts)
|
|||
}, opts):wait(function()
|
||||
require("lazy.manage.lock").update()
|
||||
require("lazy.help").update()
|
||||
require("lazy.pkg").update()
|
||||
end)
|
||||
end
|
||||
--
|
||||
|
|
|
@ -8,13 +8,15 @@ local Util = require("lazy.util")
|
|||
---@field concurrency? number
|
||||
|
||||
---@alias PipelineStep {task:string, opts?:TaskOptions}
|
||||
---@alias LazyRunnerTask {co:thread, status: {task?:LazyTask, waiting?:boolean}, plugin: LazyPlugin}
|
||||
---@alias LazyRunnerTask {co:thread, status: {task?:LazyTask, waiting?:boolean}, plugin: string}
|
||||
|
||||
---@class Runner
|
||||
---@field _plugins LazyPlugin[]
|
||||
---@field _plugins string[]
|
||||
---@field _running LazyRunnerTask[]
|
||||
---@field _pipeline PipelineStep[]
|
||||
---@field _sync PipelineStep[]
|
||||
---@field _on_done fun()[]
|
||||
---@field _syncing boolean
|
||||
---@field _opts RunnerOpts
|
||||
local Runner = {}
|
||||
|
||||
|
@ -24,13 +26,11 @@ function Runner.new(opts)
|
|||
self._opts = opts or {}
|
||||
|
||||
local plugins = self._opts.plugins
|
||||
if type(plugins) == "function" then
|
||||
self._plugins = vim.tbl_filter(plugins, Config.plugins)
|
||||
else
|
||||
self._plugins = plugins or Config.plugins
|
||||
end
|
||||
self._plugins = vim.tbl_map(function(plugin)
|
||||
return plugin.name
|
||||
end, type(plugins) == "function" and vim.tbl_filter(plugins, Config.plugins) or plugins or Config.plugins)
|
||||
table.sort(self._plugins, function(a, b)
|
||||
return a.name < b.name
|
||||
return a < b
|
||||
end)
|
||||
self._running = {}
|
||||
self._on_done = {}
|
||||
|
@ -40,6 +40,10 @@ function Runner.new(opts)
|
|||
return type(step) == "string" and { task = step } or { task = step[1], opts = step }
|
||||
end, self._opts.pipeline)
|
||||
|
||||
self._sync = vim.tbl_filter(function(step)
|
||||
return step.task == "wait"
|
||||
end, self._pipeline)
|
||||
|
||||
return self
|
||||
end
|
||||
|
||||
|
@ -57,14 +61,31 @@ function Runner:_resume(entry)
|
|||
end
|
||||
|
||||
function Runner:resume(waiting)
|
||||
if self._syncing then
|
||||
return true
|
||||
end
|
||||
if waiting then
|
||||
for _, entry in ipairs(self._running) do
|
||||
if entry.status then
|
||||
if entry.status.waiting then
|
||||
entry.status.waiting = false
|
||||
entry.plugin._.working = true
|
||||
local sync = self._sync[1]
|
||||
table.remove(self._sync, 1)
|
||||
if sync then
|
||||
self._syncing = true
|
||||
vim.schedule(function()
|
||||
if sync.opts and type(sync.opts.sync) == "function" then
|
||||
sync.opts.sync(self)
|
||||
end
|
||||
end
|
||||
for _, entry in ipairs(self._running) do
|
||||
if entry.status then
|
||||
if entry.status.waiting then
|
||||
entry.status.waiting = false
|
||||
local plugin = Config.plugins[entry.plugin]
|
||||
if plugin then
|
||||
plugin._.working = true
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
self._syncing = false
|
||||
end)
|
||||
end
|
||||
end
|
||||
local running = 0
|
||||
|
@ -78,7 +99,7 @@ function Runner:resume(waiting)
|
|||
end
|
||||
end
|
||||
end
|
||||
return running > 0 or (not waiting and self:resume(true))
|
||||
return self._syncing or running > 0 or (not waiting and self:resume(true))
|
||||
end
|
||||
|
||||
function Runner:start()
|
||||
|
@ -88,7 +109,7 @@ function Runner:start()
|
|||
if ok then
|
||||
table.insert(self._running, { co = co, status = {}, plugin = plugin })
|
||||
else
|
||||
Util.error("Could not start tasks for " .. plugin.name .. "\n" .. err)
|
||||
Util.error("Could not start tasks for " .. plugin .. "\n" .. err)
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -107,8 +128,9 @@ function Runner:start()
|
|||
end
|
||||
|
||||
---@async
|
||||
---@param plugin LazyPlugin
|
||||
function Runner:run_pipeline(plugin)
|
||||
---@param name string
|
||||
function Runner:run_pipeline(name)
|
||||
local plugin = Config.plugins[name]
|
||||
plugin._.working = true
|
||||
coroutine.yield()
|
||||
for _, step in ipairs(self._pipeline) do
|
||||
|
@ -117,6 +139,7 @@ function Runner:run_pipeline(plugin)
|
|||
coroutine.yield({ waiting = true })
|
||||
plugin._.working = true
|
||||
else
|
||||
plugin = Config.plugins[name] or plugin
|
||||
local task = self:queue(plugin, step.task, step.opts)
|
||||
if task then
|
||||
coroutine.yield({ task = task })
|
||||
|
|
|
@ -12,14 +12,14 @@ function M.deps(plugin)
|
|||
local root = Config.options.rocks.root .. "/" .. plugin.name
|
||||
local manifest_file = root .. "/lib/luarocks/rocks-5.1/manifest"
|
||||
local manifest = {}
|
||||
local ok = pcall(function()
|
||||
pcall(function()
|
||||
local load, err = loadfile(manifest_file, "t", manifest)
|
||||
if not load then
|
||||
error(err)
|
||||
end
|
||||
load()
|
||||
end)
|
||||
return manifest and vim.tbl_keys(manifest.repository or {})
|
||||
return vim.tbl_keys(manifest.repository or {})
|
||||
end
|
||||
|
||||
---@class RockSpec
|
||||
|
|
Loading…
Reference in New Issue