DependencyResolver.cs 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Diagnostics;
  4. using System.IO;
  5. using System.Linq;
  6. using ET;
  7. using MongoDB.Bson.Serialization;
  8. using MongoDB.Bson.Serialization.Attributes;
  9. using UnityEditor;
  10. using UnityEditor.PackageManager;
  11. using PackageInfo = UnityEditor.PackageManager.PackageInfo;
  12. using UnityEditor.PackageManager.Requests;
  13. using Debug = UnityEngine.Debug;
  14. namespace Hibzz.DependencyResolver
  15. {
  16. [InitializeOnLoad]
  17. public class DependencyResolver
  18. {
  19. //[MenuItem("ET/MoveToPackage")]
  20. static void MoveToPackage(string package, string version)
  21. {
  22. string packageName = default;
  23. string moveFileName = default;
  24. #if UNITY_6000_0_OR_NEWER
  25. packageName = package;
  26. moveFileName = "MoveToPackages_6";
  27. #else
  28. packageName =$"{package}@{version}";
  29. moveFileName = "MoveToPackages";
  30. #endif
  31. string dir = Path.Combine("Library/PackageCache", packageName);
  32. if (!Directory.Exists(dir))
  33. {
  34. return;
  35. }
  36. Debug.Log($"move package: {packageName}");
  37. Process process = ProcessHelper.PowerShell($"-NoExit -ExecutionPolicy Bypass -File ./Packages/com.etetet.init/{moveFileName}.ps1 {package} {version}", waitExit: true);
  38. Debug.Log(process.StandardOutput.ReadToEnd());
  39. }
  40. static DependencyResolver()
  41. {
  42. Events.registeredPackages += OnPackagesRegistered;
  43. }
  44. // Invoked when the package manager completes registering new packages
  45. static void OnPackagesRegistered(PackageRegistrationEventArgs packageRegistrationInfo)
  46. {
  47. if (packageRegistrationInfo.added.Count == 0 && packageRegistrationInfo.changedFrom.Count == 0)
  48. {
  49. return;
  50. }
  51. Debug.Log($"Packages Registered: {string.Join(" ", packageRegistrationInfo.added.Select(x=>x.name))}");
  52. // loop through all of the added packages and get their git
  53. // dependencies and add it to the list that contains all the
  54. // dependencies that need to be installed
  55. foreach (var package in packageRegistrationInfo.added)
  56. {
  57. if (!package.name.StartsWith("cn.etetet."))
  58. {
  59. continue;
  60. }
  61. MoveToPackage(package.name, package.version);
  62. }
  63. foreach (var package in packageRegistrationInfo.changedFrom)
  64. {
  65. if (!package.name.StartsWith("cn.etetet."))
  66. {
  67. continue;
  68. }
  69. MoveToPackage(package.name, package.version);
  70. }
  71. AssetDatabase.Refresh();
  72. }
  73. [MenuItem("ET/Init/RepairDependencies")]
  74. static void RepairDependencies()
  75. {
  76. foreach (var directory in Directory.GetDirectories("Library/PackageCache", "cn.etetet.*"))
  77. {
  78. string baseName = Path.GetFileName(directory);
  79. if (!baseName.StartsWith("cn.etetet."))
  80. {
  81. continue;
  82. }
  83. string[] ss = baseName.Split("@");
  84. string packageName = ss[0];
  85. #if UNITY_6000_0_OR_NEWER
  86. string version = "";
  87. #else
  88. string version = ss[1];
  89. #endif
  90. MoveToPackage(packageName, version);
  91. }
  92. AssetDatabase.Refresh();
  93. Debug.Log($"repaire package finish");
  94. }
  95. }
  96. }