/// <summary> /// Returns a list of changes that need to be performed as part of the sync. /// </summary> public List <PreSyncDetails> FindChanges(bool clearCache = true, ConsoleEx console = null) { //todo: disable default for reset console?.WriteLine(VerbosityLevel.Diagnostic, 0, "Finding Changes..."); if (clearCache) { ClearCache(); } using var rng = RandomNumberGenerator.Create(); console?.WriteLine(VerbosityLevel.Diagnostic, 1, "Enumerating Encr Directory..."); List <FSEntry> encrDirectoryFiles = EncrDirectory.GetEntries(SearchOption.AllDirectories).Where(EncrFilter).ToList(); console?.WriteLine(VerbosityLevel.Diagnostic, 2, $"{encrDirectoryFiles.Count} files found"); console?.WriteLine(VerbosityLevel.Diagnostic, 1, $"Enumerating Decr Directory..."); console?.WriteLine(VerbosityLevel.Diagnostic, 2, $"Path: {DecrDirectory.FullName}"); List <FSEntry> decrDirectoryFiles = DecrDirectory.GetEntries(SearchOption.AllDirectories).Where(DecrFilter).ToList(); console?.WriteLine(VerbosityLevel.Diagnostic, 2, $"{decrDirectoryFiles.Count} files found"); console?.WriteLine(VerbosityLevel.Diagnostic, 1, "Reading sync log (decr side)..."); console?.WriteLine(VerbosityLevel.Diagnostic, 2, $"{SyncLog.Count()} entries found"); //todo: filter out log entries where the decr file name and the encr file name does not match console?.WriteLine(VerbosityLevel.Diagnostic, 1, "Performing 3 way join..."); List <ChangeBuilder> changes = FindChanges_St04_ThreeWayJoin(encrDirectoryFiles, decrDirectoryFiles, SyncLog, console).ToList(); console?.WriteLine(VerbosityLevel.Diagnostic, 1, "Refreshing EncrHeaders..."); FindChanges_St05_RefreshEncrHeaders(console, changes); //todo: detect conflicts console?.WriteLine(VerbosityLevel.Diagnostic, 1, "Adding Relationships..."); FindChanges_St06_AddRelationships(changes); #if DEBUG Debug.Assert(changes.All(c => c.RelationParents != null)); Debug.Assert(changes.All(c => c.RelationChildren != null)); Debug.Assert(changes.All(c => c.RelationCaseDifference != null)); #endif console?.WriteLine(VerbosityLevel.Diagnostic, 1, "Calculating Operation..."); FindChanges_St07_CalculateOperation(changes); console?.WriteLine(VerbosityLevel.Diagnostic, 1, "Calculating Sync Mode..."); FindChanges_St08_CalculateSyncMode(changes); console?.WriteLine(VerbosityLevel.Diagnostic, 1, "Calculating Dependencies..."); FindChanges_St09_CalculateDependencies(changes); console?.WriteLine(VerbosityLevel.Diagnostic, 1, "Sorting..."); changes = FindChanges_St10_Sort(rng, changes); return(changes .Where(m => m.SyncMode != PreSyncMode.Unchanged) .Select(m => m.ToSyncEntry()) .ToList()); }
public bool InitializeMergeWarning() { return(DecrDirectory.Exists && DecrDirectory.GetEntries(SearchOption.TopDirectoryOnly).Any()); }