public FolderDiffForm(Detector detector) { InitializeComponent(); this.detector = detector; this.source = detector.Source; this.target = detector.Target; }
public DialogResult AnalyzeFolderPair(SyncTask curTask) { DialogResult result = DialogResult.None; try { this.NotifyUIs("Analyzing " + curTask.Name + "..."); Detector detector = new Detector(_metaDataDir, curTask); detector.CompareFolders(); if (!detector.IsSynchronized()) { if (!CheckSufficientDiskSpace(curTask.Source.Substring(0, 1), detector.TgtDirtySize, false) || !CheckSufficientDiskSpace(curTask.Target.Substring(0, 1), detector.SrcDirtySize, false)) { throw new Exception("Insufficient disk space"); } _previewReconciler = new Reconciler(detector.SourceList, detector.TargetList, curTask, _metaDataDir); _previewReconciler.Preview(); FolderDiffForm form = new FolderDiffForm(_previewReconciler.PreviewFilesList, _previewReconciler.PreviewFoldersList, curTask); this.NotifyUIs("Analysis completed"); result = form.ShowDialog(); } else { this.NotifyUIs("Analysis completed"); MessageBox.Show("Task: " + curTask.Name + "\n\n" + "There are no differences between the source and target folders contents.", "SyncSharp", MessageBoxButtons.OK, MessageBoxIcon.Information); this.UpdateSyncTaskResult(curTask, "Successful"); } } catch (Exception e) { Logger.LogFileLocation = _metaDataDir + @"\"; Logger.LogFileName = Logger.LogFileLocation + curTask.Name + ".log"; Logger.WriteErrorLog(e.Message); this.UpdateSyncTaskResult(curTask, "Unsuccessful"); } this.UpdateSyncTaskTime(curTask, DateTime.Now.ToString()); return result; }
public static void update(Detector detector, TaskSettings settings) { Dictionary<string, FileUnit> sMeta = new Dictionary<string, FileUnit>(); Dictionary<string, FileUnit> tMeta = new Dictionary<string, FileUnit>(); foreach (FileUnit u in detector.NewSourceFilesList) { if (!u.IsDirectory) updateFile(u, null, true, false, sMeta, tMeta); else updateDir(u, null, true, false, sMeta, tMeta); } foreach (FileUnit u in detector.NewTargetFilesList) { if (!u.IsDirectory) updateFile(null, u, false, true, sMeta, tMeta); else updateDir(null, u, false, true, sMeta, tMeta); } foreach (FileUnit u in detector.ConflictFilesList) { if (u.Match != null) updateFile(u, u.Match, true, true, sMeta, tMeta); else { if (u.AbsolutePath.StartsWith(detector.Source)) updateFile(u, null, true, true, sMeta, tMeta); else updateFile(null, u, true, true, sMeta, tMeta); } } detector.DeleteSourceFilesList.Reverse(); foreach (FileUnit u in detector.DeleteSourceFilesList) { switch (chkFileDelete(u, null)) { case SyncAction.DeleteSourceFile: if (!u.IsDirectory) File.Delete(u.AbsolutePath); deleteEmptyFolders(u); break; } } detector.DeleteTargetFilesList.Reverse(); foreach (FileUnit u in detector.DeleteTargetFilesList) { switch (chkFileDelete(null, u)) { case SyncAction.DeleteTargetFile: if (!u.IsDirectory) File.Delete(u.AbsolutePath); deleteEmptyFolders(u); break; } } detector.UnChangedFilesList.Reverse(); foreach (FileUnit u in detector.UnChangedFilesList) { sMeta.Add(u.AbsolutePath, u); tMeta.Add(u.Match.AbsolutePath, u.Match); u.Match.Match = null; u.Match = null; if (u.IsDirectory) deleteEmptyFolders(u); } SyncMetaData.WriteMetaData(detector.Source, sMeta); SyncMetaData.WriteMetaData(detector.Target, tMeta); }
public void SyncFolderPair(SyncTask curTask, bool disablePrompt) { try { Logger.WriteSyncLog(_metaDataDir, curTask.Name, true); this.NotifyUIs("Analyzing " + curTask.Name + "..."); Detector detector = new Detector(_metaDataDir, curTask); detector.CompareFolders(); if (!detector.IsSynchronized()) { if (!CheckSufficientDiskSpace(curTask.Source.Substring(0, 1), detector.TgtDirtySize, disablePrompt) || !CheckSufficientDiskSpace(curTask.Target.Substring(0, 1), detector.SrcDirtySize, disablePrompt)) { throw new Exception("Insufficient disk space"); } Reconciler reconciler = new Reconciler(detector.SourceList, detector.TargetList, curTask, _metaDataDir); this.NotifyUIs("Synchronizing " + curTask.Name + "..."); if (curTask.TypeOfSync) { reconciler.Sync(); SyncMetaData.WriteMetaData(_metaDataDir + @"\" + curTask.Name + ".meta", reconciler.UpdatedList); } else { reconciler.BackupSource(detector.BackupFiles); SyncMetaData.WriteMetaData(_metaDataDir + @"\" + curTask.Name + ".bkp", detector.BackupFiles); } } this.UpdateSyncTaskResult(curTask, "Successful"); } catch (Exception e) { Logger.WriteErrorLog(e.Message); this.UpdateSyncTaskResult(curTask, "Unsuccessful"); } finally { Logger.WriteSyncLog(_metaDataDir, curTask.Name, false); } this.UpdateSyncTaskTime(curTask, DateTime.Now.ToString()); }
private void TestCompareFoldersOutput(TestCase t, Detector tester) { Console.WriteLine("Comparing Output..."); t.Actual = ""; int M = 0; int C = 0; int D = 0; // Add sCleanFiles output t.Actual += "sCleanFiles[" + tester.SCleanFiles.Primary.Count + "], "; #region Add sDirtyFiles output foreach (var info in tester.SDirtyFiles.PriSub) { String start = info.Value.Substring(0, 1); switch (start) { case "M": M++; break; case "C": C++; break; case "D": D++; break; } } t.Actual += "sDirtyFiles[" + tester.SDirtyFiles.PriSub.Count + ", " + M + "M" + C + "C" + D + "D], "; #endregion // Add tCleanFiles output t.Actual += "tCleanFiles[" + tester.TCleanFiles.Primary.Count + "], "; #region Add tDirtyFiles output M = 0; C = 0; D = 0; foreach (var info in tester.TDirtyFiles.PriSub) { String start = info.Value.Substring(0, 1); switch (start) { case "M": M++; break; case "C": C++; break; case "D": D++; break; } } t.Actual += "tDirtyFiles[" + tester.TDirtyFiles.PriSub.Count + ", " + M + "M" + C + "C" + D + "D], "; #endregion // Add sCleanFolders output t.Actual += "sCleanFolders[" + tester.SCleanDirs.Primary.Count + "], "; #region Add sDirtyFolders output C = 0; D = 0; foreach (var info in tester.SDirtyDirs.PriSub) { String start = info.Value.Substring(0, 1); switch (start) { case "C": C++; break; case "D": D++; break; } } t.Actual += "sDirtyFolders[" + tester.SDirtyDirs.PriSub.Count + ", " + C + "C" + D + "D], "; #endregion // Add tCleanFolders output t.Actual += "tCleanFolders[" + tester.TCleanDirs.Primary.Count + "], "; #region Add tDirtyFolders output C = 0; D = 0; foreach (var info in tester.TDirtyDirs.PriSub) { String start = info.Value.Substring(0, 1); switch (start) { case "C": C++; break; case "D": D++; break; } } t.Actual += "tDirtyFolders[" + tester.TDirtyDirs.PriSub.Count + ", " + C + "C" + D + "D]"; #endregion t.Passed = (t.Actual.Equals(t.Param4.Trim())) ? true : false; if (t.Passed) _totalPassed++; else _totalFailed++; Console.WriteLine(); }
private void TestCompareFolders(SyncTask curTask, TestCase t, CustomDictionary<string, string, FileUnit> srcMeta, CustomDictionary<string, string, FileUnit> tgtMeta, out Detector tester) { Console.WriteLine("Performing compareFolders()..."); tester = new Detector("TestCases", curTask); if (t.Param1.Equals("Y")) { tester.SMetaData = srcMeta; tester.TMetaData = tgtMeta; } else { tester.SMetaData = null; tester.TMetaData = null; } tester.CompareFolders(); }
private void TestSync(TestCase t, SyncTask curTask) { RemoveExistingDirectories(curTask); Thread.Sleep(25); CreateTestDirectories(curTask); Thread.Sleep(25); CustomDictionary<String, String, FileUnit> srcMeta = new CustomDictionary<string, string, FileUnit>(); CustomDictionary<String, String, FileUnit> tgtMeta = new CustomDictionary<string, string, FileUnit>(); int srcLength = curTask.Source.Length; int tgtLength = curTask.Target.Length; char[] delimiters = new char[] { ',' }; String createScenario = t.Param2; String[] createFiles = createScenario.Split(delimiters, StringSplitOptions.RemoveEmptyEntries); CreateOldState(curTask, t, createFiles, srcMeta, srcLength, tgtMeta, tgtLength); Thread.Sleep(25); String scenario = t.Param3; String[] performChanges = scenario.Split(delimiters, StringSplitOptions.RemoveEmptyEntries); SimulateChanges(curTask, performChanges); Detector tester; TestCompareFolders(curTask, t, srcMeta, tgtMeta, out tester); Reconciler reconciler = new Reconciler(tester.SourceList, tester.TargetList, curTask, ""); Console.WriteLine("Performing Sync..."); reconciler.Sync(); tester = null; tester = new Detector("", curTask); SyncMetaData.WriteMetaData(@".\srcmetatest", reconciler.UpdatedList); SyncMetaData.WriteMetaData(@".\tgtmetatest", reconciler.UpdatedList); tester.SMetaData = SyncMetaData.ReadMetaData(@".\srcmetatest"); tester.TMetaData = SyncMetaData.ReadMetaData(@".\tgtmetatest"); Console.WriteLine("Comparing Output..."); tester.CompareFolders(); tester.IsSynchronized(); t.Actual = tester.IsSynchronized() ? true.ToString() : false.ToString(); t.Passed = (t.Actual.Equals(t.Param4.Trim())) ? true : false; if (t.Passed) _totalPassed++; else _totalFailed++; Console.WriteLine(""); }