If someone has some Haskell knowledges, I’m stuck with the next parsing problem: Extract the offset and size length in bits for delta copy commands.
Git deltas are a chain of copy/insert commands to apply to an existing Git object. Git uses a variant length to store offset and size.
Basically, my Elixir implementation so far looks like this:
# MSB is not set, this is an INSERT command.
defp unpack_obj_delta_hunk(<<0::1, size::7, data::binary-size(size), rest::binary>>, cmds) do
IO.puts "insert #{inspect data}"
unpack_obj_delta_hunk(rest, [{:insert, data}|cmds])
end
# MSB is set, this is a COPY command.
defp unpack_obj_delta_hunk(<<1::1, _::1, 0::1, 1::1, offset::4, size::8, rest::binary>>, cmds) do
IO.puts "copy from byte #{offset} to #{size}"
unpack_obj_delta_hunk(rest, [{:copy, {offset, size}}|cmds])
end
In order to parse correctly a COPY command, i need to parse offset and size length in bits.
This information is stored in the first byte:
Bit 1: MSB, used to check if the command is COPY or INSERT.
Bit 2: Is always 0
Bit 3-4: Big question mark, this seems to tell how long (in bits) offset and size are.
Bit 4-8: Offset (or not, depending on bits 3-4).
I do have an Haskell implementation code but I do not fully understand it:
I someone can help me on this, I would be more than happy =)






















