/// <summary> /// Recursively retrieve all components and their dependencies from NuGet packages /// </summary> /// <param name="projectFilePath"></param> /// <returns></returns> public async Task <HashSet <Component> > RecursivelyGetComponentsAsync(IEnumerable <NugetPackage> nugetPackges) { var components = new HashSet <Component>(); // Initialize the queue with the current packages var packages = new Queue <NugetPackage>(nugetPackges); var visitedNugetPackages = new HashSet <NugetPackage>(); while (packages.Count > 0) { var currentPackage = packages.Dequeue(); var component = await _nugetService.GetComponentAsync(currentPackage).ConfigureAwait(false); if (component == null) { continue; } components.Add(component); // Add the current NuGet package to list of visited packages visitedNugetPackages.Add(currentPackage); } return(components); }
/// <summary> /// Recursively retrieve all components and their dependencies from NuGet packages /// </summary> /// <param name="projectFilePath"></param> /// <returns></returns> public async Task <HashSet <Component> > RecursivelyGetComponentsAsync(IEnumerable <NugetPackage> nugetPackges) { var components = new HashSet <Component>(); // Initialize the queue with the current packages var packages = new Queue <NugetPackage>(nugetPackges); NugetPackage currentPackage; var visitedNugetPackages = new HashSet <NugetPackage>(); while (packages.TryDequeue(out currentPackage)) { var component = await _nugetService.GetComponentAsync(currentPackage); if (component == null) { continue; } components.Add(component); // Add unvisited NuGet package dependencies to the queue foreach (var dependency in component.Dependencies) { if (!visitedNugetPackages.Contains(dependency)) { packages.Enqueue(dependency); } } // Add the current NuGet package to list of visited packages visitedNugetPackages.Add(currentPackage); } return(components); }