aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'pomu/util/git.py')
-rw-r--r--pomu/util/git.py16
1 files changed, 10 insertions, 6 deletions
diff --git a/pomu/util/git.py b/pomu/util/git.py
index 611b27c..985087c 100644
--- a/pomu/util/git.py
+++ b/pomu/util/git.py
@@ -5,10 +5,12 @@ import zlib
from pomu.util.result import Result
-def parse_tree(blob, path=''):
+def parse_tree(blob, path=b''):
"""Parses a git tree"""
res = []
leng, _, tree = blob.partition(b'\0')
+ if path is str:
+ path = path.encode('utf-8')
if not tree:
return Result.Err('Invalid tree')
while len(tree) > 0:
@@ -19,15 +21,15 @@ def parse_tree(blob, path=''):
if not name or not sha:
return Result.Err()
is_dir = mode[0:1] != b'1'
- res.append((is_dir, sha, path.encode('utf-8') + b'/' + name))
+ res.append((is_dir, sha, path + b'/' + name))
return Result.Ok(res)
def parse_blob(blob):
"""Parses a git blob"""
- data = zlib.decompress(blob)
- leng, _, data = data.partition('\0')
+ leng, _, data = blob.partition(b'\0')
if not leng or not data:
return Result.Err()
+ return Result.Ok(data)
def commit_head(blob):
if not blob[7:] == 'commit ':
@@ -38,11 +40,13 @@ def commit_head(blob):
return Result.Err()
return tid[5:]
-def parse_object(obj):
+def parse_object(obj, tpath=b''):
"""Parses a git object"""
+ if tpath is str:
+ tpath = tpath.encode('utf-8')
data = zlib.decompress(obj)
if data[0:5] == b'blob ':
return parse_blob(data[5:])
elif data[0:5] == b'tree ':
- return parse_tree(data[5:])
+ return parse_tree(data[5:], tpath)
return Result.Err('Unsupported object type')