aboutsummaryrefslogtreecommitdiffstats
path: root/lua/mason-core/installer
diff options
context:
space:
mode:
authorWilliam Boman <william@redwill.se>2023-09-11 00:05:44 +0200
committerWilliam Boman <william@redwill.se>2025-02-16 09:32:29 +0100
commit2275067747a118d6002f421cb54f28affbc0ef98 (patch)
tree79bc1c2580ba96cc1b19e71f2b31f7c4c8ab490c /lua/mason-core/installer
parentchore(main): release 1.11.0 (#1658) (diff)
downloadmason-2275067747a118d6002f421cb54f28affbc0ef98.tar
mason-2275067747a118d6002f421cb54f28affbc0ef98.tar.gz
mason-2275067747a118d6002f421cb54f28affbc0ef98.tar.bz2
mason-2275067747a118d6002f421cb54f28affbc0ef98.tar.lz
mason-2275067747a118d6002f421cb54f28affbc0ef98.tar.xz
mason-2275067747a118d6002f421cb54f28affbc0ef98.tar.zst
mason-2275067747a118d6002f421cb54f28affbc0ef98.zip
refactor!: remove old managers (#1497)
Diffstat (limited to 'lua/mason-core/installer')
-rw-r--r--lua/mason-core/installer/context.lua9
-rw-r--r--lua/mason-core/installer/managers/common.lua2
-rw-r--r--lua/mason-core/installer/managers/powershell.lua44
-rw-r--r--lua/mason-core/installer/managers/pypi.lua8
-rw-r--r--lua/mason-core/installer/managers/std.lua2
5 files changed, 58 insertions, 7 deletions
diff --git a/lua/mason-core/installer/context.lua b/lua/mason-core/installer/context.lua
index 7637209f..21c9c26f 100644
--- a/lua/mason-core/installer/context.lua
+++ b/lua/mason-core/installer/context.lua
@@ -303,10 +303,10 @@ end
---@param new_executable_rel_path string Relative path to the executable file to create.
---@param module string The python module to call.
function InstallContext:write_pyvenv_exec_wrapper(new_executable_rel_path, module)
- local pip3 = require "mason-core.managers.pip3"
+ local pypi = require "mason-core.installer.managers.pypi"
local module_exists, module_err = pcall(function()
local result =
- self.spawn.python { "-c", ("import %s"):format(module), with_paths = { pip3.venv_path(self.cwd:get()) } }
+ self.spawn.python { "-c", ("import %s"):format(module), with_paths = { pypi.venv_path(self.cwd:get()) } }
if not self.spawn.strict_mode then
result:get_or_throw()
end
@@ -319,7 +319,7 @@ function InstallContext:write_pyvenv_exec_wrapper(new_executable_rel_path, modul
new_executable_rel_path,
("%q -m %s"):format(
path.concat {
- pip3.venv_path(self.package:get_install_path()),
+ pypi.venv_path(self.package:get_install_path()),
"python",
},
module
@@ -367,14 +367,13 @@ function InstallContext:write_shell_exec_wrapper(new_executable_rel_path, comman
end
return platform.when {
unix = function()
- local std = require "mason-core.managers.std"
local formatted_envs = _.map(function(pair)
local var, value = pair[1], pair[2]
return ("export %s=%q"):format(var, value)
end, _.to_pairs(env or {}))
self.fs:write_file(new_executable_rel_path, BASH_TEMPLATE:format(_.join("\n", formatted_envs), command))
- std.chmod("+x", { new_executable_rel_path })
+ self.fs:chmod_exec(new_executable_rel_path)
return new_executable_rel_path
end,
win = function()
diff --git a/lua/mason-core/installer/managers/common.lua b/lua/mason-core/installer/managers/common.lua
index c730a3aa..c13d3bff 100644
--- a/lua/mason-core/installer/managers/common.lua
+++ b/lua/mason-core/installer/managers/common.lua
@@ -5,7 +5,7 @@ local async_uv = require "mason-core.async.uv"
local installer = require "mason-core.installer"
local log = require "mason-core.log"
local platform = require "mason-core.platform"
-local powershell = require "mason-core.managers.powershell"
+local powershell = require "mason-core.installer.managers.powershell"
local std = require "mason-core.installer.managers.std"
local M = {}
diff --git a/lua/mason-core/installer/managers/powershell.lua b/lua/mason-core/installer/managers/powershell.lua
new file mode 100644
index 00000000..0e7f4145
--- /dev/null
+++ b/lua/mason-core/installer/managers/powershell.lua
@@ -0,0 +1,44 @@
+local _ = require "mason-core.functional"
+local a = require "mason-core.async"
+local process = require "mason-core.process"
+local spawn = require "mason-core.spawn"
+
+local M = {}
+
+local PWSHOPT = {
+ progress_preference = [[ $ProgressPreference = 'SilentlyContinue'; ]], -- https://stackoverflow.com/a/63301751
+ security_protocol = [[ [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; ]],
+ error_action_preference = [[ $ErrorActionPreference = "Stop"; ]],
+}
+
+local powershell = _.lazy(function()
+ a.scheduler()
+ if vim.fn.executable "pwsh" == 1 then
+ return "pwsh"
+ else
+ return "powershell"
+ end
+end)
+
+---@async
+---@param command string
+---@param opts SpawnArgs?
+---@param custom_spawn JobSpawn?
+function M.command(command, opts, custom_spawn)
+ opts = opts or {}
+ ---@type JobSpawn
+ local spawner = custom_spawn or spawn
+ return spawner[powershell()](vim.tbl_extend("keep", {
+ "-NoProfile",
+ "-NonInteractive",
+ "-Command",
+ PWSHOPT.error_action_preference .. PWSHOPT.progress_preference .. PWSHOPT.security_protocol .. command,
+ env_raw = process.graft_env(opts.env or {}, { "PSMODULEPATH" }),
+ on_spawn = function(_, stdio)
+ local stdin = stdio[1]
+ stdin:close()
+ end,
+ }, opts))
+end
+
+return M
diff --git a/lua/mason-core/installer/managers/pypi.lua b/lua/mason-core/installer/managers/pypi.lua
index f60a8ede..d5368bc8 100644
--- a/lua/mason-core/installer/managers/pypi.lua
+++ b/lua/mason-core/installer/managers/pypi.lua
@@ -15,6 +15,14 @@ local M = {}
local VENV_DIR = "venv"
+function M.venv_path(dir)
+ return path.concat {
+ dir,
+ VENV_DIR,
+ platform.is.win and "Scripts" or "bin",
+ }
+end
+
---@async
---@param candidates string[]
local function resolve_python3(candidates)
diff --git a/lua/mason-core/installer/managers/std.lua b/lua/mason-core/installer/managers/std.lua
index 6e1a0d9e..b4eb11ab 100644
--- a/lua/mason-core/installer/managers/std.lua
+++ b/lua/mason-core/installer/managers/std.lua
@@ -6,7 +6,7 @@ local installer = require "mason-core.installer"
local log = require "mason-core.log"
local path = require "mason-core.path"
local platform = require "mason-core.platform"
-local powershell = require "mason-core.managers.powershell"
+local powershell = require "mason-core.installer.managers.powershell"
local M = {}