mirror of https://github.com/borgbackup/borg.git
88 lines
3.2 KiB
Python
88 lines
3.2 KiB
Python
import argparse
|
|
import textwrap
|
|
from datetime import timedelta
|
|
|
|
from ._common import with_repository
|
|
from ..archive import Archive
|
|
from ..constants import * # NOQA
|
|
from ..helpers import format_timedelta, json_print, basic_json_data
|
|
from ..manifest import Manifest
|
|
|
|
from ..logger import create_logger
|
|
|
|
logger = create_logger()
|
|
|
|
|
|
class InfoMixIn:
|
|
@with_repository(cache=True, compatibility=(Manifest.Operation.READ,))
|
|
def do_info(self, args, repository, manifest, cache):
|
|
"""Show archive details such as disk space used"""
|
|
|
|
args.consider_checkpoints = True
|
|
archive_names = tuple(x.name for x in manifest.archives.list_considering(args))
|
|
|
|
output_data = []
|
|
|
|
for i, archive_name in enumerate(archive_names, 1):
|
|
archive = Archive(manifest, archive_name, cache=cache, iec=args.iec)
|
|
info = archive.info()
|
|
if args.json:
|
|
output_data.append(info)
|
|
else:
|
|
info["duration"] = format_timedelta(timedelta(seconds=info["duration"]))
|
|
print(
|
|
textwrap.dedent(
|
|
"""
|
|
Archive name: {name}
|
|
Archive fingerprint: {id}
|
|
Comment: {comment}
|
|
Hostname: {hostname}
|
|
Username: {username}
|
|
Time (start): {start}
|
|
Time (end): {end}
|
|
Duration: {duration}
|
|
Command line: {command_line}
|
|
Number of files: {stats[nfiles]}
|
|
Original size: {stats[original_size]}
|
|
Deduplicated size: {stats[deduplicated_size]}
|
|
"""
|
|
)
|
|
.strip()
|
|
.format(**info)
|
|
)
|
|
if not args.json and len(archive_names) - i:
|
|
print()
|
|
|
|
if args.json:
|
|
json_print(basic_json_data(manifest, cache=cache, extra={"archives": output_data}))
|
|
|
|
def build_parser_info(self, subparsers, common_parser, mid_common_parser):
|
|
from ._common import process_epilog, define_archive_filters_group
|
|
|
|
info_epilog = process_epilog(
|
|
"""
|
|
This command displays detailed information about the specified archive.
|
|
|
|
Please note that the deduplicated sizes of the individual archives do not add
|
|
up to the deduplicated size of the repository ("all archives"), because the two
|
|
are meaning different things:
|
|
|
|
This archive / deduplicated size = amount of data stored ONLY for this archive
|
|
= unique chunks of this archive.
|
|
All archives / deduplicated size = amount of data stored in the repo
|
|
= all chunks in the repository.
|
|
"""
|
|
)
|
|
subparser = subparsers.add_parser(
|
|
"info",
|
|
parents=[common_parser],
|
|
add_help=False,
|
|
description=self.do_info.__doc__,
|
|
epilog=info_epilog,
|
|
formatter_class=argparse.RawDescriptionHelpFormatter,
|
|
help="show repository or archive information",
|
|
)
|
|
subparser.set_defaults(func=self.do_info)
|
|
subparser.add_argument("--json", action="store_true", help="format output as JSON")
|
|
define_archive_filters_group(subparser)
|