public RestorePoint Create(string backupPath, List <FileInformation> files, List <RestorePoint> restorePoints, IDateTimeProvider dateTimeProvider, IStorageAlgorithm storageAlgorithm, RestoreType restoreType) { if (restoreType == RestoreType.Increment) { RestorePoint lastFullRestorePoint = restorePoints.Last(x => x.RestoreType == RestoreType.Full); List <RestorePoint> lastRestorePoints = restorePoints.AsEnumerable().Reverse() .TakeWhile(x => x.RestoreType == RestoreType.Increment).ToList(); lastRestorePoints.Add(lastFullRestorePoint); List <FileInformation> incrementedFiles = new List <FileInformation>(); foreach (var file in files) { List <FileInformation> fileUpdates = lastRestorePoints .Select(x => x.GetFile(file.Path)) .Where(x => x != null) .Cast <FileInformation>() .ToList(); FileInformation diff = file.GetDiff(fileUpdates); if (diff.Size > 0) { incrementedFiles.Add(diff); } } files = incrementedFiles; } RestorePoint restorePoint = storageAlgorithm.Storage(backupPath, dateTimeProvider.GetCurrentTime(), restoreType, files); return(restorePoint); }
public Backup(IStorageAlgorithm storageAlgorithm, ICleanAlgorithm cleanAlgorithm, IFileRepository fileRepository, DateTimeProvider dateTimeProvider) { _storageAlgorithm = storageAlgorithm ?? throw new ArgumentNullException(nameof(storageAlgorithm)); _cleanAlgorithm = cleanAlgorithm ?? throw new ArgumentNullException(nameof(cleanAlgorithm)); _fileRepository = fileRepository ?? throw new ArgumentNullException(nameof(fileRepository)); _dateTimeProvider = dateTimeProvider ?? throw new ArgumentNullException(nameof(dateTimeProvider)); Id = Guid.NewGuid(); _watchedFilePaths = new List <String>(); _restorePoints = new List <RestorePoint>(); }
public Backup(IStorageAlgorithm storageAlgorithm, IDateTimeProvider dateTimeProvider, IFileSystem fileSystem, IRestorePointCreator restorePointCreator) { _storageAlgorithm = storageAlgorithm; _dateTimeProvider = dateTimeProvider; _fileSystem = fileSystem; _restorePointCreator = restorePointCreator; Id = Guid.NewGuid(); _backupPath = "Backup" + Id.ToString(); _restorePoints = new List <RestorePoint>(); _watchedFilePaths = new List <string>(); }