Skip to content

Commit 0124b07

Browse files
committed
C#: Do not run dotnet restore in parallel for projects in the same folder.
1 parent 6daf80c commit 0124b07

File tree

1 file changed

+15
-11
lines changed

1 file changed

+15
-11
lines changed

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

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -240,21 +240,25 @@ private void RestoreProjects(IEnumerable<string> projects, out IEnumerable<strin
240240
var nugetSourceFailures = 0;
241241
var assetFiles = new List<string>();
242242
var sync = new object();
243-
Parallel.ForEach(projects, new ParallelOptions { MaxDegreeOfParallelism = DependencyManager.Threads }, project =>
243+
var projectGroups = projects.GroupBy(Path.GetDirectoryName);
244+
Parallel.ForEach(projectGroups, new ParallelOptions { MaxDegreeOfParallelism = DependencyManager.Threads }, projectGroup =>
244245
{
245-
logger.LogInfo($"Restoring project {project}...");
246-
var res = dotnet.Restore(new(project, PackageDirectory.DirInfo.FullName, ForceDotnetRefAssemblyFetching: true));
247-
lock (sync)
246+
foreach (var project in projectGroup)
248247
{
249-
if (res.Success)
250-
{
251-
successCount++;
252-
}
253-
if (res.HasNugetPackageSourceError)
248+
logger.LogInfo($"Restoring project {project}...");
249+
var res = dotnet.Restore(new(project, PackageDirectory.DirInfo.FullName, ForceDotnetRefAssemblyFetching: true));
250+
lock (sync)
254251
{
255-
nugetSourceFailures++;
252+
if (res.Success)
253+
{
254+
successCount++;
255+
}
256+
if (res.HasNugetPackageSourceError)
257+
{
258+
nugetSourceFailures++;
259+
}
260+
assetFiles.AddRange(res.AssetsFilePaths);
256261
}
257-
assetFiles.AddRange(res.AssetsFilePaths);
258262
}
259263
});
260264
assets = assetFiles;

0 commit comments

Comments
 (0)