aboutsummaryrefslogtreecommitdiffstats
path: root/lua
diff options
context:
space:
mode:
Diffstat (limited to 'lua')
-rw-r--r--lua/mason-core/installer/linker.lua16
-rw-r--r--lua/mason-core/path.lua19
2 files changed, 11 insertions, 24 deletions
diff --git a/lua/mason-core/installer/linker.lua b/lua/mason-core/installer/linker.lua
index 5ab6044a..a5c54273 100644
--- a/lua/mason-core/installer/linker.lua
+++ b/lua/mason-core/installer/linker.lua
@@ -73,7 +73,7 @@ end
---@async
---@param context InstallContext
---@param link_context LinkContext
----@param link_fn async fun(new_abs_path: string, target_abs_path: string): Result
+---@param link_fn async fun(new_abs_path: string, target_abs_path: string, target_rel_path: string): Result
local function link(context, link_context, link_fn)
log.trace("Linking", context.package, link_context.type, context.links[link_context.type])
return Result.try(function(try)
@@ -83,6 +83,7 @@ local function link(context, link_context, link_fn)
end
local new_abs_path = link_context.prefix(name, context.location)
local target_abs_path = path.concat { context.package:get_install_path(), rel_path }
+ local target_rel_path = path.relative(new_abs_path, target_abs_path)
do
-- 1. Ensure destination directory exists
@@ -109,7 +110,7 @@ local function link(context, link_context, link_fn)
end
-- 3. Execute link.
- try(link_fn(new_abs_path, target_abs_path))
+ try(link_fn(new_abs_path, target_abs_path, target_rel_path))
context.receipt:with_link(link_context.type, name, rel_path)
end
end)
@@ -118,8 +119,8 @@ end
---@param context InstallContext
---@param link_context LinkContext
local function symlink(context, link_context)
- return link(context, link_context, function(new_abs_path, target_abs_path)
- return Result.pcall(fs.async.symlink, target_abs_path, new_abs_path)
+ return link(context, link_context, function(new_abs_path, _, target_rel_path)
+ return Result.pcall(fs.async.symlink, target_rel_path, new_abs_path)
end)
end
@@ -133,7 +134,8 @@ end
---@param context InstallContext
local function win_bin_wrapper(context)
- return link(context, LinkContext.BIN, function(new_abs_path, target_abs_path)
+ return link(context, LinkContext.BIN, function(new_abs_path, __, target_rel_path)
+ local windows_target_rel_path = target_rel_path:gsub("/", "\\")
return Result.pcall(
fs.async.write_file,
new_abs_path,
@@ -147,8 +149,8 @@ local function win_bin_wrapper(context)
SETLOCAL
CALL :find_dp0
- endLocal & goto #_undefined_# 2>NUL || title %%COMSPEC%% & "%s" %%*
- ]]):format(target_abs_path))
+ endLocal & goto #_undefined_# 2>NUL || title %%COMSPEC%% & "%%dp0%%\%s" %%*
+ ]]):format(windows_target_rel_path))
)
end)
end
diff --git a/lua/mason-core/path.lua b/lua/mason-core/path.lua
index 66f0f964..eec3148d 100644
--- a/lua/mason-core/path.lua
+++ b/lua/mason-core/path.lua
@@ -1,24 +1,9 @@
-local sep = (function()
- ---@diagnostic disable-next-line: undefined-global
- if jit then
- ---@diagnostic disable-next-line: undefined-global
- local os = string.lower(jit.os)
- if os == "linux" or os == "osx" or os == "bsd" then
- return "/"
- else
- return "\\"
- end
- else
- return string.sub(package.config, 1, 1)
- end
-end)()
-
local M = {}
---@param path_components string[]
---@return string
function M.concat(path_components)
- return table.concat(path_components, sep)
+ return vim.fs.normalize(table.concat(path_components, "/"))
end
---@path root_path string
@@ -55,7 +40,7 @@ function M.relative(from, to)
local common_parent, distance = find_closest_common_parent(from_normalized, to_normalized)
local relative_path_component = distance == 0 and "." or (".."):rep(distance, "/")
- return vim.fs.joinpath(relative_path_component, to_normalized:sub(#common_parent + 1))
+ return M.concat { relative_path_component, to_normalized:sub(#common_parent + 1) }
end
return M