Browse Source

add repository.info(), giving some basic repo infos

there was no way to tell the repository version for a remote repo.
borg 2 needs that to reject doing most operations with an old repo,
except the stuff needed for borg transfer.
Thomas Waldmann 2 years ago
parent
commit
b0b5a2fd27
3 changed files with 21 additions and 0 deletions
  1. 4 0
      src/borg/archiver.py
  2. 9 0
      src/borg/remote.py
  3. 8 0
      src/borg/repository.py

+ 4 - 0
src/borg/archiver.py

@@ -1692,12 +1692,16 @@ class Archiver:
             print(textwrap.dedent("""
             Repository ID: {id}
             Location: {location}
+            Repository version: {version}
+            Append only: {append_only}
             {encryption}
             Cache: {cache.path}
             Security dir: {security_dir}
             """).strip().format(
                 id=bin_to_hex(repository.id),
                 location=repository._location.canonical_path(),
+                version=repository.version,
+                append_only=repository.append_only,
                 **info))
             print(str(cache))
         return self.exit_code

+ 9 - 0
src/borg/remote.py

@@ -133,6 +133,7 @@ compatMap = {
     'break_lock': (),
     'negotiate': ('client_data', ),
     'open': ('path', 'create', 'lock_wait', 'lock', 'exclusive', 'append_only', ),
+    'info': (),
     'get_free_nonce': (),
     'commit_nonce_reservation': ('next_unreserved', 'start_nonce', ),
 }
@@ -150,6 +151,7 @@ class RepositoryServer:  # pragma: no cover
         'scan',
         'negotiate',
         'open',
+        'info',
         'put',
         'rollback',
         'save_key',
@@ -580,6 +582,9 @@ class RemoteRepository:
                 self.id = self.open(path=self.location.path, create=create, lock_wait=lock_wait,
                                     lock=lock, exclusive=exclusive, append_only=append_only,
                                     make_parent_dirs=make_parent_dirs)
+                info = self.info()
+                self.version = info['version']
+                self.append_only = info['append_only']
 
             if self.dictFormat:
                 do_open()
@@ -898,6 +903,10 @@ This problem will go away as soon as the server has been upgraded to 1.0.7+.
              make_parent_dirs=False):
         """actual remoting is done via self.call in the @api decorator"""
 
+    @api(since=parse_version('2.0.0a3'))
+    def info(self):
+        """actual remoting is done via self.call in the @api decorator"""
+
     @api(since=parse_version('1.0.0'),
          max_duration={'since': parse_version('1.2.0a4'), 'previously': 0})
     def check(self, repair=False, save_space=False, max_duration=0):

+ 8 - 0
src/borg/repository.py

@@ -491,6 +491,14 @@ class Repository:
                 self.close()
                 raise self.AtticRepository(path)
 
+    def info(self):
+        """return some infos about the repo (must be opened first)"""
+        return dict(
+            id=self.id,
+            version=self.version,
+            append_only=self.append_only,
+        )
+
     def close(self):
         if self.lock:
             if self.io: