aboutsummaryrefslogtreecommitdiffstats
path: root/lua/nvim-lsp-installer/installers/context.lua
diff options
context:
space:
mode:
authorWilliam Boman <william@redwill.se>2021-10-05 14:38:00 +0200
committerWilliam Boman <william@redwill.se>2021-10-05 14:38:00 +0200
commitd00fbe2058dbd175d2ff8d6f78b6f099a0fbdbd1 (patch)
treee31d1752db95099853bc18fee1d85ebf15f83a1e /lua/nvim-lsp-installer/installers/context.lua
parentREADME: update recording (diff)
downloadmason-d00fbe2058dbd175d2ff8d6f78b6f099a0fbdbd1.tar
mason-d00fbe2058dbd175d2ff8d6f78b6f099a0fbdbd1.tar.gz
mason-d00fbe2058dbd175d2ff8d6f78b6f099a0fbdbd1.tar.bz2
mason-d00fbe2058dbd175d2ff8d6f78b6f099a0fbdbd1.tar.lz
mason-d00fbe2058dbd175d2ff8d6f78b6f099a0fbdbd1.tar.xz
mason-d00fbe2058dbd175d2ff8d6f78b6f099a0fbdbd1.tar.zst
mason-d00fbe2058dbd175d2ff8d6f78b6f099a0fbdbd1.zip
better error messaging
Diffstat (limited to 'lua/nvim-lsp-installer/installers/context.lua')
-rw-r--r--lua/nvim-lsp-installer/installers/context.lua77
1 files changed, 47 insertions, 30 deletions
diff --git a/lua/nvim-lsp-installer/installers/context.lua b/lua/nvim-lsp-installer/installers/context.lua
index 2f56e25c..20097915 100644
--- a/lua/nvim-lsp-installer/installers/context.lua
+++ b/lua/nvim-lsp-installer/installers/context.lua
@@ -7,17 +7,22 @@ local M = {}
local function fetch(url, callback)
local stdio = process.in_memory_sink()
+ log.fmt_debug("Fetching URL %s", url)
+ local on_exit = function(success)
+ if success then
+ log.fmt_debug("Successfully fetched URL %s", url)
+ callback(nil, table.concat(stdio.buffers.stdout, ""))
+ else
+ local stderr = table.concat(stdio.buffers.stderr, "")
+ log.fmt_warn("Failed to fetch URL %s. stderr=%s", url, stderr)
+ callback(("Failed to fetch url %q.\n%s"):format(url, stderr), nil)
+ end
+ end
if platform.is_unix then
process.spawn("wget", {
args = { "-nv", "-O", "-", url },
stdio_sink = stdio.sink,
- }, function(success)
- if success then
- callback(nil, table.concat(stdio.buffers.stdout, ""))
- else
- callback(("Failed to fetch url=%s"):format(url), nil)
- end
- end)
+ }, on_exit)
elseif platform.is_win then
local script = {
"$ProgressPreference = 'SilentlyContinue'",
@@ -26,30 +31,39 @@ local function fetch(url, callback)
process.spawn("powershell.exe", {
args = { "-Command", table.concat(script, ";") },
stdio_sink = stdio.sink,
- }, function(success)
- if success then
- callback(nil, table.concat(stdio.buffers.stdout, ""))
- else
- callback(("Failed to fetch url=%s"):format(url), nil)
- end
- end)
+ }, on_exit)
else
error "Unexpected error: Unsupported OS."
end
end
function M.github_release_file(repo, file)
- local function get_download_url(version)
- return ("https://github.com/%s/releases/download/%s/%s"):format(
- repo,
- version,
- type(file) == "function" and file(version) or file
- )
- end
-
return function(server, callback, context)
+ local function get_download_url(version)
+ local target_file = type(file) == "function" and file(version) or file
+ if not target_file then
+ log.fmt_error(
+ "Unable to find which release file to download. server_name=%s, repo=%s",
+ server.name,
+ repo
+ )
+ context.stdio_sink.stderr(
+ (
+ "Could not find which release file to download. Most likely, the current operating system or architecture (%s) is not supported.\n"
+ ):format(platform.arch)
+ )
+ return nil
+ end
+
+ return ("https://github.com/%s/releases/download/%s/%s"):format(repo, version, target_file)
+ end
if context.requested_server_version then
- context.github_release_file = get_download_url(context.requested_server_version)
+ -- User has already provided a version - don't fetch the latest version from GitHub
+ local download_url = get_download_url(context.requested_server_version)
+ if not download_url then
+ return callback(false)
+ end
+ context.github_release_file = download_url
callback(true)
else
context.stdio_sink.stdout "Fetching latest release version from GitHub API...\n"
@@ -57,15 +71,18 @@ function M.github_release_file(repo, file)
("https://api.github.com/repos/%s/releases/latest"):format(repo),
vim.schedule_wrap(function(err, response)
if err then
- context.stdio_sink.stderr "Failed to fetch latest release version from GitHub API.\n"
+ context.stdio_sink.stderr(tostring(err))
+ return callback(false)
+ end
+ local version = Data.json_decode(response).tag_name
+ log.debug("Resolved latest version", server.name, version)
+ context.requested_server_version = version
+ local download_url = get_download_url(version)
+ if not download_url then
return callback(false)
- else
- local version = Data.json_decode(response).tag_name
- log.debug("Resolved latest version", server.name, version)
- context.requested_server_version = version
- context.github_release_file = get_download_url(version)
- callback(true)
end
+ context.github_release_file = download_url
+ callback(true)
end)
)
end