summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim Van Steenburgh <tvansteenburgh@gmail.com>2013-04-17 18:21:53 +0000
committerTim Van Steenburgh <tvansteenburgh@gmail.com>2013-04-17 18:21:53 +0000
commitf122a6aa3eb386914faa58ef3bf336f27b02fab0 (patch)
tree53b5126a5c27450514c2e41c186f8c9544465c12
parentdb82455bd91ce00c22f6ee2b0dc622f117f07137 (diff)
downloadgitpython-f122a6aa3eb386914faa58ef3bf336f27b02fab0.tar.gz
Return bytes if object name can't be utf8-decoded
Signed-off-by: Tim Van Steenburgh <tvansteenburgh@gmail.com>
-rw-r--r--git/objects/fun.py10
-rw-r--r--git/test/test_fun.py5
2 files changed, 12 insertions, 3 deletions
diff --git a/git/objects/fun.py b/git/objects/fun.py
index 9b0a377c..8c380644 100644
--- a/git/objects/fun.py
+++ b/git/objects/fun.py
@@ -70,9 +70,13 @@ def tree_entries_from_data(data):
# default encoding for strings in git is utf8
# Only use the respective unicode object if the byte stream was encoded
name = data[ns:i]
- name_enc = name.decode("utf-8")
- if len(name) > len(name_enc):
- name = name_enc
+ try:
+ name_enc = name.decode("utf-8")
+ except UnicodeDecodeError:
+ pass
+ else:
+ if len(name) > len(name_enc):
+ name = name_enc
# END handle encoding
# byte is NULL, get next 20
diff --git a/git/test/test_fun.py b/git/test/test_fun.py
index b7991cdb..36435ae4 100644
--- a/git/test/test_fun.py
+++ b/git/test/test_fun.py
@@ -249,3 +249,8 @@ class TestFun(TestBase):
entries = traverse_tree_recursive(odb, commit.tree.binsha, '')
assert entries
# END for each commit
+
+def test_tree_entries_from_data():
+ from git.objects.fun import tree_entries_from_data
+ r = tree_entries_from_data(b'100644 \x9f\0aaa')
+ assert r == [('aaa', 33188, '\x9f')], r