瀏覽代碼

Merge pull request #7411 from ThomasWaldmann/debug-id-hash-command-1.2

debug id-hash: implement file content id-hash computation, see #7406
TW 2 年之前
父節點
當前提交
cef5b446ac
共有 2 個文件被更改,包括 26 次插入2 次删除
  1. 24 0
      src/borg/archiver.py
  2. 2 2
      src/borg/testsuite/archiver.py

+ 24 - 0
src/borg/archiver.py

@@ -2207,6 +2207,15 @@ class Archiver:
         print("object %s fetched." % hex_id)
         return EXIT_SUCCESS
 
+    @with_repository(compatibility=Manifest.NO_OPERATION_CHECK)
+    def do_debug_id_hash(self, args, repository, manifest, key):
+        """compute id-hash for file contents"""
+        with open(args.path, "rb") as f:
+            data = f.read()
+        id = key.id_hash(data)
+        print(id.hex())
+        return EXIT_SUCCESS
+
     @with_repository(manifest=False, exclusive=True)
     def do_debug_put_obj(self, args, repository):
         """put file contents into the repository"""
@@ -3733,6 +3742,21 @@ class Archiver:
         subparser.add_argument('wanted', metavar='WANTED', type=str,
                                help='term to search the repo for, either 0x1234abcd hex term or a string')
 
+        debug_id_hash_epilog = process_epilog("""
+        This command computes the id-hash for some file content.
+        """)
+        subparser = debug_parsers.add_parser('id-hash', parents=[common_parser], add_help=False,
+                                             description=self.do_debug_id_hash.__doc__,
+                                             epilog=debug_id_hash_epilog,
+                                             formatter_class=argparse.RawDescriptionHelpFormatter,
+                                             help='compute id-hash for some file content (debug)')
+        subparser.set_defaults(func=self.do_debug_id_hash)
+        subparser.add_argument('location', metavar='REPOSITORY',
+                               type=location_validator(archive=False),
+                               help='repository to use')
+        subparser.add_argument('path', metavar='PATH', type=str,
+                               help='content for which the id-hash shall get computed')
+
         debug_get_obj_epilog = process_epilog("""
         This command gets an object from the repository.
         """)

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

@@ -2909,8 +2909,8 @@ class ArchiverTestCase(ArchiverTestCaseBase):
         self.cmd('init', '--encryption=repokey', self.repository_location)
         data = b'some data'
         self.create_regular_file('file', contents=data)
-        # TODO: to compute the correct hexkey, we need: borg debug id-hash file
-        id_hash = "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"  # 256bit = 64 hex digits
+        output = self.cmd('debug', 'id-hash', self.repository_location, 'input/file')
+        id_hash = output.strip()
         output = self.cmd('debug', 'put-obj', self.repository_location, id_hash, 'input/file')
         assert id_hash in output
         output = self.cmd('debug', 'get-obj', self.repository_location, id_hash, 'output/file')