Skip to content

Commit 57c6e5f

Browse files
edvilmenagilson
andauthored
[FIX] tool-install: Use restore action config options (#44309)
Co-authored-by: Noah Gilson <[email protected]>
1 parent 4a56ead commit 57c6e5f

File tree

9 files changed

+119
-17
lines changed

9 files changed

+119
-17
lines changed

eng/dogfood.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,4 +25,4 @@ export MicrosoftNETBuildExtensionsTargets="$artifacts_dir/bin/$configuration/Sdk
2525

2626
export PATH=$testDotnetRoot:$PATH
2727
export DOTNET_ROOT=$testDotnetRoot
28-
export PS1="(dogfood) $PS1"
28+
export PS1="(dogfood) $PS1"

src/Cli/dotnet/ToolPackage/IToolPackageDownloader.cs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
// The .NET Foundation licenses this file to you under the MIT license.
33

44
using System.Threading.Tasks;
5+
using Microsoft.DotNet.Cli.NuGetPackageDownloader;
56
using Microsoft.DotNet.ToolPackage;
67
using NuGet.Versioning;
78

@@ -16,15 +17,17 @@ IToolPackage InstallPackage(PackageLocation packageLocation,
1617
string targetFramework = null,
1718
bool isGlobalTool = false,
1819
bool isGlobalToolRollForward = false,
19-
bool verifySignatures = true
20+
bool verifySignatures = true,
21+
RestoreActionConfig restoreActionConfig = null
2022
);
2123

2224
NuGetVersion GetNuGetVersion(
2325
PackageLocation packageLocation,
2426
PackageId packageId,
2527
VerbosityOptions verbosity,
2628
VersionRange versionRange = null,
27-
bool isGlobalTool = false
29+
bool isGlobalTool = false,
30+
RestoreActionConfig restoreActionConfig = null
2831
);
2932
}
3033
}

src/Cli/dotnet/ToolPackage/ToolPackageDownloader.cs

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,8 @@ public IToolPackage InstallPackage(PackageLocation packageLocation, PackageId pa
7272
string targetFramework = null,
7373
bool isGlobalTool = false,
7474
bool isGlobalToolRollForward = false,
75-
bool verifySignatures = true
75+
bool verifySignatures = true,
76+
RestoreActionConfig restoreActionConfig = null
7677
)
7778
{
7879
var packageRootDirectory = _toolPackageStore.GetRootPackageDirectory(packageId);
@@ -96,7 +97,14 @@ public IToolPackage InstallPackage(PackageLocation packageLocation, PackageId pa
9697
var toolDownloadDir = isGlobalTool ? _globalToolStageDir : _localToolDownloadDir;
9798
var assetFileDirectory = isGlobalTool ? _globalToolStageDir : _localToolAssetDir;
9899

99-
var nugetPackageDownloader = new NuGetPackageDownloader.NuGetPackageDownloader(toolDownloadDir, verboseLogger: nugetLogger, verifySignatures: verifySignatures, shouldUsePackageSourceMapping: true, verbosityOptions: verbosity, currentWorkingDirectory: _currentWorkingDirectory);
100+
var nugetPackageDownloader = new NuGetPackageDownloader.NuGetPackageDownloader(
101+
toolDownloadDir,
102+
verboseLogger: nugetLogger,
103+
verifySignatures: verifySignatures,
104+
shouldUsePackageSourceMapping: true,
105+
restoreActionConfig: restoreActionConfig,
106+
verbosityOptions: verbosity,
107+
currentWorkingDirectory: _currentWorkingDirectory);
100108

101109
var packageSourceLocation = new PackageSourceLocation(packageLocation.NugetConfig, packageLocation.RootConfigDirectory, packageLocation.SourceFeedOverrides, packageLocation.AdditionalFeeds);
102110

@@ -380,7 +388,8 @@ public NuGetVersion GetNuGetVersion(
380388
PackageId packageId,
381389
VerbosityOptions verbosity,
382390
VersionRange versionRange = null,
383-
bool isGlobalTool = false)
391+
bool isGlobalTool = false,
392+
RestoreActionConfig restoreActionConfig = null)
384393
{
385394
ILogger nugetLogger = new NullLogger();
386395

@@ -399,7 +408,8 @@ public NuGetVersion GetNuGetVersion(
399408
packageInstallDir: isGlobalTool ? _globalToolStageDir : _localToolDownloadDir,
400409
verboseLogger: nugetLogger,
401410
shouldUsePackageSourceMapping: true,
402-
verbosityOptions: verbosity);
411+
verbosityOptions: verbosity,
412+
restoreActionConfig: restoreActionConfig);
403413

404414
var packageSourceLocation = new PackageSourceLocation(
405415
nugetConfig: packageLocation.NugetConfig,

src/Cli/dotnet/commands/dotnet-tool/install/ToolInstallGlobalOrToolPathCommand.cs

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,8 @@ internal class ToolInstallGlobalOrToolPathCommand : CommandBase
5151
private readonly string _currentWorkingDirectory;
5252
private readonly bool? _verifySignatures;
5353

54+
internal readonly RestoreActionConfig restoreActionConfig;
55+
5456
public ToolInstallGlobalOrToolPathCommand(
5557
ParseResult parseResult,
5658
PackageId? packageId = null,
@@ -86,11 +88,11 @@ public ToolInstallGlobalOrToolPathCommand(
8688
var configOption = parseResult.GetValue(ToolInstallCommandParser.ConfigOption);
8789
var sourceOption = parseResult.GetValue(ToolInstallCommandParser.AddSourceOption);
8890
var packageSourceLocation = new PackageSourceLocation(string.IsNullOrEmpty(configOption) ? null : new FilePath(configOption), additionalSourceFeeds: sourceOption);
89-
var restoreAction = new RestoreActionConfig(DisableParallel: parseResult.GetValue(ToolCommandRestorePassThroughOptions.DisableParallelOption),
91+
restoreActionConfig = new RestoreActionConfig(DisableParallel: parseResult.GetValue(ToolCommandRestorePassThroughOptions.DisableParallelOption),
9092
NoCache: (parseResult.GetValue(ToolCommandRestorePassThroughOptions.NoCacheOption) || parseResult.GetValue(ToolCommandRestorePassThroughOptions.NoHttpCacheOption)),
9193
IgnoreFailedSources: parseResult.GetValue(ToolCommandRestorePassThroughOptions.IgnoreFailedSourcesOption),
9294
Interactive: parseResult.GetValue(ToolCommandRestorePassThroughOptions.InteractiveRestoreOption));
93-
nugetPackageDownloader ??= new NuGetPackageDownloader(tempDir, verboseLogger: new NullLogger(), restoreActionConfig: restoreAction, verbosityOptions: _verbosity, verifySignatures: verifySignatures ?? true);
95+
nugetPackageDownloader ??= new NuGetPackageDownloader(tempDir, verboseLogger: new NullLogger(), restoreActionConfig: restoreActionConfig, verbosityOptions: _verbosity, verifySignatures: verifySignatures ?? true);
9496
_shellShimTemplateFinder = new ShellShimTemplateFinder(nugetPackageDownloader, tempDir, packageSourceLocation);
9597
_store = store;
9698

@@ -192,7 +194,8 @@ private int ExecuteInstallCommand(PackageId packageId)
192194
verbosity: _verbosity,
193195
isGlobalTool: true,
194196
isGlobalToolRollForward: _allowRollForward,
195-
verifySignatures: _verifySignatures ?? true
197+
verifySignatures: _verifySignatures ?? true,
198+
restoreActionConfig: restoreActionConfig
196199
);
197200

198201
EnsureVersionIsHigher(oldPackageNullable, newInstalledPackage, _allowPackageDowngrade);
@@ -239,7 +242,8 @@ private NuGetVersion GetBestMatchNugetVersion(PackageId packageId, VersionRange
239242
packageId: packageId,
240243
versionRange: versionRange,
241244
verbosity: _verbosity,
242-
isGlobalTool: true
245+
isGlobalTool: true,
246+
restoreActionConfig: restoreActionConfig
243247
);
244248
}
245249

src/Cli/dotnet/commands/dotnet-tool/install/ToolInstallLocalCommand.cs

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
using System.CommandLine;
55
using Microsoft.DotNet.Cli;
6+
using Microsoft.DotNet.Cli.NuGetPackageDownloader;
67
using Microsoft.DotNet.Cli.ToolPackage;
78
using Microsoft.DotNet.Cli.Utils;
89
using Microsoft.DotNet.ToolManifest;
@@ -28,6 +29,8 @@ internal class ToolInstallLocalCommand : CommandBase
2829
private readonly bool _allowRollForward;
2930
private readonly bool _updateAll;
3031

32+
internal RestoreActionConfig restoreActionConfig;
33+
3134
public ToolInstallLocalCommand(
3235
ParseResult parseResult,
3336
PackageId? packageId = null,
@@ -53,7 +56,13 @@ public ToolInstallLocalCommand(
5356
new ToolManifestFinder(new DirectoryPath(Directory.GetCurrentDirectory()));
5457
_toolManifestEditor = toolManifestEditor ?? new ToolManifestEditor();
5558
_localToolsResolverCache = localToolsResolverCache ?? new LocalToolsResolverCache();
56-
_toolLocalPackageInstaller = new ToolInstallLocalInstaller(parseResult, toolPackageDownloader, runtimeJsonPathForTests);
59+
60+
restoreActionConfig = new RestoreActionConfig(DisableParallel: parseResult.GetValue(ToolCommandRestorePassThroughOptions.DisableParallelOption),
61+
NoCache: (parseResult.GetValue(ToolCommandRestorePassThroughOptions.NoCacheOption) || parseResult.GetValue(ToolCommandRestorePassThroughOptions.NoHttpCacheOption)),
62+
IgnoreFailedSources: parseResult.GetValue(ToolCommandRestorePassThroughOptions.IgnoreFailedSourcesOption),
63+
Interactive: parseResult.GetValue(ToolCommandRestorePassThroughOptions.InteractiveRestoreOption));
64+
65+
_toolLocalPackageInstaller = new ToolInstallLocalInstaller(parseResult, toolPackageDownloader, runtimeJsonPathForTests, restoreActionConfig);
5766
_allowRollForward = parseResult.GetValue(ToolInstallCommandParser.RollForwardOption);
5867
_allowPackageDowngrade = parseResult.GetValue(ToolInstallCommandParser.AllowPackageDowngradeOption);
5968
}

src/Cli/dotnet/commands/dotnet-tool/install/ToolInstallLocalInstaller.cs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
using System.CommandLine;
55
using Microsoft.DotNet.Cli;
6+
using Microsoft.DotNet.Cli.NuGetPackageDownloader;
67
using Microsoft.DotNet.Cli.ToolPackage;
78
using Microsoft.DotNet.Cli.Utils;
89
using Microsoft.DotNet.ToolPackage;
@@ -20,11 +21,13 @@ internal class ToolInstallLocalInstaller
2021
private readonly string _configFilePath;
2122
private readonly string[] _sources;
2223
private readonly VerbosityOptions _verbosity;
24+
private readonly RestoreActionConfig _restoreActionConfig;
2325

2426
public ToolInstallLocalInstaller(
2527
ParseResult parseResult,
2628
IToolPackageDownloader toolPackageDownloader = null,
27-
string runtimeJsonPathForTests = null)
29+
string runtimeJsonPathForTests = null,
30+
RestoreActionConfig restoreActionConfig = null)
2831
{
2932
_parseResult = parseResult;
3033
_configFilePath = parseResult.GetValue(ToolInstallCommandParser.ConfigOption);
@@ -37,7 +40,7 @@ public ToolInstallLocalInstaller(
3740
= ToolPackageFactory.CreateToolPackageStoresAndDownloader(
3841
additionalRestoreArguments: parseResult.OptionValuesToBeForwarded(ToolInstallCommandParser.GetCommand()), runtimeJsonPathForTests: runtimeJsonPathForTests);
3942
_toolPackageDownloader = toolPackageDownloader ?? toolPackageStoresAndDownloader.downloader;
40-
43+
_restoreActionConfig = restoreActionConfig;
4144

4245
TargetFrameworkToInstall = BundledTargetFramework.GetTargetFrameworkMoniker();
4346
}
@@ -70,7 +73,8 @@ public IToolPackage Install(FilePath manifestFile, PackageId packageId)
7073
packageId,
7174
verbosity: _verbosity,
7275
versionRange,
73-
TargetFrameworkToInstall
76+
TargetFrameworkToInstall,
77+
restoreActionConfig: _restoreActionConfig
7478
);
7579

7680
return toolDownloadedPackage;

test/Microsoft.DotNet.Tools.Tests.ComponentMocks/ToolPackageDownloaderMock.cs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
using System.Linq;
88
using System.Text.Json;
99
using Microsoft.DotNet.Cli;
10+
using Microsoft.DotNet.Cli.NuGetPackageDownloader;
1011
using Microsoft.DotNet.Cli.ToolPackage;
1112
using Microsoft.DotNet.Cli.Utils;
1213
using Microsoft.DotNet.ToolPackage;
@@ -98,7 +99,8 @@ public IToolPackage InstallPackage(PackageLocation packageLocation, PackageId pa
9899
string targetFramework = null,
99100
bool isGlobalTool = false,
100101
bool isGlobalToolRollForward = false,
101-
bool verifySignatures = false
102+
bool verifySignatures = false,
103+
RestoreActionConfig restoreActionConfig = null
102104
)
103105
{
104106
string rollbackDirectory = null;
@@ -311,7 +313,8 @@ public NuGetVersion GetNuGetVersion(
311313
PackageId packageId,
312314
VerbosityOptions verbosity,
313315
VersionRange versionRange = null,
314-
bool isGlobalTool = false)
316+
bool isGlobalTool = false,
317+
RestoreActionConfig restoreActionConfig = null)
315318
{
316319
versionRange = VersionRange.Parse(versionRange?.OriginalString ?? "*");
317320

test/dotnet.Tests/CommandTests/ToolInstallGlobalOrToolPathCommandTests.cs

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,30 @@ public ToolInstallGlobalOrToolPathCommandTests(ITestOutputHelper log): base(log)
7777
_parseResult = Parser.Instance.Parse($"dotnet tool install -g {PackageId}");
7878
}
7979

80+
[Fact]
81+
public void WhenPassingRestoreActionConfigOptions()
82+
{
83+
var parseResult = Parser.Instance.Parse($"dotnet tool install -g {PackageId} --ignore-failed-sources");
84+
var toolInstallCommand = new ToolInstallGlobalOrToolPathCommand(parseResult);
85+
toolInstallCommand.restoreActionConfig.IgnoreFailedSources.Should().BeTrue();
86+
}
87+
88+
[Fact]
89+
public void WhenPassingIgnoreFailedSourcesItShouldNotThrow()
90+
{
91+
_fileSystem.File.WriteAllText(Path.Combine(_temporaryDirectory, "nuget.config"), _nugetConfigWithInvalidSources);
92+
93+
var toolInstallGlobalOrToolPathCommand = new ToolInstallGlobalOrToolPathCommand(
94+
Parser.Instance.Parse($"dotnet tool install -g {PackageId} --ignore-failed-sources"),
95+
_packageId,
96+
_createToolPackageStoreDownloaderUninstaller,
97+
_createShellShimRepository,
98+
new EnvironmentPathInstructionMock(_reporter, _pathToPlaceShim, true),
99+
_reporter);
100+
101+
toolInstallGlobalOrToolPathCommand.Execute().Should().Be(0);
102+
_fileSystem.File.Delete(Path.Combine(_temporaryDirectory, "nuget.config"));
103+
}
80104
[Fact]
81105
public void WhenRunWithPackageIdItShouldCreateValidShim()
82106
{
@@ -967,6 +991,16 @@ public void SetPermission(string path, string chmodArgument)
967991
{
968992
}
969993
}
994+
995+
private string _nugetConfigWithInvalidSources = @"{
996+
<?xml version=""1.0"" encoding=""utf-8""?>
997+
<configuration>
998+
<packageSources>
999+
<add key=""nuget"" value=""https://api.nuget.org/v3/index.json"" />
1000+
<add key=""invalid_source"" value=""https://api.nuget.org/v3/invalid.json"" />
1001+
</packageSources>
1002+
</configuration>
1003+
}";
9701004
}
9711005
}
9721006

test/dotnet.Tests/CommandTests/ToolInstallLocalCommandTests.cs

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,31 @@ public ToolInstallLocalCommandTests(ITestOutputHelper log) : base(log)
8989
new DirectoryPath(Path.Combine(_temporaryDirectory, "cache")),
9090
1);
9191
}
92+
[Fact]
93+
public void WhenPassingRestoreActionConfigOptions()
94+
{
95+
var parseResult = Parser.Instance.Parse($"dotnet tool install {_packageIdA.ToString()} --ignore-failed-sources");
96+
var toolInstallCommand = new ToolInstallLocalCommand(parseResult);
97+
toolInstallCommand.restoreActionConfig.IgnoreFailedSources.Should().BeTrue();
98+
}
99+
100+
[Fact]
101+
public void WhenPassingIgnoreFailedSourcesItShouldNotThrow()
102+
{
103+
_fileSystem.File.WriteAllText(Path.Combine(_temporaryDirectory, "nuget.config"), _nugetConfigWithInvalidSources);
104+
var parseResult = Parser.Instance.Parse($"dotnet tool install {_packageIdA.ToString()} --ignore-failed-sources");
105+
var toolInstallCommand = new ToolInstallLocalCommand(parseResult,
106+
_packageIdA,
107+
_toolPackageDownloaderMock,
108+
_toolManifestFinder,
109+
_toolManifestEditor,
110+
_localToolsResolverCache,
111+
_reporter);
112+
113+
toolInstallCommand.Execute().Should().Be(0);
114+
115+
_fileSystem.File.Delete(Path.Combine(_temporaryDirectory, "nuget.config"));
116+
}
92117

93118
[Fact]
94119
public void WhenRunWithPackageIdItShouldSaveToCacheAndAddToManifestFile()
@@ -485,6 +510,16 @@ out RestoredCommand restoredCommand
485510
""isRoot"":true,
486511
""tools"":{
487512
}
513+
}";
514+
515+
private string _nugetConfigWithInvalidSources = @"{
516+
<?xml version=""1.0"" encoding=""utf-8""?>
517+
<configuration>
518+
<packageSources>
519+
<add key=""nuget"" value=""https://api.nuget.org/v3/index.json"" />
520+
<add key=""invalid_source"" value=""https://api.nuget.org/v3/invalid.json"" />
521+
</packageSources>
522+
</configuration>
488523
}";
489524
}
490525
}

0 commit comments

Comments
 (0)