fetch-pack: sort the list of incoming refs
authorJeff King <peff@peff.net>
Mon, 21 May 2012 22:19:51 +0000 (18:19 -0400)
committerJunio C Hamano <gitster@pobox.com>
Tue, 22 May 2012 20:31:03 +0000 (13:31 -0700)
Having the list sorted means we can avoid some quadratic
algorithms when comparing lists.

These should typically be sorted already, but they do come
from the remote, so let's be extra careful. Our ref-sorting
implementation does a mergesort, so we do not have to care
about performance degrading in the common case that the list
is already sorted.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/fetch-pack.c

index e101842627d47f6e368201cd1d01690be016342e..7d708fb8ad59d0f52333d590bee22515d56a76cd 100644 (file)
@@ -777,6 +777,8 @@ static struct ref *do_fetch_pack(int fd[2],
        struct ref *ref = copy_ref_list(orig_ref);
        unsigned char sha1[20];
 
+       sort_ref_list(&ref, ref_compare_name);
+
        if (is_repository_shallow() && !server_supports("shallow"))
                die("Server does not support shallow clients");
        if (server_supports("multi_ack_detailed")) {