in lib/grit/git-ruby/internal/pack.rb [344:377]
def patch_delta(base, delta)
src_size, pos = patch_delta_header_size(delta, 0)
if src_size != base.size
raise PackFormatError, 'invalid delta data'
end
dest_size, pos = patch_delta_header_size(delta, pos)
dest = ""
while pos < delta.size
c = delta.getord(pos)
pos += 1
if c & 0x80 != 0
pos -= 1
cp_off = cp_size = 0
cp_off = delta.getord(pos += 1) if c & 0x01 != 0
cp_off |= delta.getord(pos += 1) << 8 if c & 0x02 != 0
cp_off |= delta.getord(pos += 1) << 16 if c & 0x04 != 0
cp_off |= delta.getord(pos += 1) << 24 if c & 0x08 != 0
cp_size = delta.getord(pos += 1) if c & 0x10 != 0
cp_size |= delta.getord(pos += 1) << 8 if c & 0x20 != 0
cp_size |= delta.getord(pos += 1) << 16 if c & 0x40 != 0
cp_size = 0x10000 if cp_size == 0
pos += 1
dest << base[cp_off,cp_size]
elsif c != 0
dest << delta[pos,c]
pos += c
else
raise PackFormatError, 'invalid delta data'
end
end
dest
end