diff options
author | Jeff King <peff@peff.net> | 2017-07-07 05:07:58 -0400 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2017-07-09 10:00:48 -0700 |
commit | 7c2f08aa7a26e68475abe5c9fd7250aacbb6b7b2 (patch) | |
tree | 069ca7fdfb4b871f1c2603db44f9407332cfadab | |
parent | log: do not free parents when walking reflog (diff) | |
download | tgif-7c2f08aa7a26e68475abe5c9fd7250aacbb6b7b2.tar.xz |
get_revision_1(): replace do-while with an early return
The get_revision_1() function tries to avoid entering its
main loop at all when there are no commits to look at. But
it's perfectly safe to call pop_commit() on an empty list
(in which case it will return NULL). Switching to an early
return from the loop lets us skip repeating the loop
condition before we enter the do-while. That will get more
important when we start pulling reflog-walk commits from a
source besides the revs->commits queue, as that condition
will get much more complicated.
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r-- | revision.c | 11 |
1 files changed, 5 insertions, 6 deletions
diff --git a/revision.c b/revision.c index 6678de04d9..4019e8cf23 100644 --- a/revision.c +++ b/revision.c @@ -3111,12 +3111,12 @@ static void track_linear(struct rev_info *revs, struct commit *commit) static struct commit *get_revision_1(struct rev_info *revs) { - if (!revs->commits) - return NULL; - - do { + while (1) { struct commit *commit = pop_commit(&revs->commits); + if (!commit) + return NULL; + if (revs->reflog_info) { save_parents(revs, commit); fake_reflog_parent(revs->reflog_info, commit); @@ -3150,8 +3150,7 @@ static struct commit *get_revision_1(struct rev_info *revs) track_linear(revs, commit); return commit; } - } while (revs->commits); - return NULL; + } } /* |