• J
    pack-objects: turn off bitmaps when skipping objects · 373c67da
    Jeff King 提交于
    The pack bitmap format requires that we have a single bit
    for each object in the pack, and that each object's bitmap
    represents its complete set of reachable objects. Therefore
    we have no way to represent the bitmap of an object which
    references objects outside the pack.
    
    We notice this problem while generating the bitmaps, as we
    try to find the offset of a particular object and realize
    that we do not have it. In this case we die, and neither the
    bitmap nor the pack is generated. This is correct, but
    perhaps a little unfriendly. If you have bitmaps turned on
    in the config, many repacks will fail which would otherwise
    succeed. E.g., incremental repacks, repacks with "-l" when
    you have alternates, ".keep" files.
    
    Instead, this patch notices early that we are omitting some
    objects from the pack and turns off bitmaps (with a
    warning). Note that this is not strictly correct, as it's
    possible that the object being omitted is not reachable from
    any other object in the pack. In practice, this is almost
    never the case, and there are two advantages to doing it
    this way:
    
      1. The code is much simpler, as we do not have to cleanly
         abort the bitmap-generation process midway through.
    
      2. We do not waste time partially generating bitmaps only
         to find out that some object deep in the history is not
         being packed.
    Signed-off-by: NJeff King <peff@peff.net>
    Signed-off-by: NJunio C Hamano <gitster@pobox.com>
    373c67da
pack-objects.c 70.3 KB