| 
					
				 | 
			
			
				@@ -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) 
			 |