Question about the pack OBJ_OFS_DELTA format

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi all,

I'm trying to implement the Git pack format. Parsing the index file and
unpacking undeltified objects already works. However I'm unable to get
the offset, if the type is OBJ_OFS_DELTA.

The very much work-in-progress Go code and data can be found here:
https://github.com/erikfastermann/notes/tree/wip/git

>From the docs (https://git-scm.com/docs/pack-format) I assume, that
the offset is a variable length integer, like the size.  However my
caclulation leads to a illogical result.

When trying the hash 8c40ff4767d973b672fe5aa431cb8ba0593dd26a with:

git verify-pack -v pack.pack

I get: offset: 138650 size: 30.

The base object 9b25d441c1bf358af01edc4eeba65870581a5ac1 (shown by
verify-pack) has the offset 136887, which I think means the delta should
be: 138650 - 136887 = 1763.

Using the command:

dd skip=138650 count=4 if=pack.pack bs=1 status=none | hexdump -C

I get: ee 01 8c 63

The first two bytes, the type and the size are correctly computed.

So the next varint should be the offset.

8c: 10001100 --- 63: 01100011

-> 1100011_0001100

-> 12684 ???

The result is the same when calculating it manually and with my program.

I probably have some crucial misunderstanding about the format, so a
clarification would be nice.

Thank you for your help.

Erik



[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux