mirror of
https://github.com/neovim/neovim.git
synced 2026-07-22 09:01:45 +00:00
feat(pack): update get() to be able to fetch data from plugin source
Problem: There is currently no convenient way to programmatically check for new updates from plugin source. Running `vim.pack.update()` is one approach, but it opens a confirmation buffer that requires a manual action to close. Solution: Add `opts.offline` to `vim.pack.get()` that will first fetch new updates from plugin source before computing the output.
This commit is contained in:
@@ -156,6 +156,12 @@
|
||||
---- Use |:packdel| with plugin names to remove. Use `:packdel ++all` to delete
|
||||
--- all inactive plugins.
|
||||
---
|
||||
---Check for pending updates ~
|
||||
---
|
||||
---- Run `vim.pack.get(nil, { offline = false })` and check the output for items
|
||||
--- with different `rev` and `rev_to` fields. To not download new updates
|
||||
--- from source, use plain `vim.pack.get()`.
|
||||
---
|
||||
--- <pre>help
|
||||
--- Commands *vim.pack-commands* *E5807*
|
||||
---
|
||||
@@ -317,6 +323,14 @@ local function git_get_hash(ref, cwd)
|
||||
return git_cmd({ 'rev-list', '-1', ref }, cwd)
|
||||
end
|
||||
|
||||
--- @async
|
||||
--- @param cwd string
|
||||
local function git_fetch(cwd)
|
||||
-- Using '--tags --force' means conflicting tags will be synced with remote
|
||||
local args = { 'fetch', '--quiet', '--tags', '--force', '--recurse-submodules=yes', 'origin' }
|
||||
git_cmd(args, cwd)
|
||||
end
|
||||
|
||||
--- @async
|
||||
--- @param cwd string
|
||||
--- @return string
|
||||
@@ -1313,9 +1327,7 @@ function M.update(names, opts)
|
||||
|
||||
-- Fetch
|
||||
if not opts.offline then
|
||||
-- Using '--tags --force' means conflicting tags will be synced with remote
|
||||
local args = { 'fetch', '--quiet', '--tags', '--force', '--recurse-submodules=yes', 'origin' }
|
||||
git_cmd(args, p.path)
|
||||
git_fetch(p.path)
|
||||
end
|
||||
|
||||
-- Compute change info: changelog if any, new tags if nothing to update
|
||||
@@ -1443,10 +1455,13 @@ end
|
||||
|
||||
--- @class vim.pack.keyset.get
|
||||
--- @inlinedoc
|
||||
--- @field info boolean Whether to include extra plugin info. Default `true`.
|
||||
--- @field info? boolean Whether to include extra plugin info. Default `true`.
|
||||
--- Whether to skip downloading new updates. Requires `info=true`. Default: `true`.
|
||||
--- @field offline? boolean
|
||||
|
||||
--- @param p_data_list vim.pack.PlugData[]
|
||||
local function add_p_data_info(p_data_list)
|
||||
--- @param offline boolean
|
||||
local function add_p_data_info(p_data_list, offline)
|
||||
local funs = {} --- @type (async fun())[]
|
||||
local plug_dir = get_plug_dir()
|
||||
for i, p_data in ipairs(p_data_list) do
|
||||
@@ -1457,6 +1472,10 @@ local function add_p_data_info(p_data_list)
|
||||
p_data.branches = git_get_branches(path)
|
||||
p_data.tags = git_get_tags(path)
|
||||
|
||||
if not offline then
|
||||
git_fetch(path)
|
||||
end
|
||||
|
||||
infer_revisions(plug)
|
||||
p_data.rev = plug.info.sha_head
|
||||
p_data.rev_to = plug.info.sha_target
|
||||
@@ -1471,7 +1490,7 @@ end
|
||||
--- @return vim.pack.PlugData[]
|
||||
function M.get(names, opts)
|
||||
vim.validate('names', names, vim.islist, true, 'list')
|
||||
opts = vim.tbl_extend('force', { info = true }, opts or {})
|
||||
opts = vim.tbl_extend('force', { info = true, offline = true }, opts or {})
|
||||
|
||||
-- Process active plugins in order they were added. Take into account that
|
||||
-- there might be "holes" after `vim.pack.del()`.
|
||||
@@ -1520,7 +1539,7 @@ function M.get(names, opts)
|
||||
|
||||
if opts.info then
|
||||
git_ensure_exec()
|
||||
add_p_data_info(res)
|
||||
add_p_data_info(res, opts.offline)
|
||||
end
|
||||
|
||||
return res
|
||||
|
||||
Reference in New Issue
Block a user