• Jeff King's avatar
    Add delta-islands.{c,h} · c8d521fa
    Jeff King authored
    Hosting providers that allow users to "fork" existing
    repos want those forks to share as much disk space as
    possible.
    
    Alternates are an existing solution to keep all the
    objects from all the forks into a unique central repo,
    but this can have some drawbacks. Especially when
    packing the central repo, deltas will be created
    between objects from different forks.
    
    This can make cloning or fetching a fork much slower
    and much more CPU intensive as Git might have to
    compute new deltas for many objects to avoid sending
    objects from a different fork.
    
    Because the inefficiency primarily arises when an
    object is deltified against another object that does
    not exist in the same fork, we partition objects into
    sets that appear in the same fork, and define
    "delta islands". When finding delta base, we do not
    allow an object outside the same island to be
    considered as its base.
    
    So "delta islands" is a way to store objects from
    different forks in the same repo and packfile without
    having deltas between objects from different forks.
    
    This patch implements the delta islands mechanism in
    "delta-islands.{c,h}", but does not yet make use of it.
    
    A few new fields are added in 'struct object_entry'
    in "pack-objects.h" though.
    
    The documentation will follow in a patch that actually
    uses delta islands in "builtin/pack-objects.c".
    Signed-off-by: 's avatarJeff King <peff@peff.net>
    Signed-off-by: Christian Couder's avatarChristian Couder <chriscool@tuxfamily.org>
    Signed-off-by: 's avatarJunio C Hamano <gitster@pobox.com>
    c8d521fa
pack-objects.h 9.75 KB