public static void Cleanup(this FSDirectory directory, ConsoleEx console) { console ??= new ConsoleEx(); console.WriteLine(VerbosityLevel.Normal, 0, $"Performing cleanup on {directory.FullName}..."); //Staged Files console.WriteLine(VerbosityLevel.Detailed, 1, directory.FullName); console.WriteLine(VerbosityLevel.Detailed, 1, $"Removing staged files ({Path.ChangeExtension("*.*", HelixConsts.StagedHxExtention)})"); bool foundFile = false; foreach (FSFile file in directory.GetEntries(SearchOption.AllDirectories) .ToArray() .OfType <FSFile>() .Where(f => string.Equals(Path.GetExtension(f.FullName), HelixConsts.StagedHxExtention))) { foundFile = true; console.WriteLine(VerbosityLevel.Detailed, 2, $"Removing staged file {file.RelativePath}"); file.Delete(); } if (!foundFile) { console.WriteLine(VerbosityLevel.Detailed, 2, $"No files to cleanup"); } //Backup Files foundFile = false; console.WriteLine(VerbosityLevel.Detailed, 1, $"Reverting incomplete ({Path.ChangeExtension("*.*", HelixConsts.BackupExtention)})"); foreach (FSFile file in directory.GetEntries(SearchOption.AllDirectories) .ToArray() .OfType <FSFile>() .Where(f => string.Equals(Path.GetExtension(f.FullName), HelixConsts.BackupExtention))) { var destinationRelativePath = Path.ChangeExtension(file.RelativePath, null); console.WriteLine(VerbosityLevel.Detailed, 3, $"Incomplete file, restoring backup {file.RelativePath} => {destinationRelativePath}"); if (directory.ChildExists(destinationRelativePath)) { console.WriteLine(VerbosityLevel.Diagnostic, 4, $"Removing {destinationRelativePath}"); (directory.TryGetEntry(destinationRelativePath) as FSFile).Delete(); } console.WriteLine(VerbosityLevel.Diagnostic, 4, $"Renaming {Path.GetFileName(file.RelativePath)} to {Path.GetFileName(destinationRelativePath)}"); file.MoveTo(destinationRelativePath); } if (!foundFile) { console.WriteLine(VerbosityLevel.Detailed, 2, $"No files to cleanup"); } console.WriteLine(VerbosityLevel.Detailed, 1, "Cleanup Complete"); }