Skip to content

Commit d39fa19

Browse files
argparsing: add ArgumentParser subclass borg's usual defaults
Borg's ArgumentParser (in borg.helpers.argparsing) now subclasses jsonargparse's ArgumentParser and pre-sets two defaults that every borg parser uses: formatter_class = RawDescriptionHelpFormatter add_help = False
1 parent d9dc0ad commit d39fa19

34 files changed

+91
-317
lines changed

src/borg/archiver/__init__.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -246,7 +246,7 @@ def add_argument(*args, **kwargs):
246246
def build_parser(self):
247247
from ._common import define_common_options
248248

249-
parser = ArgumentParser(prog=self.prog, description="Borg - Deduplicated Backups", add_help=False)
249+
parser = ArgumentParser(prog=self.prog, description="Borg - Deduplicated Backups")
250250
# paths and patterns must have an empty list as default everywhere
251251
parser.common_options = self.CommonOptions(define_common_options)
252252
parser.add_argument(
@@ -255,10 +255,10 @@ def build_parser(self):
255255
parser.add_argument("--cockpit", dest="cockpit", action="store_true", help="Start the Borg TUI")
256256
parser.common_options.add_common_group(parser, provide_defaults=True)
257257

258-
common_parser = ArgumentParser(add_help=False, prog=self.prog)
258+
common_parser = ArgumentParser(prog=self.prog)
259259
parser.common_options.add_common_group(common_parser)
260260

261-
mid_common_parser = ArgumentParser(add_help=False, prog=self.prog)
261+
mid_common_parser = ArgumentParser(prog=self.prog)
262262
parser.common_options.add_common_group(mid_common_parser)
263263

264264
if parser.prog == "borgfs":

src/borg/archiver/analyze_cmd.py

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
from ..constants import * # NOQA
77
from ..helpers import bin_to_hex, Error
88
from ..helpers import ProgressIndicatorPercent
9-
from ..helpers.argparsing import ArgumentParser, RawDescriptionHelpFormatter
9+
from ..helpers.argparsing import ArgumentParser
1010
from ..manifest import Manifest
1111
from ..remote import RemoteRepository
1212
from ..repository import Repository
@@ -126,12 +126,6 @@ def build_parser_analyze(self, subparsers, common_parser, mid_common_parser):
126126
to recreate existing archives without them.
127127
"""
128128
)
129-
subparser = ArgumentParser(
130-
parents=[common_parser],
131-
add_help=False,
132-
description=self.do_analyze.__doc__,
133-
epilog=analyze_epilog,
134-
formatter_class=RawDescriptionHelpFormatter,
135-
)
129+
subparser = ArgumentParser(parents=[common_parser], description=self.do_analyze.__doc__, epilog=analyze_epilog)
136130
subparsers.add_subcommand("analyze", subparser, help="analyze archives")
137131
define_archive_filters_group(subparser)

src/borg/archiver/benchmark_cmd.py

Lines changed: 4 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
from ..helpers import json_print
1212
from ..helpers import msgpack
1313
from ..helpers import get_reset_ec
14-
from ..helpers.argparsing import ArgumentParser, RawDescriptionHelpFormatter
14+
from ..helpers.argparsing import ArgumentParser
1515
from ..item import Item
1616
from ..platform import SyncFile
1717

@@ -346,11 +346,7 @@ def build_parser_benchmarks(self, subparsers, common_parser, mid_common_parser):
346346
benchmark_epilog = process_epilog("These commands do various benchmarks.")
347347

348348
subparser = ArgumentParser(
349-
parents=[mid_common_parser],
350-
add_help=False,
351-
description="benchmark command",
352-
epilog=benchmark_epilog,
353-
formatter_class=RawDescriptionHelpFormatter,
349+
parents=[mid_common_parser], description="benchmark command", epilog=benchmark_epilog
354350
)
355351
subparsers.add_subcommand("benchmark", subparser, help="benchmark command")
356352

@@ -398,11 +394,7 @@ def build_parser_benchmarks(self, subparsers, common_parser, mid_common_parser):
398394
"""
399395
)
400396
subparser = ArgumentParser(
401-
parents=[common_parser],
402-
add_help=False,
403-
description=self.do_benchmark_crud.__doc__,
404-
epilog=bench_crud_epilog,
405-
formatter_class=RawDescriptionHelpFormatter,
397+
parents=[common_parser], description=self.do_benchmark_crud.__doc__, epilog=bench_crud_epilog
406398
)
407399
benchmark_parsers.add_subcommand(
408400
"crud", subparser, help="benchmarks Borg CRUD (create, extract, update, delete)."
@@ -423,11 +415,7 @@ def build_parser_benchmarks(self, subparsers, common_parser, mid_common_parser):
423415
"""
424416
)
425417
subparser = ArgumentParser(
426-
parents=[common_parser],
427-
add_help=False,
428-
description=self.do_benchmark_cpu.__doc__,
429-
epilog=bench_cpu_epilog,
430-
formatter_class=RawDescriptionHelpFormatter,
418+
parents=[common_parser], description=self.do_benchmark_cpu.__doc__, epilog=bench_cpu_epilog
431419
)
432420
benchmark_parsers.add_subcommand("cpu", subparser, help="benchmarks Borg CPU-bound operations.")
433421
subparser.add_argument("--json", action="store_true", help="format output as JSON")

src/borg/archiver/check_cmd.py

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
from ..constants import * # NOQA
44
from ..helpers import set_ec, EXIT_WARNING, CancelledByUser, CommandError, IntegrityError
55
from ..helpers import yes
6-
from ..helpers.argparsing import ArgumentParser, RawDescriptionHelpFormatter
6+
from ..helpers.argparsing import ArgumentParser
77

88
from ..logger import create_logger
99

@@ -182,13 +182,7 @@ def build_parser_check(self, subparsers, common_parser, mid_common_parser):
182182
``borg compact`` would remove the archives' data completely.
183183
"""
184184
)
185-
subparser = ArgumentParser(
186-
parents=[common_parser],
187-
add_help=False,
188-
description=self.do_check.__doc__,
189-
epilog=check_epilog,
190-
formatter_class=RawDescriptionHelpFormatter,
191-
)
185+
subparser = ArgumentParser(parents=[common_parser], description=self.do_check.__doc__, epilog=check_epilog)
192186
subparsers.add_subcommand("check", subparser, help="verify the repository")
193187
subparser.add_argument(
194188
"--repository-only", dest="repo_only", action="store_true", help="only perform repository checks"

src/borg/archiver/compact_cmd.py

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
from ..cache import write_chunkindex_to_repo_cache, build_chunkindex_from_repo
66
from ..cache import files_cache_name, discover_files_cache_names
77
from ..helpers import get_cache_dir
8-
from ..helpers.argparsing import ArgumentParser, RawDescriptionHelpFormatter
8+
from ..helpers.argparsing import ArgumentParser
99
from ..constants import * # NOQA
1010
from ..hashindex import ChunkIndex, ChunkIndexEntry
1111
from ..helpers import set_ec, EXIT_ERROR, format_file_size, bin_to_hex
@@ -257,13 +257,7 @@ def build_parser_compact(self, subparsers, common_parser, mid_common_parser):
257257
thus it cannot compute before/after compaction size statistics).
258258
"""
259259
)
260-
subparser = ArgumentParser(
261-
parents=[common_parser],
262-
add_help=False,
263-
description=self.do_compact.__doc__,
264-
epilog=compact_epilog,
265-
formatter_class=RawDescriptionHelpFormatter,
266-
)
260+
subparser = ArgumentParser(parents=[common_parser], description=self.do_compact.__doc__, epilog=compact_epilog)
267261
subparsers.add_subcommand("compact", subparser, help="compact the repository")
268262
subparser.add_argument(
269263
"-n", "--dry-run", dest="dry_run", action="store_true", help="do not change the repository"

src/borg/archiver/completion_cmd.py

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@
6565
relative_time_marker_validator,
6666
parse_file_size,
6767
)
68-
from ..helpers.argparsing import ArgumentParser, RawDescriptionHelpFormatter
68+
from ..helpers.argparsing import ArgumentParser
6969
from ..helpers.argparsing import _ActionSubCommands
7070
from ..helpers.argparsing import prepare_actions_context, shtab_prepare_actions, bash_compgen_typehint
7171
from ..helpers.time import timestamp
@@ -762,11 +762,7 @@ def build_parser_completion(self, subparsers, common_parser, mid_common_parser):
762762
)
763763

764764
subparser = ArgumentParser(
765-
parents=[common_parser],
766-
add_help=False,
767-
description=self.do_completion.__doc__,
768-
epilog=completion_epilog,
769-
formatter_class=RawDescriptionHelpFormatter,
765+
parents=[common_parser], description=self.do_completion.__doc__, epilog=completion_epilog
770766
)
771767
subparsers.add_subcommand("completion", subparser, help="output shell completion script")
772768
subparser.add_argument(

src/borg/archiver/create_cmd.py

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
from ..helpers import iter_separated
3030
from ..helpers import MakePathSafeAction
3131
from ..helpers import Error, CommandError, BackupWarning, FileChangedWarning
32-
from ..helpers.argparsing import ArgumentParser, RawDescriptionHelpFormatter
32+
from ..helpers.argparsing import ArgumentParser
3333
from ..manifest import Manifest
3434
from ..patterns import PatternMatcher
3535
from ..platform import is_win32
@@ -772,13 +772,7 @@ def build_parser_create(self, subparsers, common_parser, mid_common_parser):
772772
"""
773773
)
774774

775-
subparser = ArgumentParser(
776-
parents=[common_parser],
777-
add_help=False,
778-
description=self.do_create.__doc__,
779-
epilog=create_epilog,
780-
formatter_class=RawDescriptionHelpFormatter,
781-
)
775+
subparser = ArgumentParser(parents=[common_parser], description=self.do_create.__doc__, epilog=create_epilog)
782776
subparsers.add_subcommand("create", subparser, help="create a backup")
783777

784778
# note: --dry-run and --stats are mutually exclusive, but we do not want to abort when

src/borg/archiver/debug_cmd.py

Lines changed: 8 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
from ..helpers import StableDict
1111
from ..helpers import archivename_validator, CompressionSpec
1212
from ..helpers import CommandError, RTError
13-
from ..helpers.argparsing import ArgumentParser, RawDescriptionHelpFormatter
13+
from ..helpers.argparsing import ArgumentParser
1414
from ..manifest import Manifest
1515
from ..platform import get_process_id
1616
from ..repository import Repository, LIST_SCAN_LIMIT, repo_lister
@@ -319,10 +319,8 @@ def build_parser_debug(self, subparsers, common_parser, mid_common_parser):
319319

320320
subparser = ArgumentParser(
321321
parents=[mid_common_parser],
322-
add_help=False,
323322
description="debugging command (not intended for normal use)",
324323
epilog=debug_epilog,
325-
formatter_class=RawDescriptionHelpFormatter,
326324
)
327325
subparsers.add_subcommand("debug", subparser, help="debugging command (not intended for normal use)")
328326

@@ -336,11 +334,7 @@ def build_parser_debug(self, subparsers, common_parser, mid_common_parser):
336334
"""
337335
)
338336
subparser = ArgumentParser(
339-
parents=[mid_common_parser],
340-
add_help=False,
341-
description=self.do_debug_info.__doc__,
342-
epilog=debug_info_epilog,
343-
formatter_class=RawDescriptionHelpFormatter,
337+
parents=[mid_common_parser], description=self.do_debug_info.__doc__, epilog=debug_info_epilog
344338
)
345339
debug_parsers.add_subcommand("info", subparser, help="show system infos for debugging / bug reports (debug)")
346340

@@ -351,10 +345,8 @@ def build_parser_debug(self, subparsers, common_parser, mid_common_parser):
351345
)
352346
subparser = ArgumentParser(
353347
parents=[mid_common_parser],
354-
add_help=False,
355348
description=self.do_debug_dump_archive_items.__doc__,
356349
epilog=debug_dump_archive_items_epilog,
357-
formatter_class=RawDescriptionHelpFormatter,
358350
)
359351
debug_parsers.add_subcommand("dump-archive-items", subparser, help="dump archive items (metadata) (debug)")
360352
subparser.add_argument("name", metavar="NAME", type=archivename_validator, help="specify the archive name")
@@ -366,10 +358,8 @@ def build_parser_debug(self, subparsers, common_parser, mid_common_parser):
366358
)
367359
subparser = ArgumentParser(
368360
parents=[mid_common_parser],
369-
add_help=False,
370361
description=self.do_debug_dump_archive.__doc__,
371362
epilog=debug_dump_archive_epilog,
372-
formatter_class=RawDescriptionHelpFormatter,
373363
)
374364
debug_parsers.add_subcommand("dump-archive", subparser, help="dump decoded archive metadata (debug)")
375365
subparser.add_argument("name", metavar="NAME", type=archivename_validator, help="specify the archive name")
@@ -382,10 +372,8 @@ def build_parser_debug(self, subparsers, common_parser, mid_common_parser):
382372
)
383373
subparser = ArgumentParser(
384374
parents=[mid_common_parser],
385-
add_help=False,
386375
description=self.do_debug_dump_manifest.__doc__,
387376
epilog=debug_dump_manifest_epilog,
388-
formatter_class=RawDescriptionHelpFormatter,
389377
)
390378
debug_parsers.add_subcommand("dump-manifest", subparser, help="dump decoded repository metadata (debug)")
391379
subparser.add_argument("path", metavar="PATH", type=str, help="file to dump data into")
@@ -397,10 +385,8 @@ def build_parser_debug(self, subparsers, common_parser, mid_common_parser):
397385
)
398386
subparser = ArgumentParser(
399387
parents=[mid_common_parser],
400-
add_help=False,
401388
description=self.do_debug_dump_repo_objs.__doc__,
402389
epilog=debug_dump_repo_objs_epilog,
403-
formatter_class=RawDescriptionHelpFormatter,
404390
)
405391
debug_parsers.add_subcommand("dump-repo-objs", subparser, help="dump repo objects (debug)")
406392

@@ -411,10 +397,8 @@ def build_parser_debug(self, subparsers, common_parser, mid_common_parser):
411397
)
412398
subparser = ArgumentParser(
413399
parents=[mid_common_parser],
414-
add_help=False,
415400
description=self.do_debug_search_repo_objs.__doc__,
416401
epilog=debug_search_repo_objs_epilog,
417-
formatter_class=RawDescriptionHelpFormatter,
418402
)
419403
debug_parsers.add_subcommand("search-repo-objs", subparser, help="search repo objects (debug)")
420404
subparser.add_argument(
@@ -430,11 +414,7 @@ def build_parser_debug(self, subparsers, common_parser, mid_common_parser):
430414
"""
431415
)
432416
subparser = ArgumentParser(
433-
parents=[mid_common_parser],
434-
add_help=False,
435-
description=self.do_debug_id_hash.__doc__,
436-
epilog=debug_id_hash_epilog,
437-
formatter_class=RawDescriptionHelpFormatter,
417+
parents=[mid_common_parser], description=self.do_debug_id_hash.__doc__, epilog=debug_id_hash_epilog
438418
)
439419
debug_parsers.add_subcommand("id-hash", subparser, help="compute id-hash for some file content (debug)")
440420
subparser.add_argument(
@@ -448,11 +428,7 @@ def build_parser_debug(self, subparsers, common_parser, mid_common_parser):
448428
"""
449429
)
450430
subparser = ArgumentParser(
451-
parents=[mid_common_parser],
452-
add_help=False,
453-
description=self.do_debug_parse_obj.__doc__,
454-
epilog=debug_parse_obj_epilog,
455-
formatter_class=RawDescriptionHelpFormatter,
431+
parents=[mid_common_parser], description=self.do_debug_parse_obj.__doc__, epilog=debug_parse_obj_epilog
456432
)
457433
debug_parsers.add_subcommand("parse-obj", subparser, help="parse borg object file into meta dict and data")
458434
subparser.add_argument("id", metavar="ID", type=str, help="hex object ID to get from the repo")
@@ -473,11 +449,7 @@ def build_parser_debug(self, subparsers, common_parser, mid_common_parser):
473449
"""
474450
)
475451
subparser = ArgumentParser(
476-
parents=[mid_common_parser],
477-
add_help=False,
478-
description=self.do_debug_format_obj.__doc__,
479-
epilog=debug_format_obj_epilog,
480-
formatter_class=RawDescriptionHelpFormatter,
452+
parents=[mid_common_parser], description=self.do_debug_format_obj.__doc__, epilog=debug_format_obj_epilog
481453
)
482454
debug_parsers.add_subcommand("format-obj", subparser, help="format file and metadata into a Borg object file")
483455
subparser.add_argument("id", metavar="ID", type=str, help="hex object ID to get from the repo")
@@ -510,11 +482,7 @@ def build_parser_debug(self, subparsers, common_parser, mid_common_parser):
510482
"""
511483
)
512484
subparser = ArgumentParser(
513-
parents=[mid_common_parser],
514-
add_help=False,
515-
description=self.do_debug_get_obj.__doc__,
516-
epilog=debug_get_obj_epilog,
517-
formatter_class=RawDescriptionHelpFormatter,
485+
parents=[mid_common_parser], description=self.do_debug_get_obj.__doc__, epilog=debug_get_obj_epilog
518486
)
519487
debug_parsers.add_subcommand("get-obj", subparser, help="get object from repository (debug)")
520488
subparser.add_argument("id", metavar="ID", type=str, help="hex object ID to get from the repo")
@@ -526,11 +494,7 @@ def build_parser_debug(self, subparsers, common_parser, mid_common_parser):
526494
"""
527495
)
528496
subparser = ArgumentParser(
529-
parents=[mid_common_parser],
530-
add_help=False,
531-
description=self.do_debug_put_obj.__doc__,
532-
epilog=debug_put_obj_epilog,
533-
formatter_class=RawDescriptionHelpFormatter,
497+
parents=[mid_common_parser], description=self.do_debug_put_obj.__doc__, epilog=debug_put_obj_epilog
534498
)
535499
debug_parsers.add_subcommand("put-obj", subparser, help="put object to repository (debug)")
536500
subparser.add_argument("id", metavar="ID", type=str, help="hex object ID to put into the repo")
@@ -542,11 +506,7 @@ def build_parser_debug(self, subparsers, common_parser, mid_common_parser):
542506
"""
543507
)
544508
subparser = ArgumentParser(
545-
parents=[mid_common_parser],
546-
add_help=False,
547-
description=self.do_debug_delete_obj.__doc__,
548-
epilog=debug_delete_obj_epilog,
549-
formatter_class=RawDescriptionHelpFormatter,
509+
parents=[mid_common_parser], description=self.do_debug_delete_obj.__doc__, epilog=debug_delete_obj_epilog
550510
)
551511
debug_parsers.add_subcommand("delete-obj", subparser, help="delete object from repository (debug)")
552512
subparser.add_argument(
@@ -560,10 +520,8 @@ def build_parser_debug(self, subparsers, common_parser, mid_common_parser):
560520
)
561521
subparser = ArgumentParser(
562522
parents=[mid_common_parser],
563-
add_help=False,
564523
description=self.do_debug_convert_profile.__doc__,
565524
epilog=debug_convert_profile_epilog,
566-
formatter_class=RawDescriptionHelpFormatter,
567525
)
568526
debug_parsers.add_subcommand(
569527
"convert-profile", subparser, help="convert Borg profile to Python profile (debug)"

src/borg/archiver/delete_cmd.py

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
from ._common import with_repository
44
from ..constants import * # NOQA
55
from ..helpers import format_archive, CommandError, bin_to_hex, archivename_validator
6-
from ..helpers.argparsing import ArgumentParser, RawDescriptionHelpFormatter
6+
from ..helpers.argparsing import ArgumentParser
77
from ..manifest import Manifest
88

99
from ..logger import create_logger
@@ -78,13 +78,7 @@ def build_parser_delete(self, subparsers, common_parser, mid_common_parser):
7878
patterns, see :ref:`borg_patterns`).
7979
"""
8080
)
81-
subparser = ArgumentParser(
82-
parents=[common_parser],
83-
add_help=False,
84-
description=self.do_delete.__doc__,
85-
epilog=delete_epilog,
86-
formatter_class=RawDescriptionHelpFormatter,
87-
)
81+
subparser = ArgumentParser(parents=[common_parser], description=self.do_delete.__doc__, epilog=delete_epilog)
8882
subparsers.add_subcommand("delete", subparser, help="delete archives")
8983
subparser.add_argument(
9084
"-n", "--dry-run", dest="dry_run", action="store_true", help="do not change the repository"

0 commit comments

Comments
 (0)