diff options
author | Tim Van Steenburgh <tvansteenburgh@gmail.com> | 2013-04-17 18:21:53 +0000 |
---|---|---|
committer | Tim Van Steenburgh <tvansteenburgh@gmail.com> | 2013-04-17 18:21:53 +0000 |
commit | f122a6aa3eb386914faa58ef3bf336f27b02fab0 (patch) | |
tree | 53b5126a5c27450514c2e41c186f8c9544465c12 | |
parent | db82455bd91ce00c22f6ee2b0dc622f117f07137 (diff) | |
download | gitpython-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.py | 10 | ||||
-rw-r--r-- | git/test/test_fun.py | 5 |
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 |