summaryrefslogtreecommitdiff
path: root/contrib/fast-import
diff options
context:
space:
mode:
authorLibravatar Jeff King <peff@peff.net>2011-05-19 17:34:46 -0400
committerLibravatar Junio C Hamano <gitster@pobox.com>2011-05-19 20:02:31 -0700
commitcff38a5e11217dc997c1ffae8d0856023e05554a (patch)
tree72c046205a0b87902c37578e69de92f1d293d731 /contrib/fast-import
parentbisect: refactor sha1_array into a generic sha1 list (diff)
downloadtgif-cff38a5e11217dc997c1ffae8d0856023e05554a.tar.xz
receive-pack: eliminate duplicate .have refs
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: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'contrib/fast-import')
0 files changed, 0 insertions, 0 deletions