aboutsummaryrefslogtreecommitdiffstats
path: root/lua/nvim-lsp-installer/core/fetch.lua
diff options
context:
space:
mode:
authorWilliam Boman <william@redwill.se>2022-01-03 15:12:53 +0100
committerGitHub <noreply@github.com>2022-01-03 15:12:53 +0100
commite8530f4059279a0d6b5e5f8891d04ffb1ade29a3 (patch)
treeb90ddf4479314af49e1eca3325262ef45e5f630d /lua/nvim-lsp-installer/core/fetch.lua
parenthealth: add neovim version check (diff)
downloadmason-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.lua59
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