diff options
Diffstat (limited to 'lua')
| -rw-r--r-- | lua/mason-core/installer/linker.lua | 16 | ||||
| -rw-r--r-- | lua/mason-core/path.lua | 19 |
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 |
