Skip to content

Commit c7b42cd

Browse files
codexByron
authored andcommitted
Handle bytes-like tree data consistently
1 parent 1d96bba commit c7b42cd

3 files changed

Lines changed: 7 additions & 3 deletions

File tree

git/objects/fun.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -115,11 +115,11 @@ def tree_entries_from_data(data: bytes) -> List[EntryTup]:
115115
# Default encoding for strings in git is UTF-8.
116116
# Only use the respective unicode object if the byte stream was encoded.
117117
name_bytes = data[ns:i]
118-
name = safe_decode(name_bytes)
118+
name = safe_decode(bytes(name_bytes))
119119

120120
# Byte is NULL, get next 20.
121121
i += 1
122-
sha = data[i : i + 20]
122+
sha = bytes(data[i : i + 20])
123123
i = i + 20
124124
out.append((sha, mode, name))
125125
# END for each byte in data stream

test/lib/helper.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -410,7 +410,7 @@ def setUpClass(cls):
410410
repo = cls.rorepo.clone(path, shared=True, no_checkout=True)
411411
repo.create_head("master", repo.commit(rev), force=True).checkout()
412412
if name == "smmap":
413-
repo.create_tag("v0.8.1", ref="master~10", message="Test fixture tag")
413+
repo.create_tag("v0.8.1", ref="master~10", message="Test fixture tag", force=True)
414414
repo.close()
415415
cls._dependency_repo_dirs[name] = path
416416

test/test_fun.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -306,3 +306,7 @@ def test_linked_worktree_traversal(self, rw_dir):
306306
def test_tree_entries_from_data_with_failing_name_decode_py3(self):
307307
r = tree_entries_from_data(b"100644 \x9f\0aaa")
308308
assert r == [(b"aaa", 33188, "\udc9f")], r
309+
310+
def test_tree_entries_from_bytearray(self):
311+
r = tree_entries_from_data(bytearray(b"100644 name\0abcdefghijklmnopqrst"))
312+
assert r == [(b"abcdefghijklmnopqrst", 33188, "name")], r

0 commit comments

Comments
 (0)