From add73745c6f56d7ea967986612af07c0c6ae344f Mon Sep 17 00:00:00 2001 From: Thomas Waldmann Date: Sat, 9 Jul 2022 01:35:13 +0200 Subject: [PATCH] move rlist command to archiver.rlist --- setup.cfg | 1 + src/borg/archiver/__init__.py | 108 +----------------------------- src/borg/archiver/rlist.py | 120 ++++++++++++++++++++++++++++++++++ 3 files changed, 124 insertions(+), 105 deletions(-) create mode 100644 src/borg/archiver/rlist.py diff --git a/setup.cfg b/setup.cfg index 4316af2a7..bf7dbb322 100644 --- a/setup.cfg +++ b/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 diff --git a/src/borg/archiver/__init__.py b/src/borg/archiver/__init__.py index f941c4d7a..ef6ca28e1 100644 --- a/src/borg/archiver/__init__.py +++ b/src/borg/archiver/__init__.py @@ -38,7 +38,6 @@ 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 @@ def get_func(args): 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 @@ def do_extract(self, args, repository, manifest, key, archive): 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 @@ def define_common_options(add_common_option): 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 @@ def define_common_options(add_common_option): 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 - `_. - - 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( """ diff --git a/src/borg/archiver/rlist.py b/src/borg/archiver/rlist.py new file mode 100644 index 000000000..02012320c --- /dev/null +++ b/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 + `_. + + 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)