예제 #1
0
 public void CommandLoop()
 {
     while (ContinueLoop)
     {
         int    hashdisplen  = BackupHash.Length <= 6 ? BackupHash.Length : 6;
         string cachewarning = "";
         if (!BCore.DestinationAvailable)
         {
             cachewarning = "(cache)";
         }
         Console.Write(String.Format("backup {0}{1}:{2}> ", BackupHash.Substring(0, hashdisplen), cachewarning, CurrentNode.Path));
         string[] args = LagernConsole.ReadArgs();
         try
         {
             Parser.Default.ParseArguments <CDOptions, LSOptions, LagernConsole.ExitOptions, LagernConsole.RestoreOptions, CBOptions, LagernConsole.ListNoNameOptions>(args)
             .WithParsed <CDOptions>(opts => ChangeDirectory(opts))
             .WithParsed <LSOptions>(opts => ListDirectory())
             .WithParsed <LagernConsole.ExitOptions>(opts => ContinueLoop = false)
             .WithParsed <LagernConsole.RestoreOptions>(opts => LagernConsole.RestoreFile(opts))
             .WithParsed <CBOptions>(opts => ChangeBackup(opts))
             .WithParsed <LagernConsole.ListNoNameOptions>(opts => LagernConsole.ListBackups(opts, BackupSet, BCore));
         }
         catch (ChangeBackupException ex)
         {
             Console.WriteLine(ex.Message);
         }
     }
 }
예제 #2
0
        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);
        }