diff options
Diffstat (limited to 'lua/nvim-lsp-installer/jobs/outdated-servers/git.lua')
| -rw-r--r-- | lua/nvim-lsp-installer/jobs/outdated-servers/git.lua | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/lua/nvim-lsp-installer/jobs/outdated-servers/git.lua b/lua/nvim-lsp-installer/jobs/outdated-servers/git.lua new file mode 100644 index 00000000..74007abc --- /dev/null +++ b/lua/nvim-lsp-installer/jobs/outdated-servers/git.lua @@ -0,0 +1,42 @@ +local process = require "nvim-lsp-installer.process" +local VersionCheckResult = require "nvim-lsp-installer.jobs.outdated-servers.version-check-result" + +---@param server Server +---@param source InstallReceiptSource +---@param on_check_complete fun(result: VersionCheckResult) +return function(server, source, on_check_complete) + process.spawn("git", { + -- We assume git installation track the remote HEAD branch + args = { "fetch", "origin", "HEAD" }, + cwd = server.root_dir, + stdio_sink = process.empty_sink(), + }, function(fetch_success) + local stdio = process.in_memory_sink() + if not fetch_success then + return on_check_complete(VersionCheckResult.fail(server)) + end + process.spawn("git", { + args = { "rev-parse", "FETCH_HEAD", "HEAD" }, + cwd = server.root_dir, + stdio_sink = stdio.sink, + }, function(success) + if success then + local stdout = table.concat(stdio.buffers.stdout, "") + local remote_head, local_head = unpack(vim.split(stdout, "\n")) + if remote_head ~= local_head then + on_check_complete(VersionCheckResult.success(server, { + { + name = source.remote, + latest_version = remote_head, + current_version = local_head, + }, + })) + else + on_check_complete(VersionCheckResult.empty(server)) + end + else + on_check_complete(VersionCheckResult.fail(server)) + end + end) + end) +end |
