public BackupBrowser(string backupset, string?backuphash, BackupCore.Core bcore, int backupdst = 0) { ContinueLoop = true; BCore = bcore; BackupDst = backupdst; BackupSetReference backupSetReference = new BackupSetReference("test", false, false, false); if (!BCore.DestinationAvailable) { backupSetReference = backupSetReference with { Cache = true }; } (string hash, BackupCore.BackupRecord record)targetbackuphashandrecord; if (backuphash == null) { targetbackuphashandrecord = BCore.DefaultDstDependencies[BackupDst].Backups.GetBackupHashAndRecord(backupSetReference); } else { targetbackuphashandrecord = BCore.DefaultDstDependencies[BackupDst].Backups.GetBackupHashAndRecord(backupSetReference, backuphash, 0); } BackupHash = targetbackuphashandrecord.hash; BackupSet = backupset; BackupCore.BackupRecord backuprecord = targetbackuphashandrecord.record; BackupTree = BackupCore.MetadataNode.Load(BCore.DefaultDstDependencies[BackupDst].Blobs, backuprecord.MetadataTreeHash); CurrentNode = BackupTree; }
private void ChangeBackup(CBOptions opts) { string curpath = CurrentNode.Path; string backuphash; if (opts.Backup == null) { if (opts.Offset == 0) { throw new ChangeBackupException("Must set either or both backup or offset."); } backuphash = BackupHash; } else { backuphash = opts.Backup; } var targetbackuphashandrecord = BCore.DefaultDstDependencies[BackupDst].Backups.GetBackupHashAndRecord(new BackupSetReference(BackupSet, false, false, false), backuphash, opts.Offset); BackupHash = targetbackuphashandrecord.Item1; BackupCore.BackupRecord backuprecord = targetbackuphashandrecord.Item2; BackupTree = BackupCore.MetadataNode.Load(BCore.DefaultDstDependencies[BackupDst].Blobs, backuprecord.MetadataTreeHash); BackupCore.MetadataNode?curnode = BackupTree.GetDirectory(curpath); if (curnode != null) { CurrentNode = curnode; } else { CurrentNode = BackupTree; } Console.WriteLine("Switching to backup {0}: \"{1}\"", BackupHash.Substring(0, 6), backuprecord.BackupMessage); }