summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLibravatar Jeff King <peff@peff.net>2017-07-07 05:07:58 -0400
committerLibravatar Junio C Hamano <gitster@pobox.com>2017-07-09 10:00:48 -0700
commit7c2f08aa7a26e68475abe5c9fd7250aacbb6b7b2 (patch)
tree069ca7fdfb4b871f1c2603db44f9407332cfadab
parentlog: do not free parents when walking reflog (diff)
downloadtgif-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.c11
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;
+ }
}
/*