• J
    receive-pack: eliminate duplicate .have refs · cff38a5e
    Jeff King 提交于
    When receiving a push, we advertise ref tips from any
    alternate repositories, in case that helps the client send a
    smaller pack. Since these refs don't actually exist in the
    destination repository, we don't transmit the real ref
    names, but instead use the pseudo-ref ".have".
    
    If your alternate has a large number of duplicate refs (for
    example, because it is aggregating objects from many related
    repositories, some of which will have the same tags and
    branch tips), then we will send each ".have $sha1" line
    multiple times. This is a pointless waste of bandwidth, as
    we are simply repeating the same fact to the client over and
    over.
    
    This patch eliminates duplicate .have refs early on. It does
    so efficiently by sorting the complete list and skipping
    duplicates. This has the side effect of re-ordering the
    .have lines by ascending sha1; this isn't a problem, though,
    as the original order was meaningless.
    
    There is a similar .have system in fetch-pack, but it
    does not suffer from the same problem. For each alternate
    ref we consider in fetch-pack, we actually open the object
    and mark it with the SEEN flag, so duplicates are
    automatically culled.
    Signed-off-by: NJeff King <peff@peff.net>
    Signed-off-by: NJunio C Hamano <gitster@pobox.com>
    cff38a5e
receive-pack.c 20.3 KB