public void RestoreProject_CreateNew_OnlyDataFileAndWsFiles() { m_restoreSettings.ProjectName = "TestRestoreFWProject 01"; m_restoreProjectService = new ProjectRestoreService(m_restoreSettings, new DummyFdoUI(), FwDirectoryFinder.ConverterConsoleExe, FwDirectoryFinder.DbExe); m_restoreProjectService.RestoreProject(new DummyProgressDlg()); VerifyManditoryFilesUnzippedAndDeleteThem(); }
public void RestoreProject_OverwriteOnlyDataRestored() { IThreadedProgress progressDlg = new DummyProgressDlg(); m_restoreSettings.IncludeConfigurationSettings = false; m_restoreProjectService = new ProjectRestoreService(m_restoreSettings, new DummyFdoUI(), FwDirectoryFinder.ConverterConsoleExe, FwDirectoryFinder.DbExe); //Restore the project once and do not delete it so that we can restore the project over the previous one. m_restoreProjectService.RestoreProject(progressDlg); string restoreProjectDirectory = m_restoreSettings.ProjectPath; VerifyFileExists(restoreProjectDirectory, FdoFileHelper.GetXmlDataFileName("TestRestoreFWProject")); var dateTimeTicksOfFirstFile = GetLastWriteTimeOfRestoredFile(restoreProjectDirectory, FdoFileHelper.GetXmlDataFileName("TestRestoreFWProject")); // Linux filesystem modification time precision can be to the second, so wait a moment. if (MiscUtils.IsUnix) Thread.Sleep(1000); //Verify that the restoreProjectService indicates that the project already exists. The restoreProjectPresenter //can then inform the user that the project already exists on disk and gives them the chance to backup before //overwriting it. Assert.True(m_restoreSettings.ProjectExists, "Project does not exist but it should."); //Now do another restore then verify that the two files are not the same by comparing the LastWriteTime values. m_restoreProjectService.RestoreProject(progressDlg); var dateTimeTicksOfSecondFile = GetLastWriteTimeOfRestoredFile(restoreProjectDirectory, FdoFileHelper.GetXmlDataFileName("TestRestoreFWProject")); Assert.True(dateTimeTicksOfSecondFile.Equals(dateTimeTicksOfFirstFile), "The dates and times of the files should be the same since they are set to the timestamp of the file in the zip file."); VerifyManditoryFilesUnzippedAndDeleteThem(); RemotingServer.Stop(); }
public void RestoreProject_PutLinkedFilesInDefaultLocation() { m_restoreSettings.IncludeLinkedFiles = true; m_restoreSettings.IncludeConfigurationSettings = true; var defaultLinkedFilesDir = m_restoreSettings.LinkedFilesPath; m_restoreProjectService = new ProjectRestoreTestService(m_restoreSettings); ((ProjectRestoreTestService)m_restoreProjectService).PutFilesInProject = true; m_restoreProjectService.RestoreProject(new DummyProgressDlg()); VerifyManditoryFilesUnzippedAndDeleteThem(); VerifyConfigurationSettingsFilesUnzippedAndDeleteThem(); var newDir = m_restoreProjectService.LinkDirChangedTo; Assert.AreEqual(defaultLinkedFilesDir, newDir, "Should have changed the LinkedFiles directory to the default location."); VerifyFileWasUnzippedThenDeleteIt(Path.Combine(m_restoreProjectService.LinkDirChangedTo, "Pictures"), "PoolTable.JPG"); }
public void RestoreProject_PutLinkedFilesInOldLocation_CancelSelected() { m_restoreSettings.IncludeLinkedFiles = true; m_restoreSettings.IncludeConfigurationSettings = true; var nonStdLinkedFilesDir = m_restoreSettings.Backup.LinkedFilesPathActualPersisted; m_restoreProjectService = new ProjectRestoreTestService(m_restoreSettings); ((ProjectRestoreTestService)m_restoreProjectService).PutFilesInProject = true; ((ProjectRestoreTestService)m_restoreProjectService).SimulateOKResult = false; var fullVersionOfRelativeNonStdDir = GetFullVersionOfRelativeNonStdDir(nonStdLinkedFilesDir); try { m_restoreProjectService.RestoreProject(new DummyProgressDlg()); VerifyManditoryFilesUnzippedAndDeleteThem(); VerifyConfigurationSettingsFilesUnzippedAndDeleteThem(); var newDir = m_restoreProjectService.LinkDirChangedTo; Assert.IsNull(newDir, "Should have left the LinkedFiles directory in the non-standard location."); VerifyFileWasUnzippedThenDeleteIt(Path.Combine(fullVersionOfRelativeNonStdDir, "Pictures"), "PoolTable.JPG"); } finally { RemoveAllFilesFromFolderAndSubfolders(fullVersionOfRelativeNonStdDir); RemoveTestRestoreFolder(fullVersionOfRelativeNonStdDir); } }
private bool DoRestore() { m_restoreSettings.ProjectName = textBoxProjectName.Text; if (m_restoreSettings.ProjectExists) { using (var dlg = new ProjectExistsForm(m_restoreSettings.ProjectName)) { dlg.StartPosition = FormStartPosition.CenterParent; DialogResult result = dlg.ShowDialog(); if (result == DialogResult.Cancel) { textBoxProjectName.SelectAll(); textBoxProjectName.Focus(); return false; } } } try { var restoreService = new ProjectRestoreService(m_restoreSettings, m_ui, null, null); restoreService.RestoreProject(new ParatextLexiconPluginThreadedProgress(m_ui.SynchronizeInvoke)); m_selectedItem = new LanguageProjectInfo(m_restoreSettings.FullProjectPath); } catch { MessageBox.Show(Strings.ksRestoreProblemText); return false; } return true; }
/// ------------------------------------------------------------------------------------ /// <summary> /// Does the restore. /// </summary> /// <param name="restoreService">The restore service.</param> /// ------------------------------------------------------------------------------------ private static void DoRestore(ProjectRestoreService restoreService) { using (var progressDlg = new ProgressDialogWithTask(s_threadHelper)) restoreService.RestoreProject(progressDlg); }
/// ------------------------------------------------------------------------------------ /// <summary> /// Restores from the backup specified in restoreSettings, replacing the current version /// of this project (requires restarting apps and the cache). /// </summary> /// <param name="restoreSettings">The restore settings.</param> /// <param name="dialogOwner">A form that can be used as an owner for progress dialog/ /// message box.</param> /// ------------------------------------------------------------------------------------ private static void RestoreCurrentProject(FwRestoreProjectSettings restoreSettings, Form dialogOwner) { // When we get here we can safely do the backup of the project because we either // have no cache (and no other process has this project open), or we are the // process that has this project open. (FWR-3344) if (restoreSettings.Settings.BackupOfExistingProjectRequested && !BackupProjectForRestore(restoreSettings, Cache, dialogOwner)) { return; } ExecuteWithAppsShutDown(restoreSettings.FwAppCommandLineAbbrev, () => { bool retry; do { retry = false; try { var restoreService = new ProjectRestoreService(restoreSettings.Settings, s_ui, FwDirectoryFinder.ConverterConsoleExe, FwDirectoryFinder.DbExe); Logger.WriteEvent("Restoring from " + restoreSettings.Settings.Backup.File); if (RestoreProjectDlg.HandleRestoreFileErrors(null, ResourceHelper.GetResourceString("ksRestoreFailed"), restoreSettings.Settings.Backup.File, () => DoRestore(restoreService))) { s_LinkDirChangedTo = restoreService.LinkDirChangedTo; return s_projectId ?? new ProjectId(ClientServerServices.Current.Local.IdForLocalProject(restoreSettings.Settings.ProjectName), null); } } catch (CannotConvertException e) { MessageBoxUtils.Show(e.Message, ResourceHelper.GetResourceString("ksRestoreFailed")); } catch (MissingOldFwException e) { using (var dlg = new MissingOldFieldWorksDlg(restoreSettings.Settings, e.HaveOldFieldWorks, e.HaveFwSqlServer)) { retry = (dlg.ShowDialog() == DialogResult.Retry); } } catch (FailedFwRestoreException e) { MessageBoxUtils.Show(Properties.Resources.ksRestoringOldFwBackupFailed, Properties.Resources.ksFailed); } } while (retry); return null; }); }
public void RestoreProjectSettings_VerifyExistenceOfProject() { string restoreTestsZipFileDir = Path.Combine(FwDirectoryFinder.SourceDirectory, "FDO/FDOTests/BackupRestore/RestoreServiceTestsZipFileDir"); RestoreProjectSettings restoreSettings = new RestoreProjectSettings(FwDirectoryFinder.ProjectsDirectory) { Backup = new BackupFileSettings(Path.Combine(restoreTestsZipFileDir, Path.ChangeExtension("TestRestoreFWProject", FdoFileHelper.ksFwBackupFileExtension))), IncludeConfigurationSettings = false, IncludeLinkedFiles = false, IncludeSupportingFiles = true, IncludeSpellCheckAdditions = false, ProjectName = "TestRestoreFWProject 01", BackupOfExistingProjectRequested = false, }; ProjectRestoreServiceTests.RemoveAnyFilesAndFoldersCreatedByTests(restoreSettings); ProjectRestoreService restoreProjectService = new ProjectRestoreService(restoreSettings, new DummyFdoUI(), FwDirectoryFinder.ConverterConsoleExe, FwDirectoryFinder.DbExe); Assert.False(restoreSettings.ProjectExists, "Project exists but it should not."); try { // Restore the project and check to ensure that it exists. restoreProjectService.RestoreProject(new DummyProgressDlg()); Assert.True(restoreSettings.ProjectExists, "Project does not exist but it should."); } finally { ProjectRestoreServiceTests.RemoveAnyFilesAndFoldersCreatedByTests(restoreSettings); } }
public void RestoreProjectSettings_VerifyExistenceOfHgRepo() { string restoreTestsZipFileDir = Path.Combine(FwDirectoryFinder.SourceDirectory, "FDO/FDOTests/BackupRestore/RestoreServiceTestsZipFileDir"); RestoreProjectSettings restoreSettings = new RestoreProjectSettings(FwDirectoryFinder.ProjectsDirectory) { Backup = new BackupFileSettings(Path.Combine(restoreTestsZipFileDir, Path.ChangeExtension("TestRestoreFWProject", FdoFileHelper.ksFwBackupFileExtension))), IncludeConfigurationSettings = false, IncludeLinkedFiles = false, IncludeSupportingFiles = true, IncludeSpellCheckAdditions = false, ProjectName = "TestRestoreFWProject 01", BackupOfExistingProjectRequested = false, }; ProjectRestoreService restoreProjectService = new ProjectRestoreService(restoreSettings, new DummyFdoUI(), FwDirectoryFinder.ConverterConsoleExe, FwDirectoryFinder.DbExe); try { // Restore the project and check to ensure that it exists, but is not using Send/Receive. restoreProjectService.RestoreProject(new DummyProgressDlg()); Assert.True(restoreSettings.ProjectExists, "Project does not exist but it should."); Assert.False(restoreSettings.UsingSendReceive, "Project is using S/R but it should not be."); string otherReposDir = Path.Combine(restoreSettings.ProjectPath, FdoFileHelper.OtherRepositories); // Create a non-repository folder in OtherRepositories and verify the project is not using Send/Receive Directory.CreateDirectory(Path.Combine(otherReposDir, "NotARepo_LIFT", "RandomSubdir")); Assert.False(restoreSettings.UsingSendReceive, "Project should not be using S/R if there is no hg repo in OtherRepositories."); // Create a hg repository in OtherRepositories and verify the project is using Send/Receive Directory.CreateDirectory(Path.Combine(otherReposDir, "IsARepo_ButNotNecessarilyLIFT", ".hg")); Assert.True(restoreSettings.UsingSendReceive, "Project should be using S/R if there is a hg repo in OtherRepositories."); Directory.Delete(otherReposDir, true); Assert.False(restoreSettings.UsingSendReceive, "Project should not be using S/R if there is no hg repo. Deletion failed?"); // Make the project directory a hg repo Directory.CreateDirectory(Path.Combine(restoreSettings.ProjectPath, ".hg")); Assert.True(restoreSettings.UsingSendReceive, "Project should be using S/R if the project directory is a hg repo."); } finally { ProjectRestoreServiceTests.RemoveAnyFilesAndFoldersCreatedByTests(restoreSettings); } }