@@ -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 )
6287end
6388
6489--- @alias NugetIndexResource { ' @id' : string , ' @type' : string }
0 commit comments