From 3664448c41717f1c40a42839cbb55c925ea11046 Mon Sep 17 00:00:00 2001 From: William Boman Date: Fri, 14 Apr 2023 17:30:04 +0200 Subject: fix(std): manually call zstd on Windows (#1212) Closes #1207. --- lua/mason-core/installer/managers/std.lua | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) (limited to 'lua/mason-core/installer/managers/std.lua') diff --git a/lua/mason-core/installer/managers/std.lua b/lua/mason-core/installer/managers/std.lua index 5bcca5ab..6112b317 100644 --- a/lua/mason-core/installer/managers/std.lua +++ b/lua/mason-core/installer/managers/std.lua @@ -193,13 +193,32 @@ local function untar_compressed(rel_path) } end +---@async +---@param rel_path string +---@return Result +---@nodiscard +local function untar_zst(rel_path) + return platform.when { + unix = function() + return untar(rel_path) + end, + win = function() + local ctx = installer.context() + local uncompressed_tar = rel_path:gsub("%.zst$", "") + ctx.spawn.zstd { "-dfo", uncompressed_tar, rel_path } + ctx.fs:unlink(rel_path) + return untar(uncompressed_tar) + end, + } +end + -- Order is important. local unpack_by_filename = _.cond { { _.matches "%.tar$", untar }, { _.matches "%.tar%.gz$", untar }, { _.matches "%.tar%.bz2$", untar }, { _.matches "%.tar%.xz$", untar_compressed }, - { _.matches "%.tar%.zst$", untar_compressed }, + { _.matches "%.tar%.zst$", untar_zst }, { _.matches "%.zip$", unzip }, { _.matches "%.vsix$", unzip }, { _.matches "%.gz$", gunzip }, -- cgit v1.2.3-70-g09d2