Browse Source

get_revision(): do not dig deeper when we know we are at the end.

This resurrects the special casing for "rev-list -n 1" which
avoided reading parents unnecessarily.

Signed-off-by: Junio C Hamano <junkio@cox.net>
maint
Linus Torvalds 19 years ago committed by Junio C Hamano
parent
commit
ea5ed3abce
  1. 18
      revision.c

18
revision.c

@ -684,13 +684,11 @@ static void rewrite_parents(struct commit *commit)
struct commit *get_revision(struct rev_info *revs) struct commit *get_revision(struct rev_info *revs)
{ {
struct commit_list *list = revs->commits; struct commit_list *list = revs->commits;
struct commit *commit;


if (!list) if (!list)
return NULL; return NULL;


/* Check the max_count ... */ /* Check the max_count ... */
commit = list->item;
switch (revs->max_count) { switch (revs->max_count) {
case -1: case -1:
break; break;
@ -701,22 +699,28 @@ struct commit *get_revision(struct rev_info *revs)
} }


do { do {
commit = pop_most_recent_commit(&revs->commits, SEEN); struct commit *commit = revs->commits->item;

if (commit->object.flags & (UNINTERESTING|SHOWN)) if (commit->object.flags & (UNINTERESTING|SHOWN))
continue; goto next;
if (revs->min_age != -1 && (commit->date > revs->min_age)) if (revs->min_age != -1 && (commit->date > revs->min_age))
continue; goto next;
if (revs->max_age != -1 && (commit->date < revs->max_age)) if (revs->max_age != -1 && (commit->date < revs->max_age))
return NULL; return NULL;
if (revs->no_merges && commit->parents && commit->parents->next) if (revs->no_merges && commit->parents && commit->parents->next)
continue; goto next;
if (revs->paths && revs->dense) { if (revs->paths && revs->dense) {
if (!(commit->object.flags & TREECHANGE)) if (!(commit->object.flags & TREECHANGE))
continue; goto next;
rewrite_parents(commit); rewrite_parents(commit);
} }
/* More to go? */
if (revs->max_count)
pop_most_recent_commit(&revs->commits, SEEN);
commit->object.flags |= SHOWN; commit->object.flags |= SHOWN;
return commit; return commit;
next:
pop_most_recent_commit(&revs->commits, SEEN);
} while (revs->commits); } while (revs->commits);
return NULL; return NULL;
} }

Loading…
Cancel
Save