瀏覽代碼

use version 2 for new archives

but still be able to read v1 archives
for borg transfer.
Thomas Waldmann 3 年之前
父節點
當前提交
d3dfa3be30
共有 3 個文件被更改,包括 6 次插入6 次删除
  1. 4 4
      src/borg/archive.py
  2. 1 1
      src/borg/cache.py
  3. 1 1
      src/borg/testsuite/archiver.py

+ 4 - 4
src/borg/archive.py

@@ -472,7 +472,7 @@ class Archive:
     def _load_meta(self, id):
     def _load_meta(self, id):
         data = self.key.decrypt(id, self.repository.get(id))
         data = self.key.decrypt(id, self.repository.get(id))
         metadata = ArchiveItem(internal_dict=msgpack.unpackb(data))
         metadata = ArchiveItem(internal_dict=msgpack.unpackb(data))
-        if metadata.version != 1:
+        if metadata.version not in (1, 2):  # legacy: still need to read v1 archives
             raise Exception('Unknown archive metadata version')
             raise Exception('Unknown archive metadata version')
         return metadata
         return metadata
 
 
@@ -601,7 +601,7 @@ Utilization of max. archive size: {csize_max:.0%}
         self.start = start
         self.start = start
         self.end = end
         self.end = end
         metadata = {
         metadata = {
-            'version': 1,
+            'version': 2,
             'name': name,
             'name': name,
             'comment': comment or '',
             'comment': comment or '',
             'items': self.items_buffer.chunks,
             'items': self.items_buffer.chunks,
@@ -1748,7 +1748,7 @@ class ArchiveChecker:
                 continue
                 continue
             if not valid_msgpacked_dict(data, archive_keys_serialized):
             if not valid_msgpacked_dict(data, archive_keys_serialized):
                 continue
                 continue
-            if b'cmdline' not in data or b'\xa7version\x01' not in data:
+            if b'cmdline' not in data or b'\xa7version\x02' not in data:
                 continue
                 continue
             try:
             try:
                 archive = msgpack.unpackb(data)
                 archive = msgpack.unpackb(data)
@@ -1989,7 +1989,7 @@ class ArchiveChecker:
                     del self.manifest.archives[info.name]
                     del self.manifest.archives[info.name]
                     continue
                     continue
                 archive = ArchiveItem(internal_dict=msgpack.unpackb(data))
                 archive = ArchiveItem(internal_dict=msgpack.unpackb(data))
-                if archive.version != 1:
+                if archive.version != 2:
                     raise Exception('Unknown archive metadata version')
                     raise Exception('Unknown archive metadata version')
                 archive.cmdline = [safe_decode(arg) for arg in archive.cmdline]
                 archive.cmdline = [safe_decode(arg) for arg in archive.cmdline]
                 items_buffer = ChunkBuffer(self.key)
                 items_buffer = ChunkBuffer(self.key)

+ 1 - 1
src/borg/cache.py

@@ -757,7 +757,7 @@ class LocalCache(CacheStatsMixin):
             csize, data = decrypted_repository.get(archive_id)
             csize, data = decrypted_repository.get(archive_id)
             chunk_idx.add(archive_id, 1, len(data), csize)
             chunk_idx.add(archive_id, 1, len(data), csize)
             archive = ArchiveItem(internal_dict=msgpack.unpackb(data))
             archive = ArchiveItem(internal_dict=msgpack.unpackb(data))
-            if archive.version != 1:
+            if archive.version not in (1, 2):  # legacy
                 raise Exception('Unknown archive metadata version')
                 raise Exception('Unknown archive metadata version')
             sync = CacheSynchronizer(chunk_idx)
             sync = CacheSynchronizer(chunk_idx)
             for item_id, (csize, data) in zip(archive.items, decrypted_repository.get_many(archive.items)):
             for item_id, (csize, data) in zip(archive.items, decrypted_repository.get_many(archive.items)):

+ 1 - 1
src/borg/testsuite/archiver.py

@@ -3873,7 +3873,7 @@ class ArchiverCheckTestCase(ArchiverTestCaseBase):
                 'username': 'bar',
                 'username': 'bar',
                 'name': 'archive1',
                 'name': 'archive1',
                 'time': '2016-12-15T18:49:51.849711',
                 'time': '2016-12-15T18:49:51.849711',
-                'version': 1,
+                'version': 2,
             })
             })
             archive_id = key.id_hash(archive)
             archive_id = key.id_hash(archive)
             repository.put(archive_id, key.encrypt(archive_id, archive))
             repository.put(archive_id, key.encrypt(archive_id, archive))