fetch-pack: sort incoming heads

There's no reason to preserve the incoming order of the
heads we're requested to fetch. By having them sorted, we
can replace some of the quadratic algorithms with linear
ones.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Jeff King 2012-05-21 18:17:02 -04:00 коммит произвёл Junio C Hamano
Родитель aa3bb87176
Коммит 443596850f
1 изменённых файлов: 9 добавлений и 1 удалений

Просмотреть файл

@ -1057,6 +1057,11 @@ int cmd_fetch_pack(int argc, const char **argv, const char *prefix)
return ret; return ret;
} }
static int compare_heads(const void *a, const void *b)
{
return strcmp(*(const char **)a, *(const char **)b);
}
struct ref *fetch_pack(struct fetch_pack_args *my_args, struct ref *fetch_pack(struct fetch_pack_args *my_args,
int fd[], struct child_process *conn, int fd[], struct child_process *conn,
const struct ref *ref, const struct ref *ref,
@ -1076,8 +1081,11 @@ struct ref *fetch_pack(struct fetch_pack_args *my_args,
st.st_mtime = 0; st.st_mtime = 0;
} }
if (heads && nr_heads) if (heads && nr_heads) {
nr_heads = remove_duplicates(nr_heads, heads); nr_heads = remove_duplicates(nr_heads, heads);
qsort(heads, nr_heads, sizeof(*heads), compare_heads);
}
if (!ref) { if (!ref) {
packet_flush(fd[1]); packet_flush(fd[1]);
die("no matching remote head"); die("no matching remote head");