diff options
| author | William Boman <william@redwill.se> | 2022-01-03 15:12:53 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-01-03 15:12:53 +0100 |
| commit | e8530f4059279a0d6b5e5f8891d04ffb1ade29a3 (patch) | |
| tree | b90ddf4479314af49e1eca3325262ef45e5f630d /lua/nvim-lsp-installer/core/fetch.lua | |
| parent | health: add neovim version check (diff) | |
| download | mason-e8530f4059279a0d6b5e5f8891d04ffb1ade29a3.tar mason-e8530f4059279a0d6b5e5f8891d04ffb1ade29a3.tar.gz mason-e8530f4059279a0d6b5e5f8891d04ffb1ade29a3.tar.bz2 mason-e8530f4059279a0d6b5e5f8891d04ffb1ade29a3.tar.lz mason-e8530f4059279a0d6b5e5f8891d04ffb1ade29a3.tar.xz mason-e8530f4059279a0d6b5e5f8891d04ffb1ade29a3.tar.zst mason-e8530f4059279a0d6b5e5f8891d04ffb1ade29a3.zip | |
write install receipts (#379)
Diffstat (limited to 'lua/nvim-lsp-installer/core/fetch.lua')
| -rw-r--r-- | lua/nvim-lsp-installer/core/fetch.lua | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/lua/nvim-lsp-installer/core/fetch.lua b/lua/nvim-lsp-installer/core/fetch.lua new file mode 100644 index 00000000..3e601cb6 --- /dev/null +++ b/lua/nvim-lsp-installer/core/fetch.lua @@ -0,0 +1,59 @@ +local log = require "nvim-lsp-installer.log" +local process = require "nvim-lsp-installer.process" +local platform = require "nvim-lsp-installer.platform" + +---@param url string The url to fetch. +---@param callback fun(err: string|nil, raw_data: string) +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 + + local job_variants = { + process.lazy_spawn("wget", { + args = { "-nv", "-O", "-", url }, + stdio_sink = stdio.sink, + }), + process.lazy_spawn("curl", { + args = { "-fsSL", url }, + stdio_sink = stdio.sink, + }), + } + + if platform.is_win then + local ps_script = { + "$ProgressPreference = 'SilentlyContinue'", + ("Write-Output (iwr -UseBasicParsing -Uri %q).Content"):format(url), + } + table.insert( + job_variants, + 1, + process.lazy_spawn("powershell.exe", { + args = { "-NoProfile", "-Command", table.concat(ps_script, ";") }, + stdio_sink = stdio.sink, + env = process.graft_env({}, { "PSMODULEPATH" }), + }) + ) + end + + process.attempt { + jobs = job_variants, + on_iterate = function() + log.debug "Flushing stdout/stderr buffers." + stdio.buffers.stdout = {} + stdio.buffers.stderr = {} + end, + on_finish = on_exit, + } +end + +return fetch |
