summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLibravatar Jeff King <peff@peff.net>2012-05-21 18:19:51 -0400
committerLibravatar Junio C Hamano <gitster@pobox.com>2012-05-22 13:31:03 -0700
commit9e8e704f0bc14da325aa63f639c6dc782c81e26f (patch)
tree915006dec9c93f6229dc36f7ee6f220d1d9e5b39
parentadd sorting infrastructure for list refs (diff)
downloadtgif-9e8e704f0bc14da325aa63f639c6dc782c81e26f.tar.xz
fetch-pack: sort the list of incoming refs
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>
-rw-r--r--builtin/fetch-pack.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/builtin/fetch-pack.c b/builtin/fetch-pack.c
index e101842627..7d708fb8ad 100644
--- a/builtin/fetch-pack.c
+++ b/builtin/fetch-pack.c
@@ -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")) {