Skip to content

Commit d64a01e

Browse files
author
Mirroring
committed
Merge commit '9d51c1bbab7228a7376dc532b9357666e69cbc77'
2 parents f23b9a0 + 9d51c1b commit d64a01e

12 files changed

+180
-18
lines changed

src/Cli/dotnet/ToolPackage/IToolPackageDownloader.cs

Lines changed: 3 additions & 1 deletion
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

@@ -14,7 +15,8 @@ IToolPackage InstallPackage(PackageLocation packageLocation, PackageId packageId
1415
VersionRange versionRange = null,
1516
string targetFramework = null,
1617
bool isGlobalTool = false,
17-
bool isGlobalToolRollForward = false
18+
bool isGlobalToolRollForward = false,
19+
RestoreActionConfig restoreActionConfig = null
1820
);
1921
}
2022
}

src/Cli/dotnet/ToolPackage/ToolPackageDownloader.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,8 @@ public IToolPackage InstallPackage(PackageLocation packageLocation, PackageId pa
7777
VersionRange versionRange = null,
7878
string targetFramework = null,
7979
bool isGlobalTool = false,
80-
bool isGlobalToolRollForward = false
80+
bool isGlobalToolRollForward = false,
81+
RestoreActionConfig restoreActionConfig = null
8182
)
8283
{
8384
var packageRootDirectory = _toolPackageStore.GetRootPackageDirectory(packageId);
@@ -100,7 +101,7 @@ public IToolPackage InstallPackage(PackageLocation packageLocation, PackageId pa
100101

101102
var toolDownloadDir = isGlobalTool ? _globalToolStageDir : _localToolDownloadDir;
102103
var assetFileDirectory = isGlobalTool ? _globalToolStageDir : _localToolAssetDir;
103-
var nugetPackageDownloader = new NuGetPackageDownloader.NuGetPackageDownloader(toolDownloadDir, verboseLogger: nugetLogger, isNuGetTool: true, verbosityOptions: verbosity);
104+
var nugetPackageDownloader = new NuGetPackageDownloader.NuGetPackageDownloader(toolDownloadDir, verboseLogger: nugetLogger, isNuGetTool: true, restoreActionConfig: restoreActionConfig, verbosityOptions: verbosity);
104105

105106
var packageSourceLocation = new PackageSourceLocation(packageLocation.NugetConfig, packageLocation.RootConfigDirectory, null, packageLocation.AdditionalFeeds);
106107

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

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,8 @@ internal class ToolInstallGlobalOrToolPathCommand : CommandBase
5353
private readonly bool _updateAll;
5454

5555

56+
internal readonly RestoreActionConfig _restoreActionConfig;
57+
5658
public ToolInstallGlobalOrToolPathCommand(
5759
ParseResult parseResult,
5860
PackageId? packageId = null,
@@ -84,11 +86,11 @@ public ToolInstallGlobalOrToolPathCommand(
8486
var configOption = parseResult.GetValue(ToolInstallCommandParser.ConfigOption);
8587
var sourceOption = parseResult.GetValue(ToolInstallCommandParser.AddSourceOption);
8688
var packageSourceLocation = new PackageSourceLocation(string.IsNullOrEmpty(configOption) ? null : new FilePath(configOption), additionalSourceFeeds: sourceOption);
87-
var restoreAction = new RestoreActionConfig(DisableParallel: parseResult.GetValue(ToolCommandRestorePassThroughOptions.DisableParallelOption),
89+
_restoreActionConfig = new RestoreActionConfig(DisableParallel: parseResult.GetValue(ToolCommandRestorePassThroughOptions.DisableParallelOption),
8890
NoCache: parseResult.GetValue(ToolCommandRestorePassThroughOptions.NoCacheOption),
8991
IgnoreFailedSources: parseResult.GetValue(ToolCommandRestorePassThroughOptions.IgnoreFailedSourcesOption),
9092
Interactive: parseResult.GetValue(ToolCommandRestorePassThroughOptions.InteractiveRestoreOption));
91-
nugetPackageDownloader ??= new NuGetPackageDownloader(tempDir, verboseLogger: new NullLogger(), restoreActionConfig: restoreAction, verbosityOptions: _verbosity);
93+
nugetPackageDownloader ??= new NuGetPackageDownloader(tempDir, verboseLogger: new NullLogger(), restoreActionConfig: _restoreActionConfig, verbosityOptions: _verbosity);
9294
_shellShimTemplateFinder = new ShellShimTemplateFinder(nugetPackageDownloader, tempDir, packageSourceLocation);
9395
_store = store;
9496

@@ -183,7 +185,8 @@ private int ExecuteInstallCommand(PackageId packageId)
183185
targetFramework: _framework,
184186
verbosity: _verbosity,
185187
isGlobalTool: true,
186-
isGlobalToolRollForward: _allowRollForward
188+
isGlobalToolRollForward: _allowRollForward,
189+
restoreActionConfig: _restoreActionConfig
187190
);
188191

189192
EnsureVersionIsHigher(oldPackageNullable, newInstalledPackage, _allowPackageDowngrade);

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

Lines changed: 8 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;
@@ -30,6 +31,8 @@ internal class ToolInstallLocalCommand : CommandBase
3031
private readonly bool _allowRollForward;
3132
private readonly bool _updateAll;
3233

34+
internal readonly RestoreActionConfig _restoreActionConfig;
35+
3336
public ToolInstallLocalCommand(
3437
ParseResult parseResult,
3538
PackageId? packageId = null,
@@ -54,7 +57,11 @@ public ToolInstallLocalCommand(
5457
new ToolManifestFinder(new DirectoryPath(Directory.GetCurrentDirectory()));
5558
_toolManifestEditor = toolManifestEditor ?? new ToolManifestEditor();
5659
_localToolsResolverCache = localToolsResolverCache ?? new LocalToolsResolverCache();
57-
_toolLocalPackageInstaller = new ToolInstallLocalInstaller(parseResult, toolPackageDownloader);
60+
_restoreActionConfig = new RestoreActionConfig(DisableParallel: parseResult.GetValue(ToolCommandRestorePassThroughOptions.DisableParallelOption),
61+
NoCache: parseResult.GetValue(ToolCommandRestorePassThroughOptions.NoCacheOption),
62+
IgnoreFailedSources: parseResult.GetValue(ToolCommandRestorePassThroughOptions.IgnoreFailedSourcesOption),
63+
Interactive: parseResult.GetValue(ToolCommandRestorePassThroughOptions.InteractiveRestoreOption));
64+
_toolLocalPackageInstaller = new ToolInstallLocalInstaller(parseResult, toolPackageDownloader, _restoreActionConfig);
5865
_toolPackageDownloader = toolPackageDownloader;
5966
_allowRollForward = parseResult.GetValue(ToolInstallCommandParser.RollForwardOption);
6067
_allowPackageDowngrade = parseResult.GetValue(ToolInstallCommandParser.AllowPackageDowngradeOption);

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

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
using System.CommandLine;
55
using System.IO;
66
using Microsoft.DotNet.Cli;
7+
using Microsoft.DotNet.Cli.NuGetPackageDownloader;
78
using Microsoft.DotNet.Cli.ToolPackage;
89
using Microsoft.DotNet.Cli.Utils;
910
using Microsoft.DotNet.ToolPackage;
@@ -23,10 +24,12 @@ internal class ToolInstallLocalInstaller
2324
private readonly string _configFilePath;
2425
private readonly string[] _sources;
2526
private readonly VerbosityOptions _verbosity;
27+
private readonly RestoreActionConfig _restoreActionConfig;
2628

2729
public ToolInstallLocalInstaller(
2830
ParseResult parseResult,
29-
IToolPackageDownloader toolPackageDownloader = null)
31+
IToolPackageDownloader toolPackageDownloader = null,
32+
RestoreActionConfig restoreActionConfig = null)
3033
{
3134
_parseResult = parseResult;
3235
_packageVersion = parseResult.GetValue(ToolInstallCommandParser.VersionOption);
@@ -40,9 +43,9 @@ public ToolInstallLocalInstaller(
4043
= ToolPackageFactory.CreateToolPackageStoresAndDownloader(
4144
additionalRestoreArguments: parseResult.OptionValuesToBeForwarded(ToolInstallCommandParser.GetCommand()));
4245
_toolPackageStore = toolPackageStoresAndDownloader.store;
43-
_toolPackageDownloader = toolPackageDownloader ?? toolPackageStoresAndDownloader.downloader;
44-
45-
46+
_toolPackageDownloader = toolPackageDownloader?? toolPackageStoresAndDownloader.downloader;
47+
_restoreActionConfig = restoreActionConfig;
48+
4649
TargetFrameworkToInstall = BundledTargetFramework.GetTargetFrameworkMoniker();
4750
}
4851

@@ -74,7 +77,8 @@ public IToolPackage Install(FilePath manifestFile, PackageId packageId)
7477
packageId,
7578
verbosity: _verbosity,
7679
versionRange,
77-
TargetFrameworkToInstall
80+
TargetFrameworkToInstall,
81+
restoreActionConfig: _restoreActionConfig
7882
);
7983

8084
return toolDownloadedPackage;

src/Cli/dotnet/commands/dotnet-tool/update/ToolUpdateGlobalOrToolPathCommand.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
using Microsoft.DotNet.Tools.Tool.Uninstall;
1111
using Microsoft.Extensions.EnvironmentAbstractions;
1212
using Microsoft.DotNet.Cli.ToolPackage;
13+
using Microsoft.DotNet.Cli.NuGetPackageDownloader;
1314
using CreateShellShimRepository = Microsoft.DotNet.Tools.Tool.Install.CreateShellShimRepository;
1415

1516
namespace Microsoft.DotNet.Tools.Tool.Update
@@ -22,7 +23,7 @@ internal class ToolUpdateGlobalOrToolPathCommand : CommandBase
2223
{
2324
private readonly CreateShellShimRepository _createShellShimRepository;
2425
private readonly CreateToolPackageStoresAndDownloaderAndUninstaller _createToolPackageStoreDownloaderUninstaller;
25-
private readonly ToolInstallGlobalOrToolPathCommand _toolInstallGlobalOrToolPathCommand;
26+
internal readonly ToolInstallGlobalOrToolPathCommand _toolInstallGlobalOrToolPathCommand;
2627

2728
public ToolUpdateGlobalOrToolPathCommand(ParseResult parseResult,
2829
CreateToolPackageStoresAndDownloaderAndUninstaller createToolPackageStoreDownloaderUninstaller = null,

src/Cli/dotnet/commands/dotnet-tool/update/ToolUpdateLocalCommand.cs

Lines changed: 2 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;
@@ -19,7 +20,7 @@ internal class ToolUpdateLocalCommand : CommandBase
1920
private readonly IToolManifestEditor _toolManifestEditor;
2021
private readonly ILocalToolsResolverCache _localToolsResolverCache;
2122
private readonly IToolPackageDownloader _toolPackageDownloader;
22-
private readonly Lazy<ToolInstallLocalCommand> _toolInstallLocalCommand;
23+
internal readonly Lazy<ToolInstallLocalCommand> _toolInstallLocalCommand;
2324
private readonly IReporter _reporter;
2425

2526
public ToolUpdateLocalCommand(

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

Lines changed: 3 additions & 1 deletion
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;
@@ -97,7 +98,8 @@ public IToolPackage InstallPackage(PackageLocation packageLocation, PackageId pa
9798
VersionRange versionRange = null,
9899
string targetFramework = null,
99100
bool isGlobalTool = false,
100-
bool isGlobalToolRollForward = false
101+
bool isGlobalToolRollForward = false,
102+
RestoreActionConfig restoreActionConfig = null
101103
)
102104
{
103105
string rollbackDirectory = null;

src/Tests/dotnet.Tests/CommandTests/ToolInstallGlobalOrToolPathCommandTests.cs

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

79+
[Fact]
80+
public void WhenPassingRestoreActionConfigOptions()
81+
{
82+
var parseResult = Parser.Instance.Parse($"dotnet tool install -g {PackageId} --ignore-failed-sources");
83+
var toolInstallCommand = new ToolInstallGlobalOrToolPathCommand(parseResult);
84+
toolInstallCommand._restoreActionConfig.IgnoreFailedSources.Should().BeTrue();
85+
}
86+
87+
[Fact]
88+
public void WhenPassingIgnoreFailedSourcesItShouldNotThrow()
89+
{
90+
_fileSystem.File.WriteAllText(Path.Combine(_temporaryDirectory, "nuget.config"), _nugetConfigWithInvalidSources);
91+
var parseResult = Parser.Instance.Parse($"dotnet tool install -g {PackageId} --ignore-failed-sources");
92+
var toolInstallGlobalOrToolPathCommand = new ToolInstallGlobalOrToolPathCommand(
93+
parseResult,
94+
_packageId,
95+
_createToolPackageStoreDownloaderUninstaller,
96+
_createShellShimRepository,
97+
_environmentPathInstructionMock,
98+
_reporter);
99+
100+
toolInstallGlobalOrToolPathCommand.Execute().Should().Be(0);
101+
_fileSystem.File.Delete(Path.Combine(_temporaryDirectory, "nuget.config"));
102+
}
103+
79104
[Fact]
80105
public void WhenRunWithPackageIdItShouldCreateValidShim()
81106
{
@@ -914,6 +939,16 @@ public void SetPermission(string path, string chmodArgument)
914939
{
915940
}
916941
}
942+
943+
private string _nugetConfigWithInvalidSources = @"{
944+
<?xml version=""1.0"" encoding=""utf-8""?>
945+
<configuration>
946+
<packageSources>
947+
<add key=""nuget"" value=""https://api.nuget.org/v3/index.json"" />
948+
<add key=""invalid_source"" value=""https://api.nuget.org/v3/invalid.json"" />
949+
</packageSources>
950+
</configuration>
951+
}";
917952
}
918953
}
919954

src/Tests/dotnet.Tests/CommandTests/ToolInstallLocalCommandTests.cs

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,33 @@ public ToolInstallLocalCommandTests(ITestOutputHelper log):base(log)
9090
1);
9191
}
9292

93+
[Fact]
94+
public void WhenPassingRestoreActionConfigOptions()
95+
{
96+
var parseResult = Parser.Instance.Parse($"dotnet tool install {_packageIdA.ToString()} --ignore-failed-sources");
97+
var command = new ToolInstallLocalCommand(parseResult);
98+
command._restoreActionConfig.IgnoreFailedSources.Should().BeTrue();
99+
}
100+
101+
[Fact]
102+
public void WhenPassingIgnoreFailedSourcesItShouldNotThrow()
103+
{
104+
_fileSystem.File.WriteAllText(Path.Combine(_temporaryDirectory, "nuget.config"), _nugetConfigWithInvalidSources);
105+
var parseResult = Parser.Instance.Parse($"dotnet tool install {_packageIdA.ToString()} --ignore-failed-sources");
106+
var installLocalCommand = new ToolInstallLocalCommand(
107+
parseResult,
108+
_packageIdA,
109+
_toolPackageDownloaderMock,
110+
_toolManifestFinder,
111+
_toolManifestEditor,
112+
_localToolsResolverCache,
113+
_reporter);
114+
115+
installLocalCommand.Execute().Should().Be(0);
116+
117+
_fileSystem.File.Delete(Path.Combine(_temporaryDirectory, "nuget.config"));
118+
}
119+
93120
[Fact]
94121
public void WhenRunWithPackageIdItShouldSaveToCacheAndAddToManifestFile()
95122
{
@@ -485,6 +512,16 @@ out RestoredCommand restoredCommand
485512
""isRoot"":true,
486513
""tools"":{
487514
}
515+
}";
516+
517+
private string _nugetConfigWithInvalidSources = @"{
518+
<?xml version=""1.0"" encoding=""utf-8""?>
519+
<configuration>
520+
<packageSources>
521+
<add key=""nuget"" value=""https://api.nuget.org/v3/index.json"" />
522+
<add key=""invalid_source"" value=""https://api.nuget.org/v3/invalid.json"" />
523+
</packageSources>
524+
</configuration>
488525
}";
489526
}
490527
}

0 commit comments

Comments
 (0)