walker: avoid quadratic list insertion in mark_complete

Similar to 16445242 (fetch-pack: avoid quadratic list insertion in mark_complete), sort only after all refs are collected instead of while inserting. The result is the same, but it's more efficient that way. The difference will only be measurable in repositories with a large number of refs. Signed-off-by: Rene Scharfe <l.s.r@web.de> Acked-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>

René Scharfe committed Aug 21, 2014 at 20:30 UTC 3bc7a05b1a78b850da94ca85267ca279489ce70f
1 file changed +4 -2
walker.c
+4 -2
@@ -204,7 +204,7 @@ static int mark_complete(const char *path, const unsigned char *sha1, int flag,
204 struct commit *commit = lookup_commit_reference_gently(sha1, 1);
205 if (commit) {
206 commit->object.flags |= COMPLETE;
207 - commit_list_insert_by_date(commit, &complete);
207 + commit_list_insert(commit, &complete);
208 }
209 return 0;
210 }
@@ -269,8 +269,10 @@ int walker_fetch(struct walker *walker, int targets, char **target,
269 }
270 }
271
272 - if (!walker->get_recover)
272 + if (!walker->get_recover) {
273 for_each_ref(mark_complete, NULL);
274 + commit_list_sort_by_date(&complete);
275 + }
276
277 for (i = 0; i < targets; i++) {
278 if (interpret_target(walker, target[i], &sha1[20 * i])) {