ソースを参照

support common options on mid-level commands (borg *key* export)

Marian Beermann 8 年 前
コミット
2ab5df0217
1 ファイル変更8 行追加4 行削除
  1. 8 4
      src/borg/archiver.py

+ 8 - 4
src/borg/archiver.py

@@ -1904,7 +1904,7 @@ class Archiver:
             # From lowest precedence to highest precedence:
             # From lowest precedence to highest precedence:
             # An option specified on the parser belonging to index 0 is overridden if the
             # An option specified on the parser belonging to index 0 is overridden if the
             # same option is specified on any parser with a higher index.
             # same option is specified on any parser with a higher index.
-            SUFFIX_PRECEDENCE = ('_maincommand', '_subcommand')
+            SUFFIX_PRECEDENCE = ('_maincommand', '_midcommand', '_subcommand')
 
 
             def __init__(self):
             def __init__(self):
                 from collections import defaultdict
                 from collections import defaultdict
@@ -2040,6 +2040,10 @@ class Archiver:
         common_parser.set_defaults(paths=[], patterns=[])
         common_parser.set_defaults(paths=[], patterns=[])
         parser.common_options.add_common_group(common_parser, '_subcommand')
         parser.common_options.add_common_group(common_parser, '_subcommand')
 
 
+        mid_common_parser = argparse.ArgumentParser(add_help=False, prog=self.prog)
+        mid_common_parser.set_defaults(paths=[], patterns=[])
+        parser.common_options.add_common_group(mid_common_parser, '_midcommand')
+
         subparsers = parser.add_subparsers(title='required arguments', metavar='<command>')
         subparsers = parser.add_subparsers(title='required arguments', metavar='<command>')
 
 
         serve_epilog = process_epilog("""
         serve_epilog = process_epilog("""
@@ -2221,7 +2225,7 @@ class Archiver:
                                help='work slower, but using less space')
                                help='work slower, but using less space')
         self.add_archives_filters_args(subparser)
         self.add_archives_filters_args(subparser)
 
 
-        subparser = subparsers.add_parser('key', parents=[common_parser], add_help=False,
+        subparser = subparsers.add_parser('key', parents=[mid_common_parser], add_help=False,
                                           description="Manage a keyfile or repokey of a repository",
                                           description="Manage a keyfile or repokey of a repository",
                                           epilog="",
                                           epilog="",
                                           formatter_class=argparse.RawDescriptionHelpFormatter,
                                           formatter_class=argparse.RawDescriptionHelpFormatter,
@@ -3221,7 +3225,7 @@ class Archiver:
         in case you ever run into some severe malfunction. Use them only if you know
         in case you ever run into some severe malfunction. Use them only if you know
         what you are doing or if a trusted developer tells you what to do.""")
         what you are doing or if a trusted developer tells you what to do.""")
 
 
-        subparser = subparsers.add_parser('debug', parents=[common_parser], add_help=False,
+        subparser = subparsers.add_parser('debug', parents=[mid_common_parser], add_help=False,
                                           description='debugging command (not intended for normal use)',
                                           description='debugging command (not intended for normal use)',
                                           epilog=debug_epilog,
                                           epilog=debug_epilog,
                                           formatter_class=argparse.RawDescriptionHelpFormatter,
                                           formatter_class=argparse.RawDescriptionHelpFormatter,
@@ -3362,7 +3366,7 @@ class Archiver:
 
 
         benchmark_epilog = process_epilog("These commands do various benchmarks.")
         benchmark_epilog = process_epilog("These commands do various benchmarks.")
 
 
-        subparser = subparsers.add_parser('benchmark', parents=[common_parser], add_help=False,
+        subparser = subparsers.add_parser('benchmark', parents=[mid_common_parser], add_help=False,
                                           description='benchmark command',
                                           description='benchmark command',
                                           epilog=benchmark_epilog,
                                           epilog=benchmark_epilog,
                                           formatter_class=argparse.RawDescriptionHelpFormatter,
                                           formatter_class=argparse.RawDescriptionHelpFormatter,