Skip to content

Commit 4bda9ae

Browse files
committed
feat(nuget): handle regular nuget and nuget tool properly
1 parent d6c6a6e commit 4bda9ae

File tree

1 file changed

+40
-15
lines changed

1 file changed

+40
-15
lines changed

lua/mason-core/installer/managers/nuget.lua

Lines changed: 40 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -29,13 +29,6 @@ function M.install(package, version, repository_url)
2929
local package_base_address = resource["@id"]
3030
local package_lowercase = package:lower()
3131

32-
local nupkg_download_url = string.format("%s%s/%s/%s.%s.nupkg",
33-
package_base_address,
34-
package_lowercase,
35-
version,
36-
package_lowercase,
37-
version)
38-
3932
local nuspec_url = string.format("%s%s/%s/%s.nuspec",
4033
package_base_address,
4134
package_lowercase,
@@ -46,19 +39,51 @@ function M.install(package, version, repository_url)
4639

4740
local nuspec_file = M.fetch_nuget_endpoint_xml(nuspec_url):get_or_throw()
4841

49-
if string.match(nuspec_file, "<packageType%s+name%s*=%s*\"DotnetTool\"%s*/>") then
50-
-- print(vim.inspect(nuspec_file))
51-
print(package_lowercase .. ": " .. "It's a tool!")
42+
ctx.stdio_sink.stdout(("Installing nuget package %s@%s…\n"):format(package, version))
43+
44+
local is_dotnet_tool = string.match(nuspec_file, "<packageType%s+name%s*=%s*\"DotnetTool\"%s*/>")
45+
if is_dotnet_tool then
46+
return M.install_dotnet_tool(package, version, repository_url)
47+
else
48+
local nupkg_download_url = string.format("%s%s/%s/%s.%s.nupkg",
49+
package_base_address,
50+
package_lowercase,
51+
version,
52+
package_lowercase,
53+
version)
54+
55+
local download_item = {
56+
download_url = nupkg_download_url,
57+
out_file = string.format("%s-%s.nupkg", package, version)
58+
}
59+
60+
return common.download_files(ctx, { download_item })
5261
end
62+
end
5363

54-
ctx.stdio_sink:stdout(("Installing nuget package %s@%s…\n"):format(package, version))
64+
---@async
65+
---@param package string
66+
---@param version string
67+
---@param repository_url string
68+
---@nodiscard
69+
function M.install_dotnet_tool(package, version, repository_url)
70+
local ctx = installer.context()
5571

56-
local download_item = {
57-
download_url = nupkg_download_url,
58-
out_file = string.format("%s-%s.nupkg", package, version)
72+
local args = {
73+
"tool",
74+
"update",
75+
"--tool-path",
76+
".",
77+
{ "--version", version },
5978
}
6079

61-
return common.download_files(ctx, { download_item })
80+
if repository_url then
81+
table.insert(args, { "--add-source", repository_url })
82+
end
83+
84+
table.insert(args, package)
85+
86+
return ctx.spawn.dotnet(args)
6287
end
6388

6489
---@alias NugetIndexResource { '@id': string, '@type': string}

0 commit comments

Comments
 (0)