Skip to content

Commit c5b93c8

Browse files
author
Mirroring
committed
Merge commit '95f4ea0698537833094a032530a5996b4c627658'
2 parents 0f49477 + 95f4ea0 commit c5b93c8

12 files changed

+195
-16
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

@@ -13,7 +14,8 @@ IToolPackage InstallPackage(PackageLocation packageLocation, PackageId packageId
1314
VerbosityOptions verbosity,
1415
VersionRange versionRange = null,
1516
string targetFramework = null,
16-
bool isGlobalTool = false
17+
bool isGlobalTool = false,
18+
RestoreActionConfig restoreActionConfig = null
1719
);
1820
}
1921
}

src/Cli/dotnet/ToolPackage/ToolPackageDownloader.cs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,8 @@ public IToolPackage InstallPackage(PackageLocation packageLocation, PackageId pa
7272
VerbosityOptions verbosity = VerbosityOptions.normal,
7373
VersionRange versionRange = null,
7474
string targetFramework = null,
75-
bool isGlobalTool = false
75+
bool isGlobalTool = false,
76+
RestoreActionConfig restoreActionConfig = null
7677
)
7778
{
7879
var packageRootDirectory = _toolPackageStore.GetRootPackageDirectory(packageId);
@@ -95,7 +96,11 @@ public IToolPackage InstallPackage(PackageLocation packageLocation, PackageId pa
9596

9697
var toolDownloadDir = isGlobalTool ? _globalToolStageDir : _localToolDownloadDir;
9798
var assetFileDirectory = isGlobalTool ? _globalToolStageDir : _localToolAssetDir;
98-
var nugetPackageDownloader = new NuGetPackageDownloader.NuGetPackageDownloader(toolDownloadDir, verboseLogger: nugetLogger, isNuGetTool: true);
99+
var nugetPackageDownloader = new NuGetPackageDownloader.NuGetPackageDownloader(
100+
toolDownloadDir,
101+
verboseLogger: nugetLogger,
102+
isNuGetTool: true,
103+
restoreActionConfig: restoreActionConfig);
99104

100105
var packageSourceLocation = new PackageSourceLocation(packageLocation.NugetConfig, packageLocation.RootConfigDirectory, null, packageLocation.AdditionalFeeds);
101106

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

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,8 @@ internal class ToolInstallGlobalOrToolPathCommand : CommandBase
4444
private readonly string _architectureOption;
4545
private IEnumerable<string> _forwardRestoreArguments;
4646

47+
internal readonly RestoreActionConfig _restoreActionConfig;
48+
4749
public ToolInstallGlobalOrToolPathCommand(
4850
ParseResult parseResult,
4951
CreateToolPackageStoresAndDownloader createToolPackageStoreAndDownloader = null,
@@ -74,11 +76,11 @@ public ToolInstallGlobalOrToolPathCommand(
7476
var configOption = parseResult.GetValue(ToolInstallCommandParser.ConfigOption);
7577
var sourceOption = parseResult.GetValue(ToolInstallCommandParser.AddSourceOption);
7678
var packageSourceLocation = new PackageSourceLocation(string.IsNullOrEmpty(configOption) ? null : new FilePath(configOption), additionalSourceFeeds: sourceOption);
77-
var restoreAction = new RestoreActionConfig(DisableParallel: parseResult.GetValue(ToolCommandRestorePassThroughOptions.DisableParallelOption),
79+
_restoreActionConfig = new RestoreActionConfig(DisableParallel: parseResult.GetValue(ToolCommandRestorePassThroughOptions.DisableParallelOption),
7880
NoCache: parseResult.GetValue(ToolCommandRestorePassThroughOptions.NoCacheOption),
7981
IgnoreFailedSources: parseResult.GetValue(ToolCommandRestorePassThroughOptions.IgnoreFailedSourcesOption),
8082
Interactive: parseResult.GetValue(ToolCommandRestorePassThroughOptions.InteractiveRestoreOption));
81-
nugetPackageDownloader ??= new NuGetPackageDownloader(tempDir, verboseLogger: new NullLogger(), restoreActionConfig: restoreAction);
83+
nugetPackageDownloader ??= new NuGetPackageDownloader(tempDir, verboseLogger: new NullLogger(), restoreActionConfig: _restoreActionConfig);
8284
_shellShimTemplateFinder = new ShellShimTemplateFinder(nugetPackageDownloader, tempDir, packageSourceLocation);
8385

8486
_reporter = (reporter ?? Reporter.Output);
@@ -132,7 +134,8 @@ public override int Execute()
132134
versionRange: versionRange,
133135
targetFramework: _framework,
134136
verbosity: _verbosity,
135-
isGlobalTool: true
137+
isGlobalTool: true,
138+
restoreActionConfig: _restoreActionConfig
136139
);
137140

138141
NuGetFramework framework;

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;
@@ -23,6 +24,8 @@ internal class ToolInstallLocalCommand : CommandBase
2324
private readonly string _explicitManifestFile;
2425
private readonly bool _createManifestIfNeeded;
2526

27+
internal readonly RestoreActionConfig _restoreActionConfig;
28+
2629
public ToolInstallLocalCommand(
2730
ParseResult parseResult,
2831
IToolPackageDownloader toolPackageDownloader = null,
@@ -43,7 +46,11 @@ public ToolInstallLocalCommand(
4346
new ToolManifestFinder(new DirectoryPath(Directory.GetCurrentDirectory()));
4447
_toolManifestEditor = toolManifestEditor ?? new ToolManifestEditor();
4548
_localToolsResolverCache = localToolsResolverCache ?? new LocalToolsResolverCache();
46-
_toolLocalPackageInstaller = new ToolInstallLocalInstaller(parseResult, toolPackageDownloader);
49+
_restoreActionConfig = new RestoreActionConfig(DisableParallel: parseResult.GetValue(ToolCommandRestorePassThroughOptions.DisableParallelOption),
50+
NoCache: parseResult.GetValue(ToolCommandRestorePassThroughOptions.NoCacheOption),
51+
IgnoreFailedSources: parseResult.GetValue(ToolCommandRestorePassThroughOptions.IgnoreFailedSourcesOption),
52+
Interactive: parseResult.GetValue(ToolCommandRestorePassThroughOptions.InteractiveRestoreOption));
53+
_toolLocalPackageInstaller = new ToolInstallLocalInstaller(parseResult, toolPackageDownloader, _restoreActionConfig);
4754
}
4855

4956
public override int Execute()

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

Lines changed: 7 additions & 3 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;
@@ -24,10 +25,12 @@ internal class ToolInstallLocalInstaller
2425
private readonly string _configFilePath;
2526
private readonly string[] _sources;
2627
private readonly VerbosityOptions _verbosity;
28+
private readonly RestoreActionConfig _restoreActionConfig;
2729

2830
public ToolInstallLocalInstaller(
2931
ParseResult parseResult,
30-
IToolPackageDownloader toolPackageDownloader = null)
32+
IToolPackageDownloader toolPackageDownloader = null,
33+
RestoreActionConfig restoreActionConfig = null)
3134
{
3235
_parseResult = parseResult;
3336
_packageId = new PackageId(parseResult.GetValue(ToolInstallCommandParser.PackageIdArgument));
@@ -43,7 +46,7 @@ public ToolInstallLocalInstaller(
4346
additionalRestoreArguments: parseResult.OptionValuesToBeForwarded(ToolInstallCommandParser.GetCommand()));
4447
_toolPackageStore = toolPackageStoresAndDownloader.store;
4548
_toolPackageDownloader = toolPackageDownloader?? toolPackageStoresAndDownloader.downloader;
46-
49+
_restoreActionConfig = restoreActionConfig;
4750

4851
TargetFrameworkToInstall = BundledTargetFramework.GetTargetFrameworkMoniker();
4952
}
@@ -76,7 +79,8 @@ public IToolPackage Install(FilePath manifestFile)
7679
_packageId,
7780
verbosity: _verbosity,
7881
versionRange,
79-
TargetFrameworkToInstall
82+
TargetFrameworkToInstall,
83+
restoreActionConfig: _restoreActionConfig
8084
);
8185

8286
return toolDownloadedPackage;

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

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
using Microsoft.Extensions.EnvironmentAbstractions;
1313
using NuGet.Versioning;
1414
using Microsoft.DotNet.Cli.ToolPackage;
15+
using Microsoft.DotNet.Cli.NuGetPackageDownloader;
1516

1617
namespace Microsoft.DotNet.Tools.Tool.Update
1718
{
@@ -38,6 +39,8 @@ internal class ToolUpdateGlobalOrToolPathCommand : CommandBase
3839
private readonly IEnumerable<string> _forwardRestoreArguments;
3940
private readonly string _packageVersion;
4041

42+
internal readonly RestoreActionConfig _restoreActionConfig;
43+
4144
public ToolUpdateGlobalOrToolPathCommand(ParseResult parseResult,
4245
CreateToolPackageStoresAndDownloaderAndUninstaller createToolPackageStoreDownloaderUninstaller = null,
4346
CreateShellShimRepository createShellShimRepository = null,
@@ -60,6 +63,11 @@ public ToolUpdateGlobalOrToolPathCommand(ParseResult parseResult,
6063
_createShellShimRepository =
6164
createShellShimRepository ?? ShellShimRepositoryFactory.CreateShellShimRepository;
6265

66+
_restoreActionConfig = new RestoreActionConfig(DisableParallel: parseResult.GetValue(ToolCommandRestorePassThroughOptions.DisableParallelOption),
67+
NoCache: parseResult.GetValue(ToolCommandRestorePassThroughOptions.NoCacheOption),
68+
IgnoreFailedSources: parseResult.GetValue(ToolCommandRestorePassThroughOptions.IgnoreFailedSourcesOption),
69+
Interactive: parseResult.GetValue(ToolCommandRestorePassThroughOptions.InteractiveRestoreOption));
70+
6371
_reporter = (reporter ?? Reporter.Output);
6472
_errorReporter = (reporter ?? Reporter.Error);
6573
}
@@ -111,7 +119,8 @@ public override int Execute()
111119
versionRange: versionRange,
112120
targetFramework: _framework,
113121
verbosity: _verbosity,
114-
isGlobalTool: true
122+
isGlobalTool: true,
123+
restoreActionConfig: _restoreActionConfig
115124
);
116125

117126
EnsureVersionIsHigher(oldPackageNullable, newInstalledPackage);

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

Lines changed: 9 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;
@@ -26,6 +27,8 @@ internal class ToolUpdateLocalCommand : CommandBase
2627
private readonly PackageId _packageId;
2728
private readonly string _explicitManifestFile;
2829

30+
internal readonly RestoreActionConfig _restoreActionConfig;
31+
2932
public ToolUpdateLocalCommand(
3033
ParseResult parseResult,
3134
IToolPackageDownloader toolPackageDownloader = null,
@@ -59,7 +62,12 @@ public ToolUpdateLocalCommand(
5962
_toolManifestEditor = toolManifestEditor ?? new ToolManifestEditor();
6063
_localToolsResolverCache = localToolsResolverCache ?? new LocalToolsResolverCache();
6164

62-
_toolLocalPackageInstaller = new ToolInstallLocalInstaller(parseResult, toolPackageDownloader);
65+
_restoreActionConfig = new RestoreActionConfig(DisableParallel: parseResult.GetValue(ToolCommandRestorePassThroughOptions.DisableParallelOption),
66+
NoCache: parseResult.GetValue(ToolCommandRestorePassThroughOptions.NoCacheOption),
67+
IgnoreFailedSources: parseResult.GetValue(ToolCommandRestorePassThroughOptions.IgnoreFailedSourcesOption),
68+
Interactive: parseResult.GetValue(ToolCommandRestorePassThroughOptions.InteractiveRestoreOption));
69+
70+
_toolLocalPackageInstaller = new ToolInstallLocalInstaller(parseResult, toolPackageDownloader, _restoreActionConfig);
6371
_toolInstallLocalCommand = new Lazy<ToolInstallLocalCommand>(
6472
() => new ToolInstallLocalCommand(
6573
parseResult,

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;
@@ -96,7 +97,8 @@ public IToolPackage InstallPackage(PackageLocation packageLocation, PackageId pa
9697
VerbosityOptions verbosity,
9798
VersionRange versionRange = null,
9899
string targetFramework = null,
99-
bool isGlobalTool = false
100+
bool isGlobalTool = false,
101+
RestoreActionConfig restoreActionConfig = null
100102
)
101103
{
102104
string rollbackDirectory = null;

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

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

66+
[Fact]
67+
public void WhenPassingRestoreActionConfigOptions()
68+
{
69+
var parseResult = Parser.Instance.Parse($"dotnet tool install -g {PackageId} --ignore-failed-sources");
70+
var toolInstallCommand = new ToolInstallGlobalOrToolPathCommand(parseResult);
71+
toolInstallCommand._restoreActionConfig.IgnoreFailedSources.Should().BeTrue();
72+
}
73+
74+
[Fact]
75+
public void WhenPassingIgnoreFailedSourcesItShouldNotThrow()
76+
{
77+
_fileSystem.File.WriteAllText(Path.Combine(_temporaryDirectory, "nuget.config"), _nugetConfigWithInvalidSources);
78+
79+
var toolInstallGlobalOrToolPathCommand = new ToolInstallGlobalOrToolPathCommand(
80+
_parseResult,
81+
_createToolPackageStoresAndDownloader,
82+
_createShellShimRepository,
83+
_environmentPathInstructionMock,
84+
_reporter);
85+
86+
toolInstallGlobalOrToolPathCommand.Execute().Should().Be(0);
87+
_fileSystem.File.Delete(Path.Combine(_temporaryDirectory, "nuget.config"));
88+
}
89+
6690
[Fact]
6791
public void WhenRunWithPackageIdItShouldCreateValidShim()
6892
{
@@ -630,6 +654,16 @@ public void SetPermission(string path, string chmodArgument)
630654
{
631655
}
632656
}
657+
658+
private string _nugetConfigWithInvalidSources = @"{
659+
<?xml version=""1.0"" encoding=""utf-8""?>
660+
<configuration>
661+
<packageSources>
662+
<add key=""nuget"" value=""https://api.nuget.org/v3/index.json"" />
663+
<add key=""invalid_source"" value=""https://api.nuget.org/v3/invalid.json"" />
664+
</packageSources>
665+
</configuration>
666+
}";
633667
}
634668
}
635669

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

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,32 @@ public ToolInstallLocalCommandTests(ITestOutputHelper log):base(log)
9696
1);
9797
}
9898

99+
[Fact]
100+
public void WhenPassingRestoreActionConfigOptions()
101+
{
102+
var parseResult = Parser.Instance.Parse($"dotnet tool install {_packageIdA.ToString()} --ignore-failed-sources");
103+
var command = new ToolInstallLocalCommand(parseResult);
104+
command._restoreActionConfig.IgnoreFailedSources.Should().BeTrue();
105+
}
106+
107+
[Fact]
108+
public void WhenPassingIgnoreFailedSourcesItShouldNotThrow()
109+
{
110+
_fileSystem.File.WriteAllText(Path.Combine(_temporaryDirectory, "nuget.config"), _nugetConfigWithInvalidSources);
111+
var parseResult = Parser.Instance.Parse($"dotnet tool install {_packageIdA.ToString()} --ignore-failed-sources");
112+
var installLocalCommand = new ToolInstallLocalCommand(
113+
parseResult,
114+
_toolPackageDownloaderMock,
115+
_toolManifestFinder,
116+
_toolManifestEditor,
117+
_localToolsResolverCache,
118+
_reporter);
119+
120+
installLocalCommand.Execute().Should().Be(0);
121+
122+
_fileSystem.File.Delete(Path.Combine(_temporaryDirectory, "nuget.config"));
123+
}
124+
99125
[Fact]
100126
public void WhenRunWithPackageIdItShouldSaveToCacheAndAddToManifestFile()
101127
{
@@ -440,6 +466,16 @@ out RestoredCommand restoredCommand
440466
""isRoot"":true,
441467
""tools"":{
442468
}
469+
}";
470+
471+
private string _nugetConfigWithInvalidSources = @"{
472+
<?xml version=""1.0"" encoding=""utf-8""?>
473+
<configuration>
474+
<packageSources>
475+
<add key=""nuget"" value=""https://api.nuget.org/v3/index.json"" />
476+
<add key=""invalid_source"" value=""https://api.nuget.org/v3/invalid.json"" />
477+
</packageSources>
478+
</configuration>
443479
}";
444480
}
445481
}

0 commit comments

Comments
 (0)