using System; using System.IO; using Ionic.Zip; using UnityEditor; namespace Unity.VisualScripting { public static class BackupUtility { public static void BackupAssetsFolder() { BackupAssetsFolder(DateTime.Now.ToString("yyyy_MM_dd_HH_mm_ss")); } public static void BackupAssetsFolder(string backupLabel) { backupLabel = PathUtility.MakeSafeFilename(backupLabel, '_'); PathUtility.CreateDirectoryIfNeeded(Paths.backups); var fileName = $"Assets_{backupLabel}.zip"; var addEntryIndex = 0; var saveEntryIndex = 0; using (var zip = new ZipFile()) { zip.UseZip64WhenSaving = Zip64Option.AsNecessary; zip.AddProgress += (sender, e) => { EditorUtility.DisplayProgressBar("Creating Backup...", e.CurrentEntry != null ? e.CurrentEntry.FileName : "...", (float)(addEntryIndex++) / e.EntriesTotal); }; zip.SaveProgress += (sender, e) => { EditorUtility.DisplayProgressBar("Creating Backup...", e.CurrentEntry != null ? e.CurrentEntry.FileName : "...", (float)(saveEntryIndex++) / e.EntriesTotal); }; zip.AddDirectory(Paths.assets); var zipPath = Path.Combine(Paths.backups, fileName); VersionControlUtility.Unlock(zipPath); zip.Save(zipPath); EditorUtility.ClearProgressBar(); } } } }