Example #1
0
        public FolderDiffForm(Detector detector)
        {
            InitializeComponent();

            this.detector = detector;
            this.source = detector.Source;
            this.target = detector.Target;
        }
Example #2
0
        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;
        }
Example #3
0
        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);
        }
Example #4
0
        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());
        }
Example #5
0
        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();
        }
Example #6
0
        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();
        }
Example #7
0
        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("");
        }