Пример #1
0
        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;
        }
Пример #2
0
 private static bool HashMatches(IBackupChain target, IBackupSourceFile a)
 {
     var sourceHash = a.GetFileHash();
     var targetHash = target.GetFileHash(a.RelativePath);
     return sourceHash == targetHash;
 }
Пример #3
0
 protected Patch(IBackupSource source, IBackupChain target)
 {
     Source = source;
     Target = target;
 }