Skip to content

Commit 0214c6f

Browse files
committed
Add support for dotnet local tools
1 parent 4fc6d8c commit 0214c6f

File tree

3 files changed

+38
-8
lines changed

3 files changed

+38
-8
lines changed

src/Cake.DotNetTool.Module/DotNetToolContentResolver.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,10 @@ public IReadOnlyCollection<IFile> GetFiles(PackageReference package, PackageType
7373
return GetToolFiles(new DirectoryPath(_environment.GetEnvironmentVariable("USERPROFILE")).Combine(".dotnet/tools"), package);
7474
}
7575
}
76+
else if (package.Parameters.ContainsKey("local"))
77+
{
78+
return new List<IFile>(); // TODO: implementation
79+
}
7680
else
7781
{
7882
return GetToolFiles(_config.GetToolPath(_environment.WorkingDirectory, _environment), package);

src/Cake.DotNetTool.Module/DotNetToolPackage.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,5 +26,11 @@ public sealed class DotNetToolPackage
2626
/// </summary>
2727
/// <value>The tool package short code.</value>
2828
public string ShortCode { get; set; }
29+
30+
/// <summary>
31+
/// Gets or sets the tool package manifest.
32+
/// </summary>
33+
/// <value>The tool package manifest.</value>
34+
public string Manifest { get; set; }
2935
}
3036
}

src/Cake.DotNetTool.Module/DotNetToolPackageInstaller.cs

Lines changed: 28 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,10 @@ public IReadOnlyCollection<IFile> Install(PackageReference package, PackageType
110110
{
111111
toolLocation = "global";
112112
}
113+
else if (package.Parameters.ContainsKey("local"))
114+
{
115+
toolLocation = "local";
116+
}
113117

114118
// First we need to check if the Tool is already installed
115119
var installedTools = GetInstalledTools(toolLocation);
@@ -163,7 +167,15 @@ public IReadOnlyCollection<IFile> Install(PackageReference package, PackageType
163167
private List<DotNetToolPackage> GetInstalledTools(string toolLocation)
164168
{
165169
var toolLocationArgument = string.Empty;
166-
if (toolLocation != "global")
170+
if (toolLocation == "global")
171+
{
172+
toolLocationArgument = "--global";
173+
}
174+
else if (toolLocation == "local")
175+
{
176+
toolLocationArgument = "--local";
177+
}
178+
else
167179
{
168180
toolLocationArgument = string.Format("--tool-path \"{0}\"", toolLocation);
169181
var toolLocationDirectoryPath = new DirectoryPath(toolLocation).MakeAbsolute(_environment);
@@ -177,10 +189,6 @@ private List<DotNetToolPackage> GetInstalledTools(string toolLocation)
177189
return new List<DotNetToolPackage>();
178190
}
179191
}
180-
else
181-
{
182-
toolLocationArgument = "--global";
183-
}
184192

185193
var isInstalledProcess = _processRunner.Start(
186194
"dotnet",
@@ -196,7 +204,7 @@ private List<DotNetToolPackage> GetInstalledTools(string toolLocation)
196204
var installedTools = isInstalledProcess.GetStandardOutput().ToList();
197205
var installedToolNames = new List<DotNetToolPackage>();
198206

199-
const string pattern = @"(?<packageName>[^\s]+)\s+(?<packageVersion>[^\s]+)\s+(?<packageShortCode>[^`s])";
207+
const string pattern = @"(?<packageName>[^\s]+)\s+(?<packageVersion>[^\s]+)\s+(?<packageShortCode>[^\s]+)(?:\s+(?<packageManifest>[^\s]+))?";
200208

201209
foreach (var installedTool in installedTools.Skip(2))
202210
{
@@ -207,7 +215,8 @@ private List<DotNetToolPackage> GetInstalledTools(string toolLocation)
207215
{
208216
Id = match.Groups["packageName"].Value,
209217
Version = match.Groups["packageVersion"].Value,
210-
ShortCode = match.Groups["packageShortCode"].Value
218+
ShortCode = match.Groups["packageShortCode"].Value,
219+
Manifest = match.Groups["packageManifest"].Value
211220
});
212221
}
213222
}
@@ -237,7 +246,7 @@ private void RunDotNetTool(PackageReference package, DirectoryPath toolsFolderDi
237246
{
238247
_log.Warning("dotnet exited with {0}", exitCode);
239248
var output = string.Join(Environment.NewLine, process.GetStandardError());
240-
_log.Verbose(Verbosity.Diagnostic, "Output:\r\n{0}", output);
249+
_log.Verbose(Verbosity.Diagnostic, "Output:{0}{1}", Environment.NewLine, output);
241250
}
242251
}
243252

@@ -257,12 +266,23 @@ private static ProcessArgumentBuilder GetArguments(
257266
{
258267
arguments.Append("--global");
259268
}
269+
else if (definition.Parameters.ContainsKey("local"))
270+
{
271+
arguments.Append("--local");
272+
}
260273
else
261274
{
262275
arguments.Append("--tool-path");
263276
arguments.AppendQuoted(toolDirectoryPath.FullPath);
264277
}
265278

279+
// Tool manifest
280+
if (definition.Parameters.ContainsKey("tool-manifest"))
281+
{
282+
arguments.Append("--tool-manifest");
283+
arguments.AppendQuoted(definition.Parameters["tool-manifest"].First());
284+
}
285+
266286
if (operation != DotNetToolOperation.Uninstall)
267287
{
268288
if (definition.Address != null)

0 commit comments

Comments
 (0)