mirror of
https://github.com/borgbackup/borg.git
synced 2025-01-01 12:45:34 +00:00
Merge pull request #8082 from ThomasWaldmann/remote-version-master
implement "borg version", fixes #7829
This commit is contained in:
commit
5ee1eeaa4f
2 changed files with 68 additions and 0 deletions
|
@ -90,6 +90,7 @@ def get_func(args):
|
|||
from .serve_cmd import ServeMixIn
|
||||
from .tar_cmds import TarMixIn
|
||||
from .transfer_cmd import TransferMixIn
|
||||
from .version_cmd import VersionMixIn
|
||||
|
||||
|
||||
class Archiver(
|
||||
|
@ -119,6 +120,7 @@ class Archiver(
|
|||
ServeMixIn,
|
||||
TarMixIn,
|
||||
TransferMixIn,
|
||||
VersionMixIn,
|
||||
):
|
||||
def __init__(self, lock_wait=None, prog=None):
|
||||
self.exit_code = EXIT_SUCCESS
|
||||
|
@ -347,6 +349,7 @@ def build_parser(self):
|
|||
self.build_parser_serve(subparsers, common_parser, mid_common_parser)
|
||||
self.build_parser_tar(subparsers, common_parser, mid_common_parser)
|
||||
self.build_parser_transfer(subparsers, common_parser, mid_common_parser)
|
||||
self.build_parser_version(subparsers, common_parser, mid_common_parser)
|
||||
return parser
|
||||
|
||||
def get_args(self, argv, cmd):
|
||||
|
|
65
src/borg/archiver/version_cmd.py
Normal file
65
src/borg/archiver/version_cmd.py
Normal file
|
@ -0,0 +1,65 @@
|
|||
import argparse
|
||||
|
||||
from .. import __version__
|
||||
from ..constants import * # NOQA
|
||||
from ..helpers import EXIT_SUCCESS
|
||||
from ..remote import RemoteRepository
|
||||
|
||||
from ..logger import create_logger
|
||||
|
||||
logger = create_logger()
|
||||
|
||||
|
||||
class VersionMixIn:
|
||||
def do_version(self, args):
|
||||
"""Display the borg client / borg server version"""
|
||||
from borg.version import parse_version, format_version
|
||||
|
||||
client_version = parse_version(__version__)
|
||||
if args.location.proto in ("ssh", "socket"):
|
||||
with RemoteRepository(args.location, lock=False, args=args) as repository:
|
||||
server_version = repository.server_version
|
||||
else:
|
||||
server_version = client_version
|
||||
print(f"{format_version(client_version)} / {format_version(server_version)}")
|
||||
return EXIT_SUCCESS
|
||||
|
||||
def build_parser_version(self, subparsers, common_parser, mid_common_parser):
|
||||
from ._common import process_epilog
|
||||
|
||||
version_epilog = process_epilog(
|
||||
"""
|
||||
This command displays the borg client version / borg server version.
|
||||
|
||||
If a local repo is given, the client code directly accesses the repository,
|
||||
thus we show the client version also as the server version.
|
||||
|
||||
If a remote repo is given (e.g. ssh:), the remote borg is queried and
|
||||
its version is displayed as the server version.
|
||||
|
||||
Examples::
|
||||
|
||||
# local repo (client uses 1.4.0 alpha version)
|
||||
$ borg version /mnt/backup
|
||||
1.4.0a / 1.4.0a
|
||||
|
||||
# remote repo (client uses 1.4.0 alpha, server uses 1.2.7 release)
|
||||
$ borg version ssh://borg@borgbackup:repo
|
||||
1.4.0a / 1.2.7
|
||||
|
||||
Due to the version tuple format used in borg client/server negotiation, only
|
||||
a simplified version is displayed (as provided by borg.version.format_version).
|
||||
|
||||
There is also borg --version to display a potentially more precise client version.
|
||||
"""
|
||||
)
|
||||
subparser = subparsers.add_parser(
|
||||
"version",
|
||||
parents=[common_parser],
|
||||
add_help=False,
|
||||
description=self.do_version.__doc__,
|
||||
epilog=version_epilog,
|
||||
formatter_class=argparse.RawDescriptionHelpFormatter,
|
||||
help="display borg client version / borg server version",
|
||||
)
|
||||
subparser.set_defaults(func=self.do_version)
|
Loading…
Reference in a new issue