Exemplo n.º 1
0
        public static void Main(string[] args)
        {
            if (args.Length < 2)
            {
                throw new ArgumentException($"Incorrect number of input arguments.  {ConfigurationImporter.usageString}");
            }

            string configurationFile = args[0];
            Dictionary <string, string> importOptions = Duplicati.Library.Utility.CommandLineParser.ExtractOptions(new List <string> {
                args[1]
            });

            if (!importOptions.TryGetValue("import-metadata", out string importMetadataString))
            {
                throw new ArgumentException($"Invalid import-metadata argument.  {ConfigurationImporter.usageString}");
            }
            bool importMetadata = Duplicati.Library.Utility.Utility.ParseBool(importMetadataString, false);
            Dictionary <string, string> advancedOptions = Duplicati.Library.Utility.CommandLineParser.ExtractOptions(new List <string>(args.Skip(2)));

            ImportExportStructure importedStructure = Backups.ImportBackup(configurationFile, importMetadata, () => ConfigurationImporter.ReadPassword($"Password for {configurationFile}: "), advancedOptions);

            Console.WriteLine($"Imported \"{importedStructure.Backup.Name}\" with ID {importedStructure.Backup.ID} and local database at {importedStructure.Backup.DBPath}.");
        }
Exemplo n.º 2
0
        public static void Main(string[] args)
        {
            if (args.Length < 2)
            {
                throw new ArgumentException($"Incorrect number of input arguments.  {ConfigurationImporter.usageString}");
            }

            string configurationFile = args[0];
            Dictionary <string, string> importOptions = Duplicati.Library.Utility.CommandLineParser.ExtractOptions(new List <string> {
                args[1]
            });

            if (!importOptions.TryGetValue("import-metadata", out string importMetadataString))
            {
                throw new ArgumentException($"Invalid import-metadata argument.  {ConfigurationImporter.usageString}");
            }
            bool importMetadata = Duplicati.Library.Utility.Utility.ParseBool(importMetadataString, false);

            // This removes the ID and DBPath from the backup configuration.
            ImportExportStructure importedStructure = Backups.LoadConfiguration(configurationFile, importMetadata, () => ConfigurationImporter.ReadPassword($"Password for {configurationFile}: "));

            Dictionary <string, string> advancedOptions = Duplicati.Library.Utility.CommandLineParser.ExtractOptions(new List <string>(args.Skip(2)));

            // This will create the Duplicati-server.sqlite database file if it doesn't exist.
            Duplicati.Server.Database.Connection connection = Program.GetDatabaseConnection(advancedOptions);

            if (connection.Backups.Any(x => x.Name.Equals(importedStructure.Backup.Name, StringComparison.OrdinalIgnoreCase)))
            {
                throw new InvalidOperationException($"A backup with the name {importedStructure.Backup.Name} already exists.");
            }

            string error = connection.ValidateBackup(importedStructure.Backup, importedStructure.Schedule);

            if (!string.IsNullOrWhiteSpace(error))
            {
                throw new InvalidOperationException(error);
            }

            // This creates a new ID and DBPath.
            connection.AddOrUpdateBackupAndSchedule(importedStructure.Backup, importedStructure.Schedule);

            Console.WriteLine($"Imported \"{importedStructure.Backup.Name}\" with ID {importedStructure.Backup.ID} and local database at {importedStructure.Backup.DBPath}.");
        }