aboutsummaryrefslogtreecommitdiffstats
path: root/lua/mason-core/installer/linker.lua
diff options
context:
space:
mode:
authorWilliam Boman <william@redwill.se>2023-10-13 17:05:12 +0200
committerWilliam Boman <william@redwill.se>2025-02-19 09:23:19 +0100
commit80944cbf22e10a4debe59d2f0166fb0cd7b1b1aa (patch)
tree9abe9afe34923fce89d6b9b90a1b41445a4d1cd4 /lua/mason-core/installer/linker.lua
parentfeat(path): add relative(from, to) (diff)
downloadmason-80944cbf22e10a4debe59d2f0166fb0cd7b1b1aa.tar
mason-80944cbf22e10a4debe59d2f0166fb0cd7b1b1aa.tar.gz
mason-80944cbf22e10a4debe59d2f0166fb0cd7b1b1aa.tar.bz2
mason-80944cbf22e10a4debe59d2f0166fb0cd7b1b1aa.tar.lz
mason-80944cbf22e10a4debe59d2f0166fb0cd7b1b1aa.tar.xz
mason-80944cbf22e10a4debe59d2f0166fb0cd7b1b1aa.tar.zst
mason-80944cbf22e10a4debe59d2f0166fb0cd7b1b1aa.zip
feat(linker): use relative targets for symlinks (#1525)
Closes #1156.
Diffstat (limited to 'lua/mason-core/installer/linker.lua')
-rw-r--r--lua/mason-core/installer/linker.lua16
1 files changed, 9 insertions, 7 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