in lib/grit/git-ruby/internal/loose.rb [102:126]
def unpack_object_header_gently(buf)
used = 0
c = buf.getord(used)
used += 1
type = (c >> 4) & 7;
size = c & 15;
shift = 4;
while c & 0x80 != 0
if buf.bytesize <= used
raise LooseObjectError, "object file too short"
end
c = buf.getord(used)
used += 1
size += (c & 0x7f) << shift
shift += 7
end
type = OBJ_TYPES[type]
if ![:blob, :tree, :commit, :tag].include?(type)
raise LooseObjectError, "invalid loose object type"
end
return [type, size, used]
end