Skip to content
Commits on May 20, 2011
  1. @peff @gitster

    receive-pack: eliminate duplicate .have refs

    peff committed with gitster May 19, 2011
    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
    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: Jeff King <>
    Signed-off-by: Junio C Hamano <>
  2. @peff @gitster

    bisect: refactor sha1_array into a generic sha1 list

    peff committed with gitster May 19, 2011
    This is a generally useful abstraction, so let's let others
    make use of it.  The refactoring is more or less a straight
    copy; however, functions and struct members have had their
    names changed to match string_list, which is the most
    similar data structure.
    Signed-off-by: Jeff King <>
    Signed-off-by: Junio C Hamano <>
Something went wrong with that request. Please try again.