Explorar el Código

Merge pull request #7340 from ThomasWaldmann/fix-recreate-rechunkify-master

recreate: --chunker-params must default to None, fixes #7337
TW hace 2 años
padre
commit
d90ebc8bef
Se han modificado 2 ficheros con 31 adiciones y 4 borrados
  1. 4 4
      src/borg/archiver/recreate_cmd.py
  2. 27 0
      src/borg/testsuite/archiver/recreate_cmd.py

+ 4 - 4
src/borg/archiver/recreate_cmd.py

@@ -219,10 +219,10 @@ class RecreateMixIn:
             dest="chunker_params",
             action=Highlander,
             type=ChunkerParams,
-            default=CHUNKER_PARAMS,
-            help="specify the chunker parameters (ALGO, CHUNK_MIN_EXP, CHUNK_MAX_EXP, "
-            "HASH_MASK_BITS, HASH_WINDOW_SIZE) or `default` to use the current defaults. "
-            "default: %s,%d,%d,%d,%d" % CHUNKER_PARAMS,
+            default=None,
+            help="rechunk using given chunker parameters (ALGO, CHUNK_MIN_EXP, CHUNK_MAX_EXP, "
+            "HASH_MASK_BITS, HASH_WINDOW_SIZE) or `default` to use the chunker defaults. "
+            "default: do not rechunk",
         )
 
         subparser.add_argument(

+ 27 - 0
src/borg/testsuite/archiver/recreate_cmd.py

@@ -171,6 +171,33 @@ class ArchiverTestCase(ArchiverTestCaseBase):
         num_chunks = int(output)
         assert num_chunks == 2
 
+    def test_recreate_no_rechunkify(self):
+        with open(os.path.join(self.input_path, "file"), "wb") as fd:
+            fd.write(b"a" * 8192)
+        self.cmd(f"--repo={self.repository_location}", "rcreate", RK_ENCRYPTION)
+        # first create an archive with non-default chunker params:
+        self.cmd(f"--repo={self.repository_location}", "create", "test", "input", "--chunker-params", "7,9,8,128")
+        output = self.cmd(
+            f"--repo={self.repository_location}", "list", "test", "input/file", "--format", "{num_chunks}"
+        )
+        num_chunks = int(output)
+        # now recreate the archive and do NOT specify chunker params:
+        output = self.cmd(
+            f"--repo={self.repository_location}",
+            "recreate",
+            "--debug",
+            "--exclude",
+            "filename_never_matches",
+            "-a",
+            "test",
+        )
+        assert "Rechunking" not in output  # we did not give --chunker-params, so it must not rechunk!
+        output = self.cmd(
+            f"--repo={self.repository_location}", "list", "test", "input/file", "--format", "{num_chunks}"
+        )
+        num_chunks_after_recreate = int(output)
+        assert num_chunks == num_chunks_after_recreate
+
     def test_recreate_recompress(self):
         self.create_regular_file("compressible", size=10000)
         self.cmd(f"--repo={self.repository_location}", "rcreate", RK_ENCRYPTION)