RuntimeReference.cs 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. // Copyright (c) .NET Foundation and contributors. All rights reserved.
  2. // Licensed under the MIT license. See LICENSE file in the project root for full license information.
  3. // Sourced from https://github.com/dotnet/core-setup/tree/be8d8e3486b2bf598ed69d39b1629a24caaba45e/tools-local/tasks, needs to be kept in sync
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Linq;
  7. using Microsoft.Extensions.DependencyModel;
  8. namespace RepoTasks.Utilities
  9. {
  10. internal class RuntimeReference
  11. {
  12. public static List<RuntimeLibrary> RemoveReferences(IReadOnlyList<RuntimeLibrary> runtimeLibraries, IEnumerable<string> packages)
  13. {
  14. List<RuntimeLibrary> result = new List<RuntimeLibrary>();
  15. foreach (var runtimeLib in runtimeLibraries)
  16. {
  17. if (string.IsNullOrEmpty(packages.FirstOrDefault(elem => runtimeLib.Name.Equals(elem, StringComparison.OrdinalIgnoreCase))))
  18. {
  19. List<Dependency> toRemoveDependecy = new List<Dependency>();
  20. foreach (var dependency in runtimeLib.Dependencies)
  21. {
  22. if (!string.IsNullOrEmpty(packages.FirstOrDefault(elem => dependency.Name.Equals(elem, StringComparison.OrdinalIgnoreCase))))
  23. {
  24. toRemoveDependecy.Add(dependency);
  25. }
  26. }
  27. if (toRemoveDependecy.Count > 0)
  28. {
  29. List<Dependency> modifiedDependencies = new List<Dependency>();
  30. foreach (var dependency in runtimeLib.Dependencies)
  31. {
  32. if (!toRemoveDependecy.Contains(dependency))
  33. {
  34. modifiedDependencies.Add(dependency);
  35. }
  36. }
  37. result.Add(new RuntimeLibrary(runtimeLib.Type,
  38. runtimeLib.Name,
  39. runtimeLib.Version,
  40. runtimeLib.Hash,
  41. runtimeLib.RuntimeAssemblyGroups,
  42. runtimeLib.NativeLibraryGroups,
  43. runtimeLib.ResourceAssemblies,
  44. modifiedDependencies,
  45. runtimeLib.Serviceable));
  46. }
  47. else if (string.IsNullOrEmpty(packages.FirstOrDefault(elem => runtimeLib.Name.Equals(elem, StringComparison.OrdinalIgnoreCase))))
  48. {
  49. result.Add(runtimeLib);
  50. }
  51. }
  52. }
  53. return result;
  54. }
  55. }
  56. }