diff options
author | Matthias Urlichs <smurf@smurf.noris.de> | 2006-03-09 05:04:36 +0100 |
---|---|---|
committer | Junio C Hamano <junkio@cox.net> | 2006-03-09 01:49:07 -0800 |
commit | d2c4af73738229e2b7c640f818f56f17d1d9edf8 (patch) | |
tree | 1a549acae07fa9741e75e7c6c86bf1092f2ab710 | |
parent | c13c6bf758457a3e7293b2adf63cc47aec8d83ef (diff) | |
download | git-d2c4af73738229e2b7c640f818f56f17d1d9edf8.tar.gz |
Don't recurse into parents marked uninteresting.
revision.c:make_parents_uninteresting() is exponential with the number
of merges in the tree. That's fine -- unless some other part of git
already has pulled the whole commit tree into memory ...
Signed-off-by: Junio C Hamano <junkio@cox.net>
-rw-r--r-- | revision.c | 26 |
1 files changed, 14 insertions, 12 deletions
diff --git a/revision.c b/revision.c index 2a33637f62..713f27e3ce 100644 --- a/revision.c +++ b/revision.c @@ -82,18 +82,20 @@ void mark_parents_uninteresting(struct commit *commit) while (parents) { struct commit *commit = parents->item; - commit->object.flags |= UNINTERESTING; - - /* - * Normally we haven't parsed the parent - * yet, so we won't have a parent of a parent - * here. However, it may turn out that we've - * reached this commit some other way (where it - * wasn't uninteresting), in which case we need - * to mark its parents recursively too.. - */ - if (commit->parents) - mark_parents_uninteresting(commit); + if (!(commit->object.flags & UNINTERESTING)) { + commit->object.flags |= UNINTERESTING; + + /* + * Normally we haven't parsed the parent + * yet, so we won't have a parent of a parent + * here. However, it may turn out that we've + * reached this commit some other way (where it + * wasn't uninteresting), in which case we need + * to mark its parents recursively too.. + */ + if (commit->parents) + mark_parents_uninteresting(commit); + } /* * A missing commit is ok iff its parent is marked |