• N
    introduce delta objects with offset to base · eb32d236
    Nicolas Pitre 提交于
    This adds a new object, namely OBJ_OFS_DELTA, renames OBJ_DELTA to
    OBJ_REF_DELTA to better make the distinction between those two delta
    objects, and adds support for the handling of those new delta objects
    in sha1_file.c only.
    
    The OBJ_OFS_DELTA contains a relative offset from the delta object's
    position in a pack instead of the 20-byte SHA1 reference to identify
    the base object.  Since the base is likely to be not so far away, the
    relative offset is more likely to have a smaller encoding on average
    than an absolute offset.  And for those delta objects the base must
    always be stored first because there is no way to know the distance of
    later objects when streaming a pack.  Hence this relative offset is
    always meant to be negative.
    
    The offset encoding is slightly denser than the one used for object
    size -- credits to <linux@horizon.com> (whoever this is) for bringing
    it to my attention.
    
    This allows for pack size reduction between 3.2% (Linux-2.6) to over 5%
    (linux-historic).  Runtime pack access should be faster too since delta
    replay does skip a search in the pack index for each delta in a chain.
    Signed-off-by: NNicolas Pitre <nico@cam.org>
    Signed-off-by: NJunio C Hamano <junkio@cox.net>
    eb32d236
builtin-pack-objects.c 38.4 KB