Changeset 2157
- Timestamp:
- 05/05/2008 14:44:38 (2 years ago)
- Location:
- box/trunk
- Files:
-
- 4 modified
-
bin/bbackupquery/BackupQueries.cpp (modified) (4 diffs)
-
bin/bbackupquery/documentation.txt (modified) (2 diffs)
-
lib/backupclient/BackupClientRestore.cpp (modified) (20 diffs)
-
lib/backupclient/BackupClientRestore.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
box/trunk/bin/bbackupquery/BackupQueries.cpp
r2142 r2157 218 218 { "get", "i" }, 219 219 { "compare", "alcqAEQ" }, 220 { "restore", "dri " },220 { "restore", "drif" }, 221 221 { "help", "" }, 222 222 { "usage", "" }, … … 1967 1967 if(args.size() != 2) 1968 1968 { 1969 BOX_ERROR("Incorrect usage. restore [-d ] [-r] [-i] <remote-name> <local-name>");1969 BOX_ERROR("Incorrect usage. restore [-drif] <remote-name> <local-name>"); 1970 1970 return; 1971 1971 } … … 2030 2030 true /* print progress dots */, restoreDeleted, 2031 2031 false /* don't undelete after restore! */, 2032 opts['r'] /* resume? */); 2032 opts['r'] /* resume? */, 2033 opts['f'] /* force continue after errors */); 2033 2034 } 2034 2035 catch(std::exception &e) … … 2051 2052 break; 2052 2053 2054 case Restore_CompleteWithErrors: 2055 BOX_WARNING("Restore complete, but some files could not be " 2056 "restored."); 2057 break; 2058 2053 2059 case Restore_ResumePossible: 2054 BOX_ERROR("Resume possible -- repeat command with -r flag to resume"); 2060 BOX_ERROR("Resume possible -- repeat command with -r flag " 2061 "to resume."); 2055 2062 SetReturnCode(COMMAND_RETURN_ERROR); 2056 2063 break; 2057 2064 2058 2065 case Restore_TargetExists: 2059 BOX_ERROR("The target directory exists. You cannot restore over an existing directory."); 2066 BOX_ERROR("The target directory exists. You cannot restore " 2067 "over an existing directory."); 2060 2068 SetReturnCode(COMMAND_RETURN_ERROR); 2061 2069 break; -
box/trunk/bin/bbackupquery/documentation.txt
r1188 r2157 117 117 < 118 118 119 > restore [-d ] [-r] [-i] <directory-name> <local-directory-name>119 > restore [-drif] <directory-name> <local-directory-name> 120 120 121 121 Restores a directory to the local disc. The local directory specified … … 127 127 -r -- resume an interrupted restoration 128 128 -i -- directory name is actually an ID 129 -f -- force restore to continue if errors are encountered 129 130 130 131 If a restore operation is interrupted for any reason, it can be restarted -
box/trunk/lib/backupclient/BackupClientRestore.cpp
r2144 r2157 194 194 bool PrintDots; 195 195 bool RestoreDeleted; 196 bool ContinueAfterErrors; 197 bool ContinuedAfterError; 196 198 std::string mRestoreResumeInfoFilename; 197 199 RestoreResumeInfo mResumeInfo; … … 388 390 BOX_LOG_SYS_ERROR("Failed to create directory '" << 389 391 rLocalDirectoryName << "'"); 390 return Restore_UnknownError; 392 393 if (Params.ContinueAfterErrors) 394 { 395 Params.ContinuedAfterError = true; 396 } 397 else 398 { 399 return Restore_UnknownError; 400 } 391 401 } 392 402 … … 401 411 Params.mRestoreResumeInfoFilename << "': " << 402 412 e.what()); 403 return Restore_UnknownError; 413 414 if (Params.ContinueAfterErrors) 415 { 416 Params.ContinuedAfterError = true; 417 } 418 else 419 { 420 return Restore_UnknownError; 421 } 404 422 } 405 423 catch(...) … … 408 426 Params.mRestoreResumeInfoFilename << 409 427 "': unknown error"); 410 return Restore_UnknownError; 428 429 if (Params.ContinueAfterErrors) 430 { 431 Params.ContinuedAfterError = true; 432 } 433 else 434 { 435 return Restore_UnknownError; 436 } 411 437 } 412 438 … … 436 462 BOX_ERROR("Failed to restore attributes for '" << 437 463 rLocalDirectoryName << "': " << e.what()); 438 return Restore_UnknownError; 464 465 if (Params.ContinueAfterErrors) 466 { 467 Params.ContinuedAfterError = true; 468 } 469 else 470 { 471 return Restore_UnknownError; 472 } 439 473 } 440 474 catch(...) … … 442 476 BOX_ERROR("Failed to restore attributes for '" << 443 477 rLocalDirectoryName << "': unknown error"); 444 return Restore_UnknownError; 478 479 if (Params.ContinueAfterErrors) 480 { 481 Params.ContinuedAfterError = true; 482 } 483 else 484 { 485 return Restore_UnknownError; 486 } 445 487 } 446 488 … … 474 516 "file '" << localFilename << 475 517 "'"); 476 return Restore_UnknownError; 518 519 if (Params.ContinueAfterErrors) 520 { 521 Params.ContinuedAfterError = true; 522 } 523 else 524 { 525 return Restore_UnknownError; 526 } 477 527 } 478 528 … … 508 558 localFilename << "': " << 509 559 e.what()); 510 return Restore_UnknownError; 560 561 if (Params.ContinueAfterErrors) 562 { 563 Params.ContinuedAfterError = true; 564 } 565 else 566 { 567 return Restore_UnknownError; 568 } 511 569 } 512 570 catch(...) … … 515 573 localFilename << 516 574 "': unknown error"); 517 return Restore_UnknownError; 575 576 if (Params.ContinueAfterErrors) 577 { 578 Params.ContinuedAfterError = true; 579 } 580 else 581 { 582 return Restore_UnknownError; 583 } 518 584 } 519 585 … … 546 612 localFilename << "': " << 547 613 e.what()); 548 return Restore_UnknownError; 614 615 if (Params.ContinueAfterErrors) 616 { 617 Params.ContinuedAfterError = true; 618 } 619 else 620 { 621 return Restore_UnknownError; 622 } 549 623 } 550 624 catch(...) … … 554 628 localFilename << "': " 555 629 "unknown error"); 556 return Restore_UnknownError; 630 631 if (Params.ContinueAfterErrors) 632 { 633 Params.ContinuedAfterError = true; 634 } 635 else 636 { 637 return Restore_UnknownError; 638 } 557 639 } 558 640 … … 607 689 Params.mRestoreResumeInfoFilename << "': " << 608 690 e.what()); 609 return Restore_UnknownError; 691 if (Params.ContinueAfterErrors) 692 { 693 Params.ContinuedAfterError = true; 694 } 695 else 696 { 697 return Restore_UnknownError; 698 } 610 699 } 611 700 catch(...) … … 614 703 Params.mRestoreResumeInfoFilename << 615 704 "': unknown error"); 616 return Restore_UnknownError; 705 if (Params.ContinueAfterErrors) 706 { 707 Params.ContinuedAfterError = true; 708 } 709 else 710 { 711 return Restore_UnknownError; 712 } 617 713 } 618 714 … … 671 767 BOX_ERROR("Failed to restore attributes for '" << 672 768 rLocalDirectoryName << "': " << e.what()); 673 return Restore_UnknownError; 769 if (Params.ContinueAfterErrors) 770 { 771 Params.ContinuedAfterError = true; 772 } 773 else 774 { 775 return Restore_UnknownError; 776 } 674 777 } 675 778 catch(...) … … 677 780 BOX_ERROR("Failed to restore attributes for '" << 678 781 rLocalDirectoryName << "': unknown error"); 679 return Restore_UnknownError; 782 if (Params.ContinueAfterErrors) 783 { 784 Params.ContinuedAfterError = true; 785 } 786 else 787 { 788 return Restore_UnknownError; 789 } 680 790 } 681 791 … … 688 798 // Function 689 799 // Name: BackupClientRestore(BackupProtocolClient &, int64_t, 690 // const char *, bool, bool )800 // const char *, bool, bool, bool, bool, bool) 691 801 // Purpose: Restore a directory on the server to a local 692 802 // directory on the disc. The local directory must not … … 708 818 // 709 819 // Returns Restore_Complete on success. (Exceptions 710 // on error.) 820 // on error, unless ContinueAfterError is true and 821 // the error is recoverable, in which case it returns 822 // Restore_CompleteWithErrors) 711 823 // Created: 23/11/03 712 824 // … … 715 827 int64_t DirectoryID, const char *LocalDirectoryName, 716 828 bool PrintDots, bool RestoreDeleted, 717 bool UndeleteAfterRestoreDeleted, bool Resume) 829 bool UndeleteAfterRestoreDeleted, bool Resume, 830 bool ContinueAfterErrors) 718 831 { 719 832 // Parameter block … … 721 834 params.PrintDots = PrintDots; 722 835 params.RestoreDeleted = RestoreDeleted; 836 params.ContinueAfterErrors = ContinueAfterErrors; 837 params.ContinuedAfterError = false; 723 838 params.mRestoreResumeInfoFilename = LocalDirectoryName; 724 839 params.mRestoreResumeInfoFilename += ".boxbackupresume"; … … 783 898 ::unlink(params.mRestoreResumeInfoFilename.c_str()); 784 899 785 return Restore_Complete; 900 return params.ContinuedAfterError ? Restore_CompleteWithErrors 901 : Restore_Complete; 786 902 } 787 903 -
box/trunk/lib/backupclient/BackupClientRestore.h
r1082 r2157 16 16 { 17 17 Restore_Complete = 0, 18 Restore_ResumePossible = 1, 19 Restore_TargetExists = 2, 20 Restore_TargetPathNotFound = 3, 21 Restore_UnknownError = 4, 18 Restore_ResumePossible, 19 Restore_TargetExists, 20 Restore_TargetPathNotFound, 21 Restore_UnknownError, 22 Restore_CompleteWithErrors, 22 23 }; 23 24 24 int BackupClientRestore(BackupProtocolClient &rConnection, int64_t DirectoryID, const char *LocalDirectoryName, 25 bool PrintDots = false, bool RestoreDeleted = false, bool UndeleteAfterRestoreDeleted = false, bool Resume = false); 25 int BackupClientRestore(BackupProtocolClient &rConnection, 26 int64_t DirectoryID, 27 const char *LocalDirectoryName, 28 bool PrintDots = false, 29 bool RestoreDeleted = false, 30 bool UndeleteAfterRestoreDeleted = false, 31 bool Resume = false, 32 bool ContinueAfterErrors = false); 26 33 27 34 #endif // BACKUPSCLIENTRESTORE__H
