public static Patch Compare(IBackupSource source, IBackupChain target) { Trace.WriteLine("Comparing source to destination", "Patch"); var result = new Patch(source, target); var sourceFiles = source.EnumerateFiles ().ToArray (); result.RemovedFiles = target.GetFiles().Where(file => sourceFiles.All(a => a.RelativePath.ToLower() != file.ToLower())); result.AddedOrChangedFiles = sourceFiles.Where(a => !target.GetFiles().Select(m => m.ToLower()).Contains(a.RelativePath.ToLower()) || target.GetFileSize(a.RelativePath) != a.GetFileSize() || !HashMatches(target, a)).AsParallel ().ToArray (); return result; }
public static void ApplyPatch(this IBackupPrototype prototype, Patch patch) { patch.ApplyPatch(prototype); }