浏览代码

Merge pull request #7057 from ThomasWaldmann/fix-recreate-fixed-chunker-1.2

get_chunker: fix missing sparse=False argument, fixes #7056
TW 2 年之前
父节点
当前提交
773f3bff77
共有 2 个文件被更改,包括 17 次插入2 次删除
  1. 2 2
      src/borg/archive.py
  2. 15 0
      src/borg/testsuite/archiver.py

+ 2 - 2
src/borg/archive.py

@@ -349,7 +349,7 @@ class ChunkBuffer:
         self.packer = msgpack.Packer()
         self.packer = msgpack.Packer()
         self.chunks = []
         self.chunks = []
         self.key = key
         self.key = key
-        self.chunker = get_chunker(*chunker_params, seed=self.key.chunk_seed)
+        self.chunker = get_chunker(*chunker_params, seed=self.key.chunk_seed, sparse=False)
 
 
     def add(self, item):
     def add(self, item):
         self.buffer.write(self.packer.pack(item.as_dict()))
         self.buffer.write(self.packer.pack(item.as_dict()))
@@ -2313,7 +2313,7 @@ class ArchiveRecreater:
             cache=self.cache, key=self.key,
             cache=self.cache, key=self.key,
             add_item=target.add_item, write_checkpoint=target.write_checkpoint,
             add_item=target.add_item, write_checkpoint=target.write_checkpoint,
             checkpoint_interval=self.checkpoint_interval, rechunkify=target.recreate_rechunkify).process_file_chunks
             checkpoint_interval=self.checkpoint_interval, rechunkify=target.recreate_rechunkify).process_file_chunks
-        target.chunker = get_chunker(*target.chunker_params, seed=self.key.chunk_seed)
+        target.chunker = get_chunker(*target.chunker_params, seed=self.key.chunk_seed, sparse=False)
         return target
         return target
 
 
     def create_target_archive(self, name):
     def create_target_archive(self, name):

+ 15 - 0
src/borg/testsuite/archiver.py

@@ -2992,6 +2992,21 @@ class ArchiverTestCase(ArchiverTestCaseBase):
         assert not int(self.cmd('list', self.repository_location + '::test1', 'input/large_file',
         assert not int(self.cmd('list', self.repository_location + '::test1', 'input/large_file',
                                 '--format', '{unique_chunks}'))
                                 '--format', '{unique_chunks}'))
 
 
+    def test_recreate_fixed_rechunkify(self):
+        with open(os.path.join(self.input_path, 'file'), 'wb') as fd:
+            fd.write(b'a' * 8192)
+        self.cmd('init', '--encryption=repokey', self.repository_location)
+        self.cmd('create', '--chunker-params', '7,9,8,128', self.repository_location + '::test', 'input')
+        output = self.cmd('list', self.repository_location + '::test', 'input/file',
+                          '--format', '{num_chunks}')
+        num_chunks = int(output)
+        assert num_chunks > 2
+        self.cmd('recreate', self.repository_location, '--chunker-params', 'fixed,4096')
+        output = self.cmd('list', self.repository_location + '::test', 'input/file',
+                          '--format', '{num_chunks}')
+        num_chunks = int(output)
+        assert num_chunks == 2
+
     def test_recreate_recompress(self):
     def test_recreate_recompress(self):
         self.create_regular_file('compressible', size=10000)
         self.create_regular_file('compressible', size=10000)
         self.cmd('init', '--encryption=repokey', self.repository_location)
         self.cmd('init', '--encryption=repokey', self.repository_location)