зеркало из https://github.com/microsoft/git.git
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>
This commit is contained in:
Родитель
872d001f7f
Коммит
ea5ed3abce
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;
|
||||||
}
|
}
|
||||||
|
|
Загрузка…
Ссылка в новой задаче