From d5917204c311780519ab47579781c925e5987d3e Mon Sep 17 00:00:00 2001 From: Thomas Waldmann Date: Mon, 5 Mar 2018 17:02:49 +0100 Subject: [PATCH 1/3] fix borgfs patterns/paths processing, fixes #3551 Just checking for None in patterns.py (and removing the set_defaults calls in archiver.py) did not work as other arg parsing code relies on having an empty list (in .patterns, .paths) to append to. Thus I stayed away from pattern.py and rather fixed the defaults for .paths and .patterns in all parsers. (cherry picked from commit df9020389cd6d0c068634b9b0e049ad60c272c0c) --- src/borg/archiver.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/borg/archiver.py b/src/borg/archiver.py index 3940d6896..b7ccd0506 100644 --- a/src/borg/archiver.py +++ b/src/borg/archiver.py @@ -2562,7 +2562,9 @@ class Archiver: parser = argparse.ArgumentParser(prog=self.prog, description='Borg - Deduplicated Backups', add_help=False) - parser.set_defaults(fallback2_func=functools.partial(self.do_maincommand_help, parser)) + # paths and patterns must have an empty list as default everywhere + parser.set_defaults(fallback2_func=functools.partial(self.do_maincommand_help, parser), + paths=[], patterns=[]) parser.common_options = self.CommonOptions(define_common_options, suffix_precedence=('_maincommand', '_midcommand', '_subcommand')) parser.add_argument('-V', '--version', action='version', version='%(prog)s ' + __version__, @@ -2570,7 +2572,6 @@ class Archiver: parser.common_options.add_common_group(parser, '_maincommand', provide_defaults=True) common_parser = argparse.ArgumentParser(add_help=False, prog=self.prog) - # some empty defaults for all subparsers common_parser.set_defaults(paths=[], patterns=[]) parser.common_options.add_common_group(common_parser, '_subcommand') From a48fffad6e017d40aac8867034715b325a91694e Mon Sep 17 00:00:00 2001 From: Thomas Waldmann Date: Fri, 9 Mar 2018 17:27:30 +0100 Subject: [PATCH 2/3] borg config --cache: allow validated access to previous_location (cherry picked from commit 810986f0f57589a708cb0e40da47dc21681b108e) --- src/borg/archiver.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/borg/archiver.py b/src/borg/archiver.py index b7ccd0506..4cca8485e 100644 --- a/src/borg/archiver.py +++ b/src/borg/archiver.py @@ -45,7 +45,7 @@ from .crypto.key import key_creator, key_argument_names, tam_required_file, tam_ 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 +from .helpers import positive_int_validator, location_validator, archivename_validator, ChunkerParams, Location from .helpers import PrefixSpec, SortBySpec, HUMAN_SORT_KEYS, FilesCacheMode from .helpers import BaseFormatter, ItemFormatter, ArchiveFormatter from .helpers import format_timedelta, format_file_size, parse_file_size, format_archive @@ -1755,9 +1755,11 @@ class Archiver: def cache_validate(section, name, value=None, check_value=True): if section not in ['cache', ]: raise ValueError('Invalid section') - # I looked at the cache config and did not see anything a user would want to edit, - # so, for now, raise for any key name - raise ValueError('Invalid name') + if name in ['previous_location', ]: + if check_value: + Location(value) + else: + raise ValueError('Invalid name') try: section, name = args.name.split('.') From 337c86b470d7c00e6c11abdd3e329cdc42525ec0 Mon Sep 17 00:00:00 2001 From: Thomas Waldmann Date: Fri, 9 Mar 2018 18:33:15 +0100 Subject: [PATCH 3/3] recreate --recompress: add metavar, clarify description (cherry picked from commit c0f56ed0392e81b469832c95ed77c0ea584f37c3) --- src/borg/archiver.py | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/src/borg/archiver.py b/src/borg/archiver.py index 4cca8485e..d84f52a8c 100644 --- a/src/borg/archiver.py +++ b/src/borg/archiver.py @@ -3757,12 +3757,17 @@ class Archiver: type=CompressionSpec, default=CompressionSpec('lz4'), help='select compression algorithm, see the output of the ' '"borg help compression" command for details.') - archive_group.add_argument('--recompress', dest='recompress', nargs='?', default='never', const='if-different', - choices=('never', 'if-different', 'always'), - help='recompress data chunks according to ``--compression`` if `if-different`. ' - 'When `always`, chunks that are already compressed that way are not skipped, ' - 'but compressed again. Only the algorithm is considered for `if-different`, ' - 'not the compression level (if any).') + archive_group.add_argument('--recompress', metavar='MODE', dest='recompress', nargs='?', + default='never', const='if-different', choices=('never', 'if-different', 'always'), + help='recompress data chunks according to ``--compression``. ' + 'MODE `if-different`: ' + 'recompress if current compression is with a different compression algorithm ' + '(the level is not considered). ' + 'MODE `always`: ' + 'recompress even if current compression is with the same compression algorithm ' + '(use this to change the compression level). ' + 'MODE `never` (default): ' + 'do not recompress.') archive_group.add_argument('--chunker-params', metavar='PARAMS', dest='chunker_params', type=ChunkerParams, default=CHUNKER_PARAMS, help='specify the chunker parameters (CHUNK_MIN_EXP, CHUNK_MAX_EXP, '