prune_remote(): sort delete_refs_list references en masse

Inserting items into a list in sorted order is O(N^2) whereas appending them unsorted and then sorting the list all at once is O(N lg N). string_list_insert() also removes duplicates, and this change loses that functionality. But the strings in this list, which ultimately come from a for_each_ref() iteration, cannot contain duplicates. Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu> Reviewed-by: Jonathan Nieder <jrnieder@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Michael Haggerty committed Nov 25, 2014 at 09:02 UTC 6d6d06c9012e96d74e9ea7aeeb6ce6dcd1a11b0f
1 file changed +2 -1
builtin/remote.c
+2 -1
@@ -1341,8 +1341,9 @@ static int prune_remote(const char *remote, int dry_run)
1341 const char *refname = states.stale.items[i].util;
1342
1343 delete_refs[i] = refname;
1344 - string_list_insert(&delete_refs_list, refname);
1344 + string_list_append(&delete_refs_list, refname);
1345 }
1346 + sort_string_list(&delete_refs_list);
1347
1348 if (!dry_run) {
1349 struct strbuf err = STRBUF_INIT;