FullStream GenerateInitialStream(FileSystemObject fso, Dictionary<Guid, BackupStream> knownGuids) { if (!ShouldBeAdded(fso, knownGuids)) { FixUpStreamReference(fso, knownGuids); return null; } var ret = new FullStream { UniqueId = fso.StreamUniqueId, PhysicalSize = fso.Size, VirtualSize = fso.Size, }; if (fso.FileSystemGuid != null) knownGuids[fso.FileSystemGuid.Value] = ret; ret.FileSystemObjects.Add(fso); return ret; }
private BackupStream CheckAndMaybeAdd(FileSystemObject fso, Dictionary<Guid, BackupStream> knownGuids) { if (!ShouldBeAdded(fso, knownGuids)) { FixUpStreamReference(fso, knownGuids); return null; } int existingVersion = -1; if (fso.BackupMode != BackupMode.ForceFull && !FileHasChanged(fso, out existingVersion)) fso.BackupMode = BackupMode.Unmodified; BackupStream newStream; switch (fso.BackupMode) { case BackupMode.Unmodified: newStream = new UnmodifiedStream { UniqueId = fso.StreamUniqueId, ContainingVersion = existingVersion, VirtualSize = fso.Size, }; newStream.FileSystemObjects.Add(fso); break; case BackupMode.ForceFull: case BackupMode.Full: newStream = new FullStream { UniqueId = fso.StreamUniqueId, PhysicalSize = fso.Size, VirtualSize = fso.Size, }; newStream.FileSystemObjects.Add(fso); break; case BackupMode.Rsync: throw new NotImplementedException("Differential backup not implemented."); default: throw new ArgumentOutOfRangeException(); } if (fso.FileSystemGuid != null) knownGuids[fso.FileSystemGuid.Value] = newStream; return newStream; }