|
@@ -1,82 +1,93 @@
|
|
|
-import argparse
|
|
|
-import collections
|
|
|
-import configparser
|
|
|
-import faulthandler
|
|
|
-import functools
|
|
|
-import hashlib
|
|
|
-import inspect
|
|
|
-import itertools
|
|
|
-import json
|
|
|
-import logging
|
|
|
-import os
|
|
|
-import re
|
|
|
-import shlex
|
|
|
-import shutil
|
|
|
-import signal
|
|
|
-import stat
|
|
|
-import subprocess
|
|
|
+# borg cli interface / toplevel archiver code
|
|
|
+
|
|
|
import sys
|
|
|
-import tarfile
|
|
|
-import textwrap
|
|
|
-import time
|
|
|
import traceback
|
|
|
-from binascii import unhexlify
|
|
|
-from contextlib import contextmanager
|
|
|
-from datetime import datetime, timedelta
|
|
|
-from itertools import zip_longest
|
|
|
-
|
|
|
-from .logger import create_logger, setup_logging
|
|
|
-
|
|
|
-logger = create_logger()
|
|
|
-
|
|
|
-import borg
|
|
|
-from . import __version__
|
|
|
-from . import helpers
|
|
|
-from .algorithms.checksums import crc32
|
|
|
-from .archive import Archive, ArchiveChecker, ArchiveRecreater, Statistics, is_special
|
|
|
-from .archive import BackupError, BackupOSError, backup_io, OsOpen, stat_update_check
|
|
|
-from .archive import FilesystemObjectProcessors, MetadataCollector, ChunksProcessor
|
|
|
-from .cache import Cache, assert_secure, SecurityManager
|
|
|
-from .constants import * # NOQA
|
|
|
-from .compress import CompressionSpec
|
|
|
-from .crypto.key import key_creator, key_argument_names, tam_required_file, tam_required, RepoKey, PassphraseKey
|
|
|
-from .crypto.keymanager import KeyManager
|
|
|
-from .helpers import EXIT_SUCCESS, EXIT_WARNING, EXIT_ERROR
|
|
|
-from .helpers import Error, NoManifestError, set_ec
|
|
|
-from .helpers import positive_int_validator, location_validator, archivename_validator, ChunkerParams, Location
|
|
|
-from .helpers import PrefixSpec, SortBySpec, FilesCacheMode
|
|
|
-from .helpers import BaseFormatter, ItemFormatter, ArchiveFormatter
|
|
|
-from .helpers import format_timedelta, format_file_size, parse_file_size, format_archive
|
|
|
-from .helpers import safe_encode, remove_surrogates, bin_to_hex, prepare_dump_dict
|
|
|
-from .helpers import interval, prune_within, prune_split, PRUNING_PATTERNS
|
|
|
-from .helpers import timestamp
|
|
|
-from .helpers import get_cache_dir, os_stat
|
|
|
-from .helpers import Manifest, AI_HUMAN_SORT_KEYS
|
|
|
-from .helpers import hardlinkable
|
|
|
-from .helpers import StableDict
|
|
|
-from .helpers import check_python, check_extension_modules
|
|
|
-from .helpers import dir_is_tagged, is_slow_msgpack, is_supported_msgpack, yes, sysinfo
|
|
|
-from .helpers import log_multi
|
|
|
-from .helpers import signal_handler, raising_signal_handler, SigHup, SigTerm
|
|
|
-from .helpers import ErrorIgnoringTextIOWrapper
|
|
|
-from .helpers import ProgressIndicatorPercent
|
|
|
-from .helpers import basic_json_data, json_print
|
|
|
-from .helpers import replace_placeholders
|
|
|
-from .helpers import ChunkIteratorFileWrapper
|
|
|
-from .helpers import popen_with_error_handling, prepare_subprocess_env
|
|
|
-from .helpers import dash_open
|
|
|
-from .helpers import umount
|
|
|
-from .helpers import flags_root, flags_dir, flags_special_follow, flags_special
|
|
|
-from .helpers import msgpack
|
|
|
-from .nanorst import rst_to_terminal
|
|
|
-from .patterns import ArgparsePatternAction, ArgparseExcludeFileAction, ArgparsePatternFileAction, parse_exclude_pattern
|
|
|
-from .patterns import PatternMatcher
|
|
|
-from .item import Item
|
|
|
-from .platform import get_flags, get_process_id, SyncFile
|
|
|
-from .remote import RepositoryServer, RemoteRepository, cache_if_remote
|
|
|
-from .repository import Repository, LIST_SCAN_LIMIT, TAG_PUT, TAG_DELETE, TAG_COMMIT
|
|
|
-from .selftest import selftest
|
|
|
-from .upgrader import AtticRepositoryUpgrader, BorgRepositoryUpgrader
|
|
|
+
|
|
|
+try:
|
|
|
+ import argparse
|
|
|
+ import collections
|
|
|
+ import configparser
|
|
|
+ import faulthandler
|
|
|
+ import functools
|
|
|
+ import hashlib
|
|
|
+ import inspect
|
|
|
+ import itertools
|
|
|
+ import json
|
|
|
+ import logging
|
|
|
+ import os
|
|
|
+ import re
|
|
|
+ import shlex
|
|
|
+ import shutil
|
|
|
+ import signal
|
|
|
+ import stat
|
|
|
+ import subprocess
|
|
|
+ import tarfile
|
|
|
+ import textwrap
|
|
|
+ import time
|
|
|
+ from binascii import unhexlify
|
|
|
+ from contextlib import contextmanager
|
|
|
+ from datetime import datetime, timedelta
|
|
|
+
|
|
|
+ from .logger import create_logger, setup_logging
|
|
|
+
|
|
|
+ logger = create_logger()
|
|
|
+
|
|
|
+ import borg
|
|
|
+ from . import __version__
|
|
|
+ from . import helpers
|
|
|
+ from .algorithms.checksums import crc32
|
|
|
+ from .archive import Archive, ArchiveChecker, ArchiveRecreater, Statistics, is_special
|
|
|
+ from .archive import BackupError, BackupOSError, backup_io, OsOpen, stat_update_check
|
|
|
+ from .archive import FilesystemObjectProcessors, MetadataCollector, ChunksProcessor
|
|
|
+ from .cache import Cache, assert_secure, SecurityManager
|
|
|
+ from .constants import * # NOQA
|
|
|
+ from .compress import CompressionSpec
|
|
|
+ from .crypto.key import key_creator, key_argument_names, tam_required_file, tam_required, RepoKey, PassphraseKey
|
|
|
+ from .crypto.keymanager import KeyManager
|
|
|
+ from .helpers import EXIT_SUCCESS, EXIT_WARNING, EXIT_ERROR
|
|
|
+ from .helpers import Error, NoManifestError, set_ec
|
|
|
+ from .helpers import positive_int_validator, location_validator, archivename_validator, ChunkerParams, Location
|
|
|
+ from .helpers import PrefixSpec, SortBySpec, FilesCacheMode
|
|
|
+ from .helpers import BaseFormatter, ItemFormatter, ArchiveFormatter
|
|
|
+ from .helpers import format_timedelta, format_file_size, parse_file_size, format_archive
|
|
|
+ from .helpers import safe_encode, remove_surrogates, bin_to_hex, prepare_dump_dict
|
|
|
+ from .helpers import interval, prune_within, prune_split, PRUNING_PATTERNS
|
|
|
+ from .helpers import timestamp
|
|
|
+ from .helpers import get_cache_dir, os_stat
|
|
|
+ from .helpers import Manifest, AI_HUMAN_SORT_KEYS
|
|
|
+ from .helpers import hardlinkable
|
|
|
+ from .helpers import StableDict
|
|
|
+ from .helpers import check_python, check_extension_modules
|
|
|
+ from .helpers import dir_is_tagged, is_slow_msgpack, is_supported_msgpack, yes, sysinfo
|
|
|
+ from .helpers import log_multi
|
|
|
+ from .helpers import signal_handler, raising_signal_handler, SigHup, SigTerm
|
|
|
+ from .helpers import ErrorIgnoringTextIOWrapper
|
|
|
+ from .helpers import ProgressIndicatorPercent
|
|
|
+ from .helpers import basic_json_data, json_print
|
|
|
+ from .helpers import replace_placeholders
|
|
|
+ from .helpers import ChunkIteratorFileWrapper
|
|
|
+ from .helpers import popen_with_error_handling, prepare_subprocess_env
|
|
|
+ from .helpers import dash_open
|
|
|
+ from .helpers import umount
|
|
|
+ from .helpers import flags_root, flags_dir, flags_special_follow, flags_special
|
|
|
+ from .helpers import msgpack
|
|
|
+ from .nanorst import rst_to_terminal
|
|
|
+ from .patterns import ArgparsePatternAction, ArgparseExcludeFileAction, ArgparsePatternFileAction, parse_exclude_pattern
|
|
|
+ from .patterns import PatternMatcher
|
|
|
+ from .item import Item
|
|
|
+ from .platform import get_flags, get_process_id, SyncFile
|
|
|
+ from .remote import RepositoryServer, RemoteRepository, cache_if_remote
|
|
|
+ from .repository import Repository, LIST_SCAN_LIMIT, TAG_PUT, TAG_DELETE, TAG_COMMIT
|
|
|
+ from .selftest import selftest
|
|
|
+ from .upgrader import AtticRepositoryUpgrader, BorgRepositoryUpgrader
|
|
|
+except BaseException:
|
|
|
+ # an unhandled exception in the try-block would cause the borg cli command to exit with rc 1 due to python's
|
|
|
+ # default behavior, see issue #4424.
|
|
|
+ # as borg defines rc 1 as WARNING, this would be a mismatch, because a crash should be an ERROR (rc 2).
|
|
|
+ traceback.print_exc()
|
|
|
+ sys.exit(2) # == EXIT_ERROR
|
|
|
+
|
|
|
+assert EXIT_ERROR == 2, "EXIT_ERROR is not 2, as expected - fix assert AND exception handler right above this line."
|
|
|
|
|
|
|
|
|
STATS_HEADER = " Original size Compressed size Deduplicated size"
|