diff --git a/src/borg/archiver.py b/src/borg/archiver.py index b641b59e01f..8e10a59d319 100644 --- a/src/borg/archiver.py +++ b/src/borg/archiver.py @@ -288,6 +288,17 @@ def do_serve(self, args): storage_quota=args.storage_quota, ).serve() + 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 == 'ssh': + with RemoteRepository(args.location.omit_archive(), 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)}") + @with_repository(create=True, exclusive=True, manifest=False) def do_init(self, args, repository): """Initialize an empty repository""" @@ -4134,6 +4145,19 @@ def define_borg_mount(parser): help='format output as JSON') define_archive_filters_group(subparser) + # borg version + version_epilog = process_epilog(""" + This command displays the borg client version / borg server 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) + subparser.add_argument('location', metavar='REPOSITORY', nargs='?', default='', + type=location_validator(archive=False), + help='repository (used to determine client/server situation)') + # borg init init_epilog = process_epilog(""" This command initializes an empty repository. A repository is a filesystem