浏览代码

Merge faster pure-Python Tree parser.

Jelmer Vernooij 15 年之前
父节点
当前提交
9c3dff7005
共有 1 个文件被更改,包括 14 次插入21 次删除
  1. 14 21
      dulwich/objects.py

+ 14 - 21
dulwich/objects.py

@@ -375,27 +375,20 @@ class Tag(ShaFile):
 def parse_tree(text):
 def parse_tree(text):
     ret = {}
     ret = {}
     count = 0
     count = 0
-    while count < len(text):
+    l = len(text)
-        mode = 0
+    while count < l:
-        chr = text[count]
+        mode_end = text.index(' ', count)
-        while chr != ' ':
+        mode = int(text[count:mode_end], 8)
-            assert chr >= '0' and chr <= '7', "%s is not a valid mode char" % chr
+
-            mode = (mode << 3) + (ord(chr) - ord('0'))
+        name_end = text.index('\0', mode_end)
-            count += 1
+        name = text[mode_end+1:name_end]
-            chr = text[count]
+
-        count += 1
+        count = name_end+21
-        chr = text[count]
+
-        name = ''
+        sha = text[name_end+1:count]
-        while chr != '\0':
+
-            name += chr
+        ret[name] = (mode, sha_to_hex(sha))
-            count += 1
+
-            chr = text[count]
-        count += 1
-        chr = text[count]
-        sha = text[count:count+20]
-        hexsha = sha_to_hex(sha)
-        ret[name] = (mode, hexsha)
-        count = count + 20
     return ret
     return ret