|
@@ -61,14 +61,10 @@ def read_cache_entry(f):
|
|
|
mtime = read_cache_time(f)
|
|
|
(dev, ino, mode, uid, gid, size, sha, flags, ) = \
|
|
|
struct.unpack(">LLLLLL20sH", f.read(20 + 4 * 6 + 2))
|
|
|
- name = ""
|
|
|
- char = f.read(1)
|
|
|
- while char != "\0":
|
|
|
- name += char
|
|
|
- char = f.read(1)
|
|
|
+ name = f.read((flags & 0x0fff))
|
|
|
# Padding:
|
|
|
- real_size = ((f.tell() - beginoffset + 7) & ~7)
|
|
|
- f.read((beginoffset + real_size) - f.tell())
|
|
|
+ real_size = ((f.tell() - beginoffset + 8) & ~7)
|
|
|
+ data = f.read((beginoffset + real_size) - f.tell())
|
|
|
return (name, ctime, mtime, dev, ino, mode, uid, gid, size,
|
|
|
sha_to_hex(sha), flags)
|
|
|
|
|
@@ -84,10 +80,10 @@ def write_cache_entry(f, entry):
|
|
|
(name, ctime, mtime, dev, ino, mode, uid, gid, size, sha, flags) = entry
|
|
|
write_cache_time(f, ctime)
|
|
|
write_cache_time(f, mtime)
|
|
|
+ flags = len(name) & flags
|
|
|
f.write(struct.pack(">LLLLLL20sH", dev, ino, mode, uid, gid, size, hex_to_sha(sha), flags))
|
|
|
f.write(name)
|
|
|
- f.write(chr(0))
|
|
|
- real_size = ((f.tell() - beginoffset + 7) & ~7)
|
|
|
+ real_size = ((f.tell() - beginoffset + 8) & ~7)
|
|
|
f.write("\0" * ((beginoffset + real_size) - f.tell()))
|
|
|
|
|
|
|