summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRené Scharfe <l.s.r@web.de>2014-08-21 20:30:24 +0200
committerJunio C Hamano <gitster@pobox.com>2014-08-25 10:28:14 -0700
commit3bc7a05b1a78b850da94ca85267ca279489ce70f (patch)
tree61b58b73800ac3a4cdf3753389306de887842a92
parente8d1dfe639f71dc957c30c1eaa82a3ef0010cd8e (diff)
downloadgit-rs/list-optim.tar.gz
walker: avoid quadratic list insertion in mark_completers/list-optim
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>
-rw-r--r--walker.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/walker.c b/walker.c
index 633596e06f..0b5ee3c92e 100644
--- a/walker.c
+++ b/walker.c
@@ -204,7 +204,7 @@ static int mark_complete(const char *path, const unsigned char *sha1, int flag,
struct commit *commit = lookup_commit_reference_gently(sha1, 1);
if (commit) {
commit->object.flags |= COMPLETE;
- commit_list_insert_by_date(commit, &complete);
+ commit_list_insert(commit, &complete);
}
return 0;
}
@@ -269,8 +269,10 @@ int walker_fetch(struct walker *walker, int targets, char **target,
}
}
- if (!walker->get_recover)
+ if (!walker->get_recover) {
for_each_ref(mark_complete, NULL);
+ commit_list_sort_by_date(&complete);
+ }
for (i = 0; i < targets; i++) {
if (interpret_target(walker, target[i], &sha1[20 * i])) {