瀏覽代碼

Inline parse_commit.

Jelmer Vernooij 2 年之前
父節點
當前提交
25935de789
共有 2 個文件被更改,包括 36 次插入11 次删除
  1. 3 0
      NEWS
  2. 33 11
      dulwich/objects.py

+ 3 - 0
NEWS

@@ -3,6 +3,9 @@
  * Add support for ``worktreeconfig`` extension.
    (Jelmer Vernooij)
 
+ * Deprecate ``dulwich.objects.parse_commit``.
+   (Jelmer Vernooij)
+
 0.21.2	2023-01-18
 
  * Fix early file close bug in ``dulwich.pack.extend_pack``.

+ 33 - 11
dulwich/objects.py

@@ -39,6 +39,7 @@ from typing import (
 import zlib
 from _hashlib import HASH
 from hashlib import sha1
+import warnings
 
 from dulwich.errors import (
     ChecksumMismatch,
@@ -1291,6 +1292,7 @@ def parse_commit(chunks):
     Returns: Tuple of (tree, parents, author_info, commit_info,
         encoding, mergetag, gpgsig, message, extra)
     """
+    warnings.warn('parse_commit will be removed in 0.22', DeprecationWarning)
     parents = []
     extra = []
     tree = None
@@ -1376,17 +1378,37 @@ class Commit(ShaFile):
         return commit
 
     def _deserialize(self, chunks):
-        (
-            self._tree,
-            self._parents,
-            author_info,
-            commit_info,
-            self._encoding,
-            self._mergetag,
-            self._gpgsig,
-            self._message,
-            self._extra,
-        ) = parse_commit(chunks)
+        self._parents = []
+        self._extra = []
+        self._tree= None
+        author_info = (None, None, (None, None))
+        commit_info = (None, None, (None, None))
+        self._encoding = None
+        self._mergetag = []
+        self._message = None
+        self._gpgsig = None
+
+        for field, value in _parse_message(chunks):
+            # TODO(jelmer): Enforce ordering
+            if field == _TREE_HEADER:
+                self._tree = value
+            elif field == _PARENT_HEADER:
+                self._parents.append(value)
+            elif field == _AUTHOR_HEADER:
+                author_info = parse_time_entry(value)
+            elif field == _COMMITTER_HEADER:
+                commit_info = parse_time_entry(value)
+            elif field == _ENCODING_HEADER:
+                self._encoding = value
+            elif field == _MERGETAG_HEADER:
+                self._mergetag.append(Tag.from_string(value + b"\n"))
+            elif field == _GPGSIG_HEADER:
+                self._gpgsig = value
+            elif field is None:
+                self._message = value
+            else:
+                self._extra.append((field, value))
+
         (
             self._author,
             self._author_time,