summaryrefslogtreecommitdiff
path: root/walker.c
diff options
context:
space:
mode:
authorRené Scharfe <l.s.r@web.de>2014-08-21 18:30:24 (GMT)
committerJunio C Hamano <gitster@pobox.com>2014-08-25 17:28:14 (GMT)
commit3bc7a05b1a78b850da94ca85267ca279489ce70f (patch)
tree61b58b73800ac3a4cdf3753389306de887842a92 /walker.c
parente8d1dfe639f71dc957c30c1eaa82a3ef0010cd8e (diff)
downloadgit-3bc7a05b1a78b850da94ca85267ca279489ce70f.zip
git-3bc7a05b1a78b850da94ca85267ca279489ce70f.tar.gz
git-3bc7a05b1a78b850da94ca85267ca279489ce70f.tar.bz2
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>
Diffstat (limited to 'walker.c')
-rw-r--r--walker.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/walker.c b/walker.c
index 633596e..0b5ee3c 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])) {