summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--git/compat.py3
-rw-r--r--git/index/fun.py9
-rw-r--r--git/objects/fun.py5
-rw-r--r--git/test/test_fun.py12
4 files changed, 17 insertions, 12 deletions
diff --git a/git/compat.py b/git/compat.py
index f11d1423..b9205418 100644
--- a/git/compat.py
+++ b/git/compat.py
@@ -29,6 +29,8 @@ if PY3:
FileType = io.IOBase
def byte_ord(b):
return b
+ def bchr(n):
+ return bytes([n])
else:
FileType = file
# usually, this is just ascii, which might not enough for our encoding needs
@@ -36,6 +38,7 @@ else:
if defenc == 'ascii':
defenc = 'utf-8'
byte_ord = ord
+ bchr = chr
def with_metaclass(meta, *bases):
diff --git a/git/index/fun.py b/git/index/fun.py
index 0e49ae8d..3e66a7ba 100644
--- a/git/index/fun.py
+++ b/git/index/fun.py
@@ -37,6 +37,7 @@ from .util import (
from gitdb.base import IStream
from gitdb.typ import str_tree_type
+from git.compat import defenc
__all__ = ('write_cache', 'read_cache', 'write_tree_from_cache', 'entry_key',
'stat_mode_to_index_mode', 'S_IFGITLINK')
@@ -86,9 +87,9 @@ def write_cache(entries, stream, extension_data=None, ShaStreamCls=IndexFileSHA1
flags = plen | (entry[2] & CE_NAMEMASK_INV) # clear possible previous values
write(pack(">LLLLLL20sH", entry[6], entry[7], entry[0],
entry[8], entry[9], entry[10], entry[1], flags))
- write(path)
+ write(path.encode(defenc))
real_size = ((tell() - beginoffset + 8) & ~7)
- write("\0" * ((beginoffset + real_size) - tell()))
+ write(b"\0" * ((beginoffset + real_size) - tell()))
# END for each entry
# write previously cached extensions data
@@ -102,7 +103,7 @@ def write_cache(entries, stream, extension_data=None, ShaStreamCls=IndexFileSHA1
def read_header(stream):
"""Return tuple(version_long, num_entries) from the given stream"""
type_id = stream.read(4)
- if type_id != "DIRC":
+ if type_id != b"DIRC":
raise AssertionError("Invalid index file header: %r" % type_id)
version, num_entries = unpack(">LL", stream.read(4 * 2))
@@ -142,7 +143,7 @@ def read_cache(stream):
(dev, ino, mode, uid, gid, size, sha, flags) = \
unpack(">LLLLLL20sH", read(20 + 4 * 6 + 2))
path_size = flags & CE_NAMEMASK
- path = read(path_size)
+ path = read(path_size).decode(defenc)
real_size = ((tell() - beginoffset + 8) & ~7)
read((beginoffset + real_size) - tell())
diff --git a/git/objects/fun.py b/git/objects/fun.py
index 610bdb5c..ba8dbcf4 100644
--- a/git/objects/fun.py
+++ b/git/objects/fun.py
@@ -4,7 +4,8 @@ from git.compat import (
byte_ord,
defenc,
xrange,
- text_type
+ text_type,
+ bchr
)
__all__ = ('tree_to_stream', 'tree_entries_from_data', 'traverse_trees_recursive',
@@ -21,7 +22,7 @@ def tree_to_stream(entries, write):
for binsha, mode, name in entries:
mode_str = b''
for i in xrange(6):
- mode_str = chr(((mode >> (i * 3)) & bit_mask) + ord_zero) + mode_str
+ mode_str = bchr(((mode >> (i * 3)) & bit_mask) + ord_zero) + mode_str
# END for each 8 octal value
# git slices away the first octal if its zero
diff --git a/git/test/test_fun.py b/git/test/test_fun.py
index 9d3e749e..40d040b9 100644
--- a/git/test/test_fun.py
+++ b/git/test/test_fun.py
@@ -30,7 +30,7 @@ from io import BytesIO
class TestFun(TestBase):
def _assert_index_entries(self, entries, trees):
- index = IndexFile.from_tree(self.rorepo, *[self.rorepo.tree(bin_to_hex(t)) for t in trees])
+ index = IndexFile.from_tree(self.rorepo, *[self.rorepo.tree(bin_to_hex(t).decode('ascii')) for t in trees])
assert entries
assert len(index.entries) == len(entries)
for entry in entries:
@@ -91,9 +91,9 @@ class TestFun(TestBase):
assert has_conflict == (len([e for e in entries if e.stage != 0]) > 0)
mktree = self.mktree
- shaa = "\1" * 20
- shab = "\2" * 20
- shac = "\3" * 20
+ shaa = b"\1" * 20
+ shab = b"\2" * 20
+ shac = b"\3" * 20
odb = rwrepo.odb
@@ -256,6 +256,6 @@ class TestFun(TestBase):
assert entries
# END for each commit
- def test_tree_entries_from_data(self):
+ def test_tree_entries_from_data_with_failing_name_decode(self):
r = tree_entries_from_data(b'100644 \x9f\0aaa')
- assert r == [('aaa', 33188, '\x9f')], r
+ assert r == [(b'aaa', 33188, b'\x9f')], r