using System; using System.Diagnostics; using NugetForUnity.Helper; using UnityEditor; using Debug = UnityEngine.Debug; namespace NugetForUnity { /// /// Restores all packages defined in packages.config. /// public static class PackageRestorer { /// /// Restores all packages defined in packages.config. /// /// True if we want to skip installing dependencies and checking if the lib is imported in Unity. public static void Restore(bool slimRestore) { UnityPathHelper.EnsurePackageInstallDirectoryIsSetup(); InstalledPackagesManager.UpdateInstalledPackages(); var stopwatch = Stopwatch.StartNew(); var somethingChanged = false; try { var packagesToInstall = InstalledPackagesManager.PackagesConfigFile.Packages.FindAll( package => !InstalledPackagesManager.IsInstalled(package, !slimRestore)); if (packagesToInstall.Count > 0) { var progressStep = 1.0f / packagesToInstall.Count; float currentProgress = 0; NugetLogger.LogVerbose("Restoring {0} packages.", packagesToInstall.Count); foreach (var package in packagesToInstall) { EditorUtility.DisplayProgressBar("Restoring NuGet Packages", $"Restoring {package.Id} {package.Version}", currentProgress); NugetLogger.LogVerbose("---Restoring {0} {1}", package.Id, package.Version); NugetPackageInstaller.InstallIdentifier(package, false, slimRestore); somethingChanged = true; currentProgress += progressStep; } } else { NugetLogger.LogVerbose("No packages need restoring."); } if (InstalledPackagesManager.RemoveUnnecessaryPackages()) { somethingChanged = true; } } catch (Exception e) { Debug.LogErrorFormat("{0}", e); } finally { NugetLogger.LogVerbose("Restoring packages took {0} ms", stopwatch.ElapsedMilliseconds); if (somethingChanged) { AssetDatabase.Refresh(); } EditorUtility.ClearProgressBar(); } } } }