C#: Change RestoreSettings to have general extraArgs parameter

This allows the string of package feeds to be constructed once and used repeatedly in the parallel restore loop as well.
This commit is contained in:
Michael B. Gale
2025-03-24 17:08:05 +00:00
parent 7a92a72a9a
commit d564529f3c
3 changed files with 19 additions and 17 deletions

View File

@@ -67,19 +67,6 @@ namespace Semmle.Extraction.CSharp.DependencyFetching
args += $" --configfile \"{restoreSettings.PathToNugetConfig}\"";
}
// Add package sources. If any are present, they override all sources specified in
// the configuration file(s).
if (restoreSettings.Sources != null)
{
var feedArgs = new StringBuilder();
foreach (string source in restoreSettings.Sources)
{
feedArgs.Append($" -s {source}");
}
args += feedArgs.ToString();
}
if (restoreSettings.ForceReevaluation)
{
args += " --force";
@@ -90,6 +77,11 @@ namespace Semmle.Extraction.CSharp.DependencyFetching
args += " /p:EnableWindowsTargeting=true";
}
if (restoreSettings.ExtraArgs != null)
{
args += $" {restoreSettings.ExtraArgs}";
}
return args;
}

View File

@@ -17,7 +17,7 @@ namespace Semmle.Extraction.CSharp.DependencyFetching
IList<string> GetNugetFeedsFromFolder(string folderPath);
}
public record class RestoreSettings(string File, string PackageDirectory, bool ForceDotnetRefAssemblyFetching, IList<string>? Sources = null, string? PathToNugetConfig = null, bool ForceReevaluation = false, bool TargetWindows = false);
public record class RestoreSettings(string File, string PackageDirectory, bool ForceDotnetRefAssemblyFetching, string? ExtraArgs = null, string? PathToNugetConfig = null, bool ForceReevaluation = false, bool TargetWindows = false);
public partial record class RestoreResult(bool Success, IList<string> Output)
{

View File

@@ -265,7 +265,7 @@ namespace Semmle.Extraction.CSharp.DependencyFetching
// Conservatively, we only set this to a non-null value if a Dependabot proxy is enabled.
// This ensures that we continue to get the old behaviour where feeds are taken from
// `nuget.config` files instead of the command-line arguments.
HashSet<string>? sources = null;
string? extraArgs = null;
if (this.dependabotProxy is not null)
{
@@ -273,9 +273,19 @@ namespace Semmle.Extraction.CSharp.DependencyFetching
// of the private registry feeds. However, since providing them as command-line arguments
// to `dotnet` ignores other feeds that may be configured, we also need to add the feeds
// we have discovered from analysing `nuget.config` files.
sources = configuredSources ?? new();
var sources = configuredSources ?? new();
sources.Add(PublicNugetOrgFeed);
this.dependabotProxy.RegistryURLs.ForEach(url => sources.Add(url));
// Add package sources. If any are present, they override all sources specified in
// the configuration file(s).
var feedArgs = new StringBuilder();
foreach (string source in sources)
{
feedArgs.Append($" -s {source}");
}
extraArgs = feedArgs.ToString();
}
var successCount = 0;
@@ -292,7 +302,7 @@ namespace Semmle.Extraction.CSharp.DependencyFetching
foreach (var project in projectGroup)
{
logger.LogInfo($"Restoring project {project}...");
var res = dotnet.Restore(new(project, PackageDirectory.DirInfo.FullName, ForceDotnetRefAssemblyFetching: true, sources?.ToList(), TargetWindows: isWindows));
var res = dotnet.Restore(new(project, PackageDirectory.DirInfo.FullName, ForceDotnetRefAssemblyFetching: true, extraArgs, TargetWindows: isWindows));
assets.AddDependenciesRange(res.AssetsFilePaths);
lock (sync)
{