diff --git a/src/SIL.LCModel/DomainServices/BackupRestore/BackupFileSettings.cs b/src/SIL.LCModel/DomainServices/BackupRestore/BackupFileSettings.cs index 5cf02242..a51736ab 100644 --- a/src/SIL.LCModel/DomainServices/BackupRestore/BackupFileSettings.cs +++ b/src/SIL.LCModel/DomainServices/BackupRestore/BackupFileSettings.cs @@ -39,6 +39,7 @@ public class BackupFileSettings : IBackupSettings private bool m_linkedFiles; private bool m_supportingFiles; private bool m_spellCheckAdditions; + private bool m_sendReceiveData; #endregion #region Constructors @@ -118,6 +119,7 @@ private BackupFileSettings(BackupProjectSettings settings) m_projectName = settings.ProjectName; m_projectPathPersisted = LcmFileHelper.GetPathWithoutRoot(settings.ProjectPath); m_spellCheckAdditions = settings.IncludeSpellCheckAdditions; + m_sendReceiveData = settings.IncludeSendReceiveData; m_dbVersion = settings.DbVersion; m_fwVersion = settings.FwVersion; m_linkedFilesPathRelative = LinkedFilesRelativePathHelper.GetLinkedFilesRelativePathFromFullPath(settings.ProjectsRootFolder, settings.LinkedFilesPath, settings.ProjectPath, settings.ProjectName); @@ -372,6 +374,19 @@ public bool IncludeSupportingFiles get { PopulateSettingsFromZipFileIfNeeded(); return m_supportingFiles; } private set { m_supportingFiles = value; } } + + /// ------------------------------------------------------------------------------------ + /// + /// Whether or not Send/Receive repository data (.hg and OtherRepositories) is included + /// in the backup/restore. + /// + /// ------------------------------------------------------------------------------------ + [DataMember(Name = "SendReceiveData")] + public bool IncludeSendReceiveData + { + get { PopulateSettingsFromZipFileIfNeeded(); return m_sendReceiveData; } + private set { m_sendReceiveData = value; } + } #endregion #region Private helper methods @@ -562,6 +577,7 @@ private void CompleteInitialization(BackupFileSettings settings) m_linkedFiles = settings.IncludeLinkedFiles; m_supportingFiles = settings.IncludeSupportingFiles; m_spellCheckAdditions = settings.IncludeSpellCheckAdditions; + m_sendReceiveData = settings.IncludeSendReceiveData; m_dbVersion = settings.DbVersion; m_fwVersion = settings.FwVersion; } diff --git a/src/SIL.LCModel/DomainServices/BackupRestore/BackupProjectSettings.cs b/src/SIL.LCModel/DomainServices/BackupRestore/BackupProjectSettings.cs index 3f5ce3b5..a6cf1058 100644 --- a/src/SIL.LCModel/DomainServices/BackupRestore/BackupProjectSettings.cs +++ b/src/SIL.LCModel/DomainServices/BackupRestore/BackupProjectSettings.cs @@ -36,6 +36,7 @@ public BackupProjectSettings(LcmCache cache, IBackupInfo backupInfo, string dest IncludeLinkedFiles = backupInfo.IncludeLinkedFiles; IncludeSupportingFiles = backupInfo.IncludeSupportingFiles; IncludeSpellCheckAdditions = backupInfo.IncludeSpellCheckAdditions; + IncludeSendReceiveData = backupInfo.IncludeSendReceiveData; } } diff --git a/src/SIL.LCModel/DomainServices/BackupRestore/BackupSettings.cs b/src/SIL.LCModel/DomainServices/BackupRestore/BackupSettings.cs index a5bc49b5..8669afcc 100644 --- a/src/SIL.LCModel/DomainServices/BackupRestore/BackupSettings.cs +++ b/src/SIL.LCModel/DomainServices/BackupRestore/BackupSettings.cs @@ -35,6 +35,7 @@ public abstract class BackupSettings : IBackupSettings private bool m_includeMediaFiles; private bool m_includeSupportingFiles; private bool m_includeSpellCheckAdditions; + private bool m_includeSendReceiveData; /// /// The root folder for projects (typically the default, but if these settings represent @@ -141,6 +142,15 @@ public bool IncludeSpellCheckAdditions get { return m_includeSpellCheckAdditions; } set { m_includeSpellCheckAdditions = value; } } + + /// + /// Whether or not Send/Receive repository data (.hg and OtherRepositories) is included in the backup/restore. + /// + public bool IncludeSendReceiveData + { + get { return m_includeSendReceiveData; } + set { m_includeSendReceiveData = value; } + } #endregion #region Paths diff --git a/src/SIL.LCModel/DomainServices/BackupRestore/IBackupInfo.cs b/src/SIL.LCModel/DomainServices/BackupRestore/IBackupInfo.cs index d4ae0262..e7f3e3bf 100644 --- a/src/SIL.LCModel/DomainServices/BackupRestore/IBackupInfo.cs +++ b/src/SIL.LCModel/DomainServices/BackupRestore/IBackupInfo.cs @@ -42,6 +42,11 @@ public interface IBackupInfo /// Whether or not spell checking additions are included in the backup/restore. /// bool IncludeSpellCheckAdditions { get; } + + /// + /// Whether or not Send/Receive repository data (.hg and OtherRepositories) is included in the backup/restore. + /// + bool IncludeSendReceiveData { get; } } #endregion diff --git a/src/SIL.LCModel/DomainServices/BackupRestore/ProjectBackupService.cs b/src/SIL.LCModel/DomainServices/BackupRestore/ProjectBackupService.cs index bba3445d..94698962 100644 --- a/src/SIL.LCModel/DomainServices/BackupRestore/ProjectBackupService.cs +++ b/src/SIL.LCModel/DomainServices/BackupRestore/ProjectBackupService.cs @@ -133,6 +133,9 @@ internal IEnumerable CreateListOfFilesToZip() if (m_settings.IncludeSupportingFiles) foreach (string file in GetSupportingFilesFilesList()) yield return file; + if (m_settings.IncludeSendReceiveData) + foreach (string file in GetSendReceiveFiles()) + yield return file; } private IEnumerable GetProjectFolderFilesToBackup() @@ -184,6 +187,14 @@ private IEnumerable GetSupportingFilesFilesList() return GenerateFileListFolderAndSubfolders(m_settings.ProjectSupportingFilesPath); } + private IEnumerable GetSendReceiveFiles() + { + var files = new HashSet(); + files.UnionWith(AllFilesInADirectory(Path.Combine(m_settings.ProjectPath, ".hg"))); + files.UnionWith(AllFilesInADirectory(LcmFileHelper.GetOtherRepositoriesDir(m_settings.ProjectPath))); + return files; + } + private IEnumerable GetSpellingDictionaryFilesList() { var dictionaryFiles = new HashSet(); diff --git a/src/SIL.LCModel/DomainServices/BackupRestore/ProjectRestoreService.cs b/src/SIL.LCModel/DomainServices/BackupRestore/ProjectRestoreService.cs index 2cb608ff..63d245d9 100644 --- a/src/SIL.LCModel/DomainServices/BackupRestore/ProjectRestoreService.cs +++ b/src/SIL.LCModel/DomainServices/BackupRestore/ProjectRestoreService.cs @@ -174,6 +174,16 @@ private void RestoreFrom7_0AndNewerBackup(BackupFileSettings fileSettings) CopySpellingOverrideFilesFromBackupToLocal(); } + + if (m_restoreSettings.IncludeSendReceiveData) + { + UncompressFilesContainedInFolderandSubFolders( + LcmFileHelper.GetZipfileFormattedPath(".hg"), + Path.Combine(m_restoreSettings.ProjectPath, ".hg")); + UncompressFilesContainedInFolderandSubFolders( + LcmFileHelper.GetZipfileFormattedPath(LcmFileHelper.OtherRepositories), + LcmFileHelper.GetOtherRepositoriesDir(m_restoreSettings.ProjectPath)); + } } /// ------------------------------------------------------------------------------------ diff --git a/src/SIL.LCModel/DomainServices/BackupRestore/RestoreProjectSettings.cs b/src/SIL.LCModel/DomainServices/BackupRestore/RestoreProjectSettings.cs index 7bb6bcd7..7000d119 100644 --- a/src/SIL.LCModel/DomainServices/BackupRestore/RestoreProjectSettings.cs +++ b/src/SIL.LCModel/DomainServices/BackupRestore/RestoreProjectSettings.cs @@ -65,6 +65,7 @@ public RestoreProjectSettings(string projectsRootFolder, string projectName, str IncludeSupportingFiles = (commandLineOptions.IndexOf('f') >= 0); IncludeLinkedFiles = (commandLineOptions.IndexOf('l') >= 0); IncludeSpellCheckAdditions = (commandLineOptions.IndexOf('s') >= 0); + IncludeSendReceiveData = (commandLineOptions.IndexOf('r') >= 0); } #region Properties @@ -87,6 +88,8 @@ public string CommandLineOptions bldr.Append('l'); if (IncludeSpellCheckAdditions) bldr.Append('s'); + if (IncludeSendReceiveData) + bldr.Append('r'); return bldr.ToString(); } }