Skip to content

Commit

Permalink
Enable --source for global/path tool install (#42965)
Browse files Browse the repository at this point in the history
Fixes #37716
  • Loading branch information
Forgind committed Aug 29, 2024
1 parent 6ccac5f commit abd159c
Show file tree
Hide file tree
Showing 20 changed files with 232 additions and 39 deletions.
5 changes: 4 additions & 1 deletion src/Cli/dotnet/ToolPackage/PackageLocation.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,15 +10,18 @@ internal class PackageLocation
public PackageLocation(
FilePath? nugetConfig = null,
DirectoryPath? rootConfigDirectory = null,
string[] additionalFeeds = null)
string[] additionalFeeds = null,
string[] sourceFeedOverrides = null)
{
NugetConfig = nugetConfig;
RootConfigDirectory = rootConfigDirectory;
AdditionalFeeds = additionalFeeds ?? Array.Empty<string>();
SourceFeedOverrides = sourceFeedOverrides ?? Array.Empty<string>();
}

public FilePath? NugetConfig { get; }
public DirectoryPath? RootConfigDirectory { get; }
public string[] AdditionalFeeds { get; }
public string[] SourceFeedOverrides { get; }
}
}
3 changes: 2 additions & 1 deletion src/Cli/dotnet/ToolPackage/ToolPackageDownloader.cs
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,7 @@ public IToolPackage InstallPackage(PackageLocation packageLocation, PackageId pa
var assetFileDirectory = isGlobalTool ? _globalToolStageDir : _localToolAssetDir;
var nugetPackageDownloader = new NuGetPackageDownloader.NuGetPackageDownloader(toolDownloadDir, verboseLogger: nugetLogger, shouldUsePackageSourceMapping: true, verbosityOptions: verbosity);
var packageSourceLocation = new PackageSourceLocation(packageLocation.NugetConfig, packageLocation.RootConfigDirectory, null, packageLocation.AdditionalFeeds);
var packageSourceLocation = new PackageSourceLocation(packageLocation.NugetConfig, packageLocation.RootConfigDirectory, packageLocation.SourceFeedOverrides, packageLocation.AdditionalFeeds);
bool givenSpecificVersion = false;
if (versionRange.MinVersion != null && versionRange.MaxVersion != null && versionRange.MinVersion == versionRange.MaxVersion)
Expand Down Expand Up @@ -403,6 +403,7 @@ public NuGetVersion GetNuGetVersion(
var packageSourceLocation = new PackageSourceLocation(
nugetConfig: packageLocation.NugetConfig,
rootConfigDirectory: packageLocation.RootConfigDirectory,
sourceFeedOverrides: packageLocation.SourceFeedOverrides,
additionalSourceFeeds: packageLocation.AdditionalFeeds);

return nugetPackageDownloader.GetBestPackageVersionAsync(packageId, versionRange, packageSourceLocation).GetAwaiter().GetResult();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -133,11 +133,17 @@
<value>The version of the tool package to install.</value>
</data>
<data name="AddSourceOptionName" xml:space="preserve">
<value>SOURCE</value>
<value>ADDSOURCE</value>
</data>
<data name="AddSourceOptionDescription" xml:space="preserve">
<value>Add an additional NuGet package source to use during installation.</value>
</data>
<data name="SourceOptionName" xml:space="preserve">
<value>SOURCE</value>
</data>
<data name="SourceOptionDescription" xml:space="preserve">
<value>Replace all NuGet package sources to use during installation with these.</value>
</data>
<data name="CommandDescription" xml:space="preserve">
<value>Install global or local tool. Local tools are added to manifest and restored.</value>
</data>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,13 @@ internal static class ToolInstallCommandParser
HelpName = LocalizableStrings.ConfigFileOptionName
};

private static readonly CliOption<string[]> addSourceOption = new CliOption<string[]>("--add-source")
public static readonly CliOption<string[]> SourceOption = new CliOption<string[]>("--source")
{
Description = LocalizableStrings.SourceOptionDescription,
HelpName = LocalizableStrings.SourceOptionName
}.AllowSingleArgPerToken();

public static readonly CliOption<string[]> AddSourceOption = new CliOption<string[]>("--add-source")
{
Description = LocalizableStrings.AddSourceOptionDescription,
HelpName = LocalizableStrings.AddSourceOptionName
Expand Down Expand Up @@ -76,8 +82,6 @@ internal static class ToolInstallCommandParser

private static readonly CliCommand Command = ConstructCommand();

public static CliOption<string[]> AddSourceOption => addSourceOption;

public static CliCommand GetCommand()
{
return Command;
Expand Down Expand Up @@ -109,6 +113,7 @@ public static CliCommand AddCommandOptions(CliCommand command)
command.Options.Add(ConfigOption);
command.Options.Add(ToolManifestOption.WithHelpDescription(command, LocalizableStrings.ManifestPathOptionDescription));
command.Options.Add(AddSourceOption);
command.Options.Add(SourceOption);
command.Options.Add(FrameworkOption);
command.Options.Add(PrereleaseOption);
command.Options.Add(ToolCommandRestorePassThroughOptions.DisableParallelOption);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ internal class ToolInstallGlobalOrToolPathCommand : CommandBase
private readonly string _configFilePath;
private readonly string _framework;
private readonly string[] _source;
private readonly string[] _addSource;
private readonly bool _global;
private readonly VerbosityOptions _verbosity;
private readonly string _toolPath;
Expand All @@ -64,7 +65,8 @@ public ToolInstallGlobalOrToolPathCommand(
_packageId = packageId ?? (packageIdArgument is not null ? new PackageId(packageIdArgument) : null);
_configFilePath = parseResult.GetValue(ToolInstallCommandParser.ConfigOption);
_framework = parseResult.GetValue(ToolInstallCommandParser.FrameworkOption);
_source = parseResult.GetValue(ToolInstallCommandParser.AddSourceOption);
_source = parseResult.GetValue(ToolInstallCommandParser.SourceOption);
_addSource = parseResult.GetValue(ToolInstallCommandParser.AddSourceOption);
_global = parseResult.GetValue(ToolAppliedOption.GlobalOption);
_verbosity = GetValueOrDefault(ToolInstallCommandParser.VerbosityOption, VerbosityOptions.minimal, parseResult);
_toolPath = parseResult.GetValue(ToolAppliedOption.ToolPathOption);
Expand Down Expand Up @@ -182,7 +184,7 @@ private int ExecuteInstallCommand(PackageId packageId)
RunWithHandlingInstallError(() =>
{
IToolPackage newInstalledPackage = toolPackageDownloader.InstallPackage(
new PackageLocation(nugetConfig: GetConfigFile(), additionalFeeds: _source),
new PackageLocation(nugetConfig: GetConfigFile(), sourceFeedOverrides: _source, additionalFeeds: _addSource),
packageId: packageId,
versionRange: versionRange,
targetFramework: _framework,
Expand Down Expand Up @@ -234,7 +236,7 @@ private int ExecuteInstallCommand(PackageId packageId)
private NuGetVersion GetBestMatchNugetVersion(PackageId packageId, VersionRange versionRange, IToolPackageDownloader toolPackageDownloader)
{
return toolPackageDownloader.GetNuGetVersion(
packageLocation: new PackageLocation(nugetConfig: GetConfigFile(), additionalFeeds: _source),
packageLocation: new PackageLocation(nugetConfig: GetConfigFile(), sourceFeedOverrides: _source, additionalFeeds: _addSource),
packageId: packageId,
versionRange: versionRange,
verbosity: _verbosity,
Expand Down

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading

0 comments on commit abd159c

Please sign in to comment.