diff options
| author | William Boman <william@redwill.se> | 2022-12-21 13:44:10 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-12-21 13:44:10 +0100 |
| commit | 28408c857a8f821ff504c9383c96af22b7ca66d9 (patch) | |
| tree | ff4ec6d36d9a44fcc77f2ca7ec54781285b32de8 /lua/mason-core/spawn.lua | |
| parent | fix(powershell): use pwsh if available (#782) (diff) | |
| download | mason-28408c857a8f821ff504c9383c96af22b7ca66d9.tar mason-28408c857a8f821ff504c9383c96af22b7ca66d9.tar.gz mason-28408c857a8f821ff504c9383c96af22b7ca66d9.tar.bz2 mason-28408c857a8f821ff504c9383c96af22b7ca66d9.tar.lz mason-28408c857a8f821ff504c9383c96af22b7ca66d9.tar.xz mason-28408c857a8f821ff504c9383c96af22b7ca66d9.tar.zst mason-28408c857a8f821ff504c9383c96af22b7ca66d9.zip | |
Revert "fix(spawn): always expand cmd if PATH is not modified (#773)" (#783)
This reverts commit dd04b4105e84620685c37efb6ca935d282e11465.
Diffstat (limited to 'lua/mason-core/spawn.lua')
| -rw-r--r-- | lua/mason-core/spawn.lua | 40 |
1 files changed, 21 insertions, 19 deletions
diff --git a/lua/mason-core/spawn.lua b/lua/mason-core/spawn.lua index bfc6ea29..814ef8f7 100644 --- a/lua/mason-core/spawn.lua +++ b/lua/mason-core/spawn.lua @@ -8,6 +8,15 @@ local log = require "mason-core.log" ---@alias JobSpawn table<string, async fun(opts: SpawnArgs): Result> ---@type JobSpawn local spawn = { + _aliases = { + npm = platform.is.win and "npm.cmd" or "npm", + gem = platform.is.win and "gem.cmd" or "gem", + composer = platform.is.win and "composer.bat" or "composer", + gradlew = platform.is.win and "gradlew.bat" or "gradlew", + -- for hererocks installations + luarocks = (platform.is.win and vim.fn.executable "luarocks.bat" == 1) and "luarocks.bat" or "luarocks", + rebar3 = platform.is.win and "rebar3.cmd" or "rebar3", + }, _flatten_cmd_args = _.compose(_.filter(_.complement(_.equals(vim.NIL))), _.flatten), } @@ -24,16 +33,11 @@ local function Failure(err, cmd) })) end -local exepath = _.memoize(function(cmd) +local is_executable = _.memoize(function(cmd) if vim.in_fast_event() then a.scheduler() end - local exepath = vim.fn.exepath(cmd) - if exepath == "" then - return nil - else - return exepath - end + return vim.fn.executable(cmd) == 1 end, _.identity) ---@class SpawnArgs @@ -43,10 +47,11 @@ end, _.identity) ---@field stdio_sink StdioSink? If provided, will be used to write to stdout and stderr. ---@field cwd string? ---@field on_spawn (fun(handle: luv_handle, stdio: luv_pipe[], pid: integer))? Will be called when the process successfully spawns. +---@field check_executable boolean? Whether to check if the provided command is executable (defaults to true). setmetatable(spawn, { - ---@param cmd string - __index = function(self, cmd) + ---@param normalized_cmd string + __index = function(self, normalized_cmd) ---@param args SpawnArgs return function(args) local cmd_args = self._flatten_cmd_args(args) @@ -71,16 +76,13 @@ setmetatable(spawn, { spawn_args.stdio_sink = stdio.sink end - -- Ensure that the cmd is executable (only if PATH is not modified). - if (env and env.PATH) == nil then - local expanded_cmd = exepath(cmd) - if expanded_cmd == nil then - log.fmt_debug("%s is not executable", cmd) - return Failure({ - stderr = ("%s is not executable"):format(cmd), - }, cmd) - end - cmd = expanded_cmd + local cmd = self._aliases[normalized_cmd] or normalized_cmd + + if (env and env.PATH) == nil and args.check_executable ~= false and not is_executable(cmd) then + log.fmt_debug("%s is not executable", cmd) + return Failure({ + stderr = ("%s is not executable"):format(cmd), + }, cmd) end local _, exit_code, signal = a.wait(function(resolve) |
