diff options
Diffstat (limited to 'pomu/util/git.py')
-rw-r--r-- | pomu/util/git.py | 16 |
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') |