Browse Source

Merge pull request #6827 from ThomasWaldmann/repo-info-borg2

check repo version / borg rinfo extended
TW 2 years ago
parent
commit
01d40057db
3 changed files with 26 additions and 0 deletions
  1. 9 0
      src/borg/archiver.py
  2. 9 0
      src/borg/remote.py
  3. 8 0
      src/borg/repository.py

+ 9 - 0
src/borg/archiver.py

@@ -191,6 +191,9 @@ def with_repository(fake=False, invert_fake=False, create=False, lock=True,
                                         args=args)
 
             with repository:
+                if repository.version not in (2, ):
+                    raise Error("This borg version only accepts version 2 repos for -r/--repo. "
+                                "You can use 'borg transfer' to copy archives from old to new repos.")
                 if manifest or cache:
                     kwargs['manifest'], kwargs['key'] = Manifest.load(repository, compatibility)
                     if 'compression' in args:
@@ -233,6 +236,8 @@ def with_other_repository(manifest=False, key=False, cache=False, compatibility=
                                         args=args)
 
             with repository:
+                if repository.version not in (1, 2, ):
+                    raise Error("This borg version only accepts version 1 or 2 repos for --other-repo.")
                 kwargs['other_repository'] = repository
                 if manifest or key or cache:
                     manifest_, key_ = Manifest.load(repository, compatibility)
@@ -1692,12 +1697,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: