/// <summary> /// Unzip all files. /// </summary> /// <returns>True on succes, false otherwise</returns> internal static bool Unzip(string sampleFolder, string zipFilePath, Action <string> log, Func <bool> updateSampleProjects) { var messages = new List <string>(); var entries = new List <UnzipEntry>(); var fileHashes = new FileHashesSet(); var backupFolders = new BackupFolders(); var result = true; using (var zipFile = new ZipFile(zipFilePath)) { // Collect entries foreach (ZipEntry zipEntry in zipFile) { entries.Add(new UnzipEntry(zipEntry, sampleFolder)); } // Unzip all foreach (var entry in entries) { log(string.Format("Unpacking {0}", entry.Name)); entry.UnzipToTempPath(zipFile); } // Backup if needed foreach (var entry in entries) { entry.BackupIfNeeded(fileHashes, backupFolders); } // Move all to final target foreach (var entry in entries) { entry.MoveToTarget(messages); } // Update all sample projects if (!updateSampleProjects()) { result = false; } // Update hashes foreach (var entry in entries) { entry.UpdateHash(fileHashes); } // Save hashes fileHashes.SaveAll(); } return(result); }
internal bool TryAddBackupFolder(string path, int i) { if (!path.EndsWith("\\")) { path += "\\"; } if (!BackupFolders.Any(b => path.Contains(b.Directory) || b.Directory.Contains(path))) { BackupFolders.Add(BackupFolder.Create(path)); return(true); } return(false); }
/// <summary> /// Unzip all files. /// </summary> /// <returns>True on succes, false otherwise</returns> internal static bool Unzip(string sampleFolder, string zipFilePath, Action<string> log, Func<bool> updateSampleProjects) { var messages = new List<string>(); var entries = new List<UnzipEntry>(); var fileHashes = new FileHashesSet(); var backupFolders = new BackupFolders(); var result = true; using (var zipFile = new ZipFile(zipFilePath)) { // Collect entries foreach (ZipEntry zipEntry in zipFile) { entries.Add(new UnzipEntry(zipEntry, sampleFolder)); } // Unzip all foreach (var entry in entries) { log(string.Format("Unpacking {0}", entry.Name)); entry.UnzipToTempPath(zipFile); } // Backup if needed foreach (var entry in entries) { entry.BackupIfNeeded(fileHashes, backupFolders); } // Move all to final target foreach (var entry in entries) { entry.MoveToTarget(messages); } // Update all sample projects if (!updateSampleProjects()) result = false; // Update hashes foreach (var entry in entries) { entry.UpdateHash(fileHashes); } // Save hashes fileHashes.SaveAll(); } return result; }
/// <summary> /// Backup the target path if needed. /// </summary> public void BackupIfNeeded(FileHashesSet fileHashes, BackupFolders backupFolders) { if (!File.Exists(targetPath)) { return; } var hashes = fileHashes.Get(Path.GetDirectoryName(targetPath)); string originalHash; if (hashes.TryGetHash(targetPath, out originalHash)) { // Compare with existing var currentHash = Hash(targetPath); if (currentHash == originalHash) { return; // No need to backup } } var backupFolder = backupFolders.Get(Path.GetDirectoryName(targetPath)); Directory.CreateDirectory(backupFolder); File.Copy(targetPath, Path.Combine(backupFolder, Path.GetFileName(targetPath))); }
/// <summary> /// Backup the target path if needed. /// </summary> public void BackupIfNeeded(FileHashesSet fileHashes, BackupFolders backupFolders) { if (!File.Exists(targetPath)) return; var hashes = fileHashes.Get(Path.GetDirectoryName(targetPath)); string originalHash; if (hashes.TryGetHash(targetPath, out originalHash)) { // Compare with existing var currentHash = Hash(targetPath); if (currentHash == originalHash) return; // No need to backup } var backupFolder = backupFolders.Get(Path.GetDirectoryName(targetPath)); Directory.CreateDirectory(backupFolder); File.Copy(targetPath, Path.Combine(backupFolder, Path.GetFileName(targetPath))); }