aboutsummaryrefslogtreecommitdiffstats
path: root/lua
diff options
context:
space:
mode:
authorWilliam Boman <william@redwill.se>2022-12-21 13:44:10 +0100
committerGitHub <noreply@github.com>2022-12-21 13:44:10 +0100
commit28408c857a8f821ff504c9383c96af22b7ca66d9 (patch)
treeff4ec6d36d9a44fcc77f2ca7ec54781285b32de8 /lua
parentfix(powershell): use pwsh if available (#782) (diff)
downloadmason-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')
-rw-r--r--lua/mason-core/spawn.lua40
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)