2
0
Эх сурвалжийг харах

move rlist command to archiver.rlist

Thomas Waldmann 2 жил өмнө
parent
commit
add73745c6

+ 1 - 0
setup.cfg

@@ -127,6 +127,7 @@ per_file_ignores =
     src/borg/archiver/keys.py:F405
     src/borg/archiver/prune.py:F405
     src/borg/archiver/rdelete.py:F405
+    src/borg/archiver/rlist.py:E501
     src/borg/archiver/tar.py:F405
     src/borg/cache.py:E127,E128,E402,E501,E722,W504
     src/borg/fuse.py:E402,E501,E722,W504

+ 3 - 105
src/borg/archiver/__init__.py

@@ -38,7 +38,6 @@ try:
     from ..helpers import Error, set_ec
     from ..helpers import location_validator, archivename_validator, ChunkerParams, Location
     from ..helpers import NameSpec, CommentSpec, FilesCacheMode
-    from ..helpers import BaseFormatter, ArchiveFormatter
     from ..helpers import format_timedelta, format_file_size
     from ..helpers import remove_surrogates, bin_to_hex, eval_escapes
     from ..helpers import timestamp
@@ -104,6 +103,7 @@ from .prune import PruneMixIn
 from .rename import RenameMixIn
 from .rcreate import RCreateMixIn
 from .rdelete import RDeleteMixIn
+from .rlist import RListMixIn
 from .serve import ServeMixIn
 from .tar import TarMixIn
 from .transfer import TransferMixIn
@@ -127,6 +127,7 @@ class Archiver(
     RenameMixIn,
     RCreateMixIn,
     RDeleteMixIn,
+    RListMixIn,
     ServeMixIn,
     TransferMixIn,
 ):
@@ -701,30 +702,6 @@ class Archiver(
             pi.finish()
         return self.exit_code
 
-    @with_repository(compatibility=(Manifest.Operation.READ,))
-    def do_rlist(self, args, repository, manifest, key):
-        """List the archives contained in a repository"""
-        if args.format is not None:
-            format = args.format
-        elif args.short:
-            format = "{archive}{NL}"
-        else:
-            format = "{archive:<36} {time} [{id}]{NL}"
-        formatter = ArchiveFormatter(format, repository, manifest, key, json=args.json, iec=args.iec)
-
-        output_data = []
-
-        for archive_info in manifest.archives.list_considering(args):
-            if args.json:
-                output_data.append(formatter.get_item_data(archive_info))
-            else:
-                sys.stdout.write(formatter.format_item(archive_info))
-
-        if args.json:
-            json_print(basic_json_data(manifest, extra={"archives": output_data}))
-
-        return self.exit_code
-
     @with_repository(cache=True, compatibility=(Manifest.Operation.READ,))
     def do_rinfo(self, args, repository, manifest, key, cache):
         """Show repository infos"""
@@ -1574,6 +1551,7 @@ class Archiver(
         self.build_parser_delete(subparsers, common_parser, mid_common_parser)
         self.build_parser_help(subparsers, common_parser, mid_common_parser, parser)
         self.build_parser_rdelete(subparsers, common_parser, mid_common_parser, parser)
+        self.build_parser_rlist(subparsers, common_parser, mid_common_parser)
 
         # borg extract
         extract_epilog = process_epilog(
@@ -1707,86 +1685,6 @@ class Archiver(
         self.build_parser_keys(subparsers, common_parser, mid_common_parser)
         self.build_parser_rcreate(subparsers, common_parser, mid_common_parser)
 
-        # borg rlist
-        rlist_epilog = (
-            process_epilog(
-                """
-        This command lists the archives contained in a repository.
-
-        .. man NOTES
-
-        The FORMAT specifier syntax
-        +++++++++++++++++++++++++++
-
-        The ``--format`` option uses python's `format string syntax
-        <https://docs.python.org/3.9/library/string.html#formatstrings>`_.
-
-        Examples:
-        ::
-
-            $ borg rlist --format '{archive}{NL}'
-            ArchiveFoo
-            ArchiveBar
-            ...
-
-            # {VAR:NUMBER} - pad to NUMBER columns.
-            # Strings are left-aligned, numbers are right-aligned.
-            # Note: time columns except ``isomtime``, ``isoctime`` and ``isoatime`` cannot be padded.
-            $ borg rlist --format '{archive:36} {time} [{id}]{NL}' /path/to/repo
-            ArchiveFoo                           Thu, 2021-12-09 10:22:28 [0b8e9a312bef3f2f6e2d0fc110c196827786c15eba0188738e81697a7fa3b274]
-            ...
-
-        The following keys are always available:
-
-
-        """
-            )
-            + BaseFormatter.keys_help()
-            + textwrap.dedent(
-                """
-
-        Keys available only when listing archives in a repository:
-
-        """
-            )
-            + ArchiveFormatter.keys_help()
-        )
-        subparser = subparsers.add_parser(
-            "rlist",
-            parents=[common_parser],
-            add_help=False,
-            description=self.do_rlist.__doc__,
-            epilog=rlist_epilog,
-            formatter_class=argparse.RawDescriptionHelpFormatter,
-            help="list repository contents",
-        )
-        subparser.set_defaults(func=self.do_rlist)
-        subparser.add_argument(
-            "--consider-checkpoints",
-            action="store_true",
-            dest="consider_checkpoints",
-            help="Show checkpoint archives in the repository contents list (default: hidden).",
-        )
-        subparser.add_argument(
-            "--short", dest="short", action="store_true", help="only print the archive names, nothing else"
-        )
-        subparser.add_argument(
-            "--format",
-            metavar="FORMAT",
-            dest="format",
-            help="specify format for archive listing " '(default: "{archive:<36} {time} [{id}]{NL}")',
-        )
-        subparser.add_argument(
-            "--json",
-            action="store_true",
-            help="Format output as JSON. "
-            "The form of ``--format`` is ignored, "
-            "but keys used in it are added to the JSON output. "
-            "Some keys are always present. Note: JSON can only represent text. "
-            'A "barchive" key is therefore not available.',
-        )
-        define_archive_filters_group(subparser)
-
         # borg recreate
         recreate_epilog = process_epilog(
             """

+ 120 - 0
src/borg/archiver/rlist.py

@@ -0,0 +1,120 @@
+import argparse
+import textwrap
+import sys
+
+from .common import with_repository
+from ..constants import *  # NOQA
+from ..helpers import Manifest
+from ..helpers import BaseFormatter, ArchiveFormatter, json_print, basic_json_data
+
+from ..logger import create_logger
+
+logger = create_logger()
+
+
+class RListMixIn:
+    @with_repository(compatibility=(Manifest.Operation.READ,))
+    def do_rlist(self, args, repository, manifest, key):
+        """List the archives contained in a repository"""
+        if args.format is not None:
+            format = args.format
+        elif args.short:
+            format = "{archive}{NL}"
+        else:
+            format = "{archive:<36} {time} [{id}]{NL}"
+        formatter = ArchiveFormatter(format, repository, manifest, key, json=args.json, iec=args.iec)
+
+        output_data = []
+
+        for archive_info in manifest.archives.list_considering(args):
+            if args.json:
+                output_data.append(formatter.get_item_data(archive_info))
+            else:
+                sys.stdout.write(formatter.format_item(archive_info))
+
+        if args.json:
+            json_print(basic_json_data(manifest, extra={"archives": output_data}))
+
+        return self.exit_code
+
+    def build_parser_rlist(self, subparsers, common_parser, mid_common_parser):
+        from .common import process_epilog, define_archive_filters_group
+
+        rlist_epilog = (
+            process_epilog(
+                """
+        This command lists the archives contained in a repository.
+
+        .. man NOTES
+
+        The FORMAT specifier syntax
+        +++++++++++++++++++++++++++
+
+        The ``--format`` option uses python's `format string syntax
+        <https://docs.python.org/3.9/library/string.html#formatstrings>`_.
+
+        Examples:
+        ::
+
+            $ borg rlist --format '{archive}{NL}'
+            ArchiveFoo
+            ArchiveBar
+            ...
+
+            # {VAR:NUMBER} - pad to NUMBER columns.
+            # Strings are left-aligned, numbers are right-aligned.
+            # Note: time columns except ``isomtime``, ``isoctime`` and ``isoatime`` cannot be padded.
+            $ borg rlist --format '{archive:36} {time} [{id}]{NL}' /path/to/repo
+            ArchiveFoo                           Thu, 2021-12-09 10:22:28 [0b8e9a312bef3f2f6e2d0fc110c196827786c15eba0188738e81697a7fa3b274]
+            ...
+
+        The following keys are always available:
+
+
+        """
+            )
+            + BaseFormatter.keys_help()
+            + textwrap.dedent(
+                """
+
+        Keys available only when listing archives in a repository:
+
+        """
+            )
+            + ArchiveFormatter.keys_help()
+        )
+        subparser = subparsers.add_parser(
+            "rlist",
+            parents=[common_parser],
+            add_help=False,
+            description=self.do_rlist.__doc__,
+            epilog=rlist_epilog,
+            formatter_class=argparse.RawDescriptionHelpFormatter,
+            help="list repository contents",
+        )
+        subparser.set_defaults(func=self.do_rlist)
+        subparser.add_argument(
+            "--consider-checkpoints",
+            action="store_true",
+            dest="consider_checkpoints",
+            help="Show checkpoint archives in the repository contents list (default: hidden).",
+        )
+        subparser.add_argument(
+            "--short", dest="short", action="store_true", help="only print the archive names, nothing else"
+        )
+        subparser.add_argument(
+            "--format",
+            metavar="FORMAT",
+            dest="format",
+            help="specify format for archive listing " '(default: "{archive:<36} {time} [{id}]{NL}")',
+        )
+        subparser.add_argument(
+            "--json",
+            action="store_true",
+            help="Format output as JSON. "
+            "The form of ``--format`` is ignored, "
+            "but keys used in it are added to the JSON output. "
+            "Some keys are always present. Note: JSON can only represent text. "
+            'A "barchive" key is therefore not available.',
+        )
+        define_archive_filters_group(subparser)