Skip to content

Commit 42df328

Browse files
committed
C#: Only download and use nuget.exe in case of windows or mono is installed.
1 parent 3caad6a commit 42df328

1 file changed

Lines changed: 32 additions & 1 deletion

File tree

csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/NugetExeWrapper.cs

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ internal interface IPackagesConfigRestore : IDisposable
2222

2323
/// <summary>
2424
/// Factory for creating a package manager to restore NuGet packages referenced in packages.config files.
25+
/// If the environment doesn't support using nuget.exe to restore packages from packages.config files, a no-op implementation is returned.
2526
/// It is worth noting that for MacOS and Linux, nuget.exe is used with mono. However, mono is being deprecated and the last images to contain
2627
/// mono are
2728
/// - Ubuntu 22.04
@@ -35,7 +36,12 @@ internal class PackagesConfigRestoreFactory
3536
{
3637
public static IPackagesConfigRestore Create(FileProvider fileProvider, DependencyDirectory packageDirectory, Semmle.Util.Logging.ILogger logger, Func<bool> useDefaultFeed)
3738
{
38-
return new NugetExeWrapper(fileProvider, packageDirectory, logger, useDefaultFeed);
39+
if (SystemBuildActions.Instance.IsWindows() || SystemBuildActions.Instance.IsMonoInstalled())
40+
{
41+
return new NugetExeWrapper(fileProvider, packageDirectory, logger, useDefaultFeed);
42+
}
43+
44+
return new NoOpPackagesConfig(fileProvider, logger);
3945
}
4046

4147
/// <summary>
@@ -334,5 +340,30 @@ public void Dispose()
334340
}
335341
}
336342
}
343+
344+
private class NoOpPackagesConfig : IPackagesConfigRestore
345+
{
346+
private readonly Semmle.Util.Logging.ILogger logger;
347+
private readonly FileProvider fileProvider;
348+
349+
public NoOpPackagesConfig(FileProvider fileProvider, Semmle.Util.Logging.ILogger logger)
350+
{
351+
this.fileProvider = fileProvider;
352+
this.logger = logger;
353+
}
354+
355+
public int PackageCount => fileProvider.PackagesConfigs.Count;
356+
357+
public int InstallPackages()
358+
{
359+
if (PackageCount > 0)
360+
{
361+
logger.LogInfo("Found packages.config files, but nuget.exe cannot be used to restore packages on this platform. Skipping restore of packages.config files.");
362+
}
363+
return 0;
364+
}
365+
366+
public void Dispose() { }
367+
}
337368
}
338369
}

0 commit comments

Comments
 (0)