mirror of
https://github.com/chenasraf/nvim-treesitter.git
synced 2026-05-17 17:38:02 +00:00
refactor: use vim.system (#4923)
This commit is contained in:
committed by
Christian Clason
parent
68508631de
commit
c5152f3e83
@@ -4,38 +4,53 @@ local util = require('nvim-treesitter.util')
|
||||
|
||||
-- Load previous lockfile
|
||||
local filename = require('nvim-treesitter.install').get_package_path('lockfile.json')
|
||||
local lockfile = vim.json.decode(util.read_file(filename))
|
||||
-- local old_lockfile = vim.json.decode(util.read_file(filename)) --[[@as table<string,{revision:string}>]]
|
||||
|
||||
---@type string?
|
||||
local skip_lang_string = os.getenv('LOCKFILE_SKIP')
|
||||
local skip_langs = skip_lang_string and vim.split(skip_lang_string, ',') or {}
|
||||
vim.print('Skipping languages: ', skip_langs)
|
||||
---@type table<string,{revision:string}>
|
||||
local new_lockfile = {}
|
||||
|
||||
local sorted_parsers = {}
|
||||
for k, v in pairs(require('nvim-treesitter.parsers').configs) do
|
||||
table.insert(sorted_parsers, { name = k, parser = v })
|
||||
end
|
||||
table.sort(sorted_parsers, function(a, b)
|
||||
return a.name < b.name
|
||||
end)
|
||||
local parsers = require('nvim-treesitter.parsers').configs
|
||||
|
||||
local jobs = {} --- @type table<string,SystemObj>
|
||||
|
||||
-- check for new revisions
|
||||
for _, v in ipairs(sorted_parsers) do
|
||||
if not vim.list_contains(skip_langs, v.name) and v.parser.install_info then
|
||||
local cmd = 'git ls-remote ' .. v.parser.install_info.url
|
||||
if v.parser.install_info.branch then
|
||||
cmd = cmd .. ' | grep refs/heads/' .. v.parser.install_info.branch
|
||||
end
|
||||
local sha = vim.split(vim.fn.systemlist(cmd)[1], '\t')[1]
|
||||
lockfile[v.name] = { revision = sha }
|
||||
print(v.name .. ': ' .. sha)
|
||||
for k, p in pairs(parsers) do
|
||||
if not p.install_info then
|
||||
print('Skipping ' .. k)
|
||||
else
|
||||
print('Skipping ' .. v.name)
|
||||
jobs[k] = vim.system({ 'git', 'ls-remote', p.install_info.url })
|
||||
end
|
||||
|
||||
if #vim.tbl_keys(jobs) % 100 == 0 or next(parsers, k) == nil then
|
||||
for name, job in pairs(jobs) do
|
||||
local stdout = vim.split(job:wait().stdout, '\n')
|
||||
jobs[name] = nil
|
||||
|
||||
local branch = parsers[name].install_info.branch
|
||||
|
||||
local line = 1
|
||||
if branch then
|
||||
for j, l in ipairs(stdout) do
|
||||
if l:find(vim.pesc(branch)) then
|
||||
line = j
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local sha = vim.split(stdout[line], '\t')[1]
|
||||
new_lockfile[name] = { revision = sha }
|
||||
print(name .. ': ' .. sha)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
lockfile = vim.json.encode(lockfile)
|
||||
assert(#vim.tbl_keys(jobs) == 0)
|
||||
|
||||
local lockfile_json = vim.json.encode(new_lockfile) --[[@as string]]
|
||||
if vim.fn.executable('jq') == 1 then
|
||||
lockfile = vim.fn.system('jq --sort-keys', lockfile)
|
||||
lockfile_json =
|
||||
assert(vim.system({ 'jq', '--sort-keys' }, { stdin = lockfile_json }):wait().stdout)
|
||||
end
|
||||
util.write_file(filename, lockfile)
|
||||
|
||||
util.write_file(filename, lockfile_json)
|
||||
|
||||
Reference in New Issue
Block a user