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])) {