diff options
| author | William Boman <william@redwill.se> | 2021-10-05 14:38:00 +0200 |
|---|---|---|
| committer | William Boman <william@redwill.se> | 2021-10-05 14:38:00 +0200 |
| commit | d00fbe2058dbd175d2ff8d6f78b6f099a0fbdbd1 (patch) | |
| tree | e31d1752db95099853bc18fee1d85ebf15f83a1e /lua/nvim-lsp-installer/installers/context.lua | |
| parent | README: update recording (diff) | |
| download | mason-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.lua | 77 |
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 |
