revision: add next_commit_to_show()
get_revision() gets its commits from two sources depending on the mode:
1. Normally it gets the commits from get_revision_internal().
2. --max-count-oldest which was introduced at bb4ce23284 (revision.c:
implement --max-count-oldest, 2026-05-19) gets the commits by popping
from a saved list at revs->commits marking SHOWN and CHILD_SHOWN on
each popped commit.
Extract the choice logic into a helper, next_commit_to_show(), which
returns the next commit regardless of the source it comes from.
This has no change in behavior. The helper is needed in a subsequent
commit that pre-fetches two commits into a buffer for lookahead purposes
and needs to pre-fetch from the same source.
The --reverse branch keeps its own pop loop. Using the helper for
--reverse would additionally set SHOWN and CHILD_SHOWN which is not
desired and a behavior change.
Signed-off-by: Pablo Sabater <pabloosabaterr@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
next
parent
641588bbcd
commit
08a0bef796
36
revision.c
36
revision.c
|
|
@ -4658,12 +4658,34 @@ static void retrieve_oldest_commits(struct rev_info *revs,
|
|||
commit_list_insert(c, queue);
|
||||
}
|
||||
|
||||
/*
|
||||
* Returns the next commit that will be shown, regardless of whether it comes
|
||||
* directly from the revision walk or from the list saved by the staged output
|
||||
* of --max-count-oldest.
|
||||
*/
|
||||
static struct commit *next_commit_to_show(struct rev_info *revs)
|
||||
{
|
||||
struct commit *c;
|
||||
struct commit_list *p;
|
||||
|
||||
if (!revs->max_count_stage)
|
||||
return get_revision_internal(revs);
|
||||
|
||||
c = pop_commit(&revs->commits);
|
||||
if (c) {
|
||||
c->object.flags |= SHOWN;
|
||||
if (!(c->object.flags & BOUNDARY))
|
||||
for (p = c->parents; p; p = p->next)
|
||||
p->item->object.flags |= CHILD_SHOWN;
|
||||
}
|
||||
return c;
|
||||
}
|
||||
|
||||
struct commit *get_revision(struct rev_info *revs)
|
||||
{
|
||||
struct commit *c;
|
||||
struct commit_list *reversed;
|
||||
struct commit_list *queue = NULL;
|
||||
struct commit_list *p;
|
||||
|
||||
if (revs->max_count_type == 1 && !revs->max_count_stage) {
|
||||
retrieve_oldest_commits(revs, &queue);
|
||||
|
|
@ -4693,17 +4715,7 @@ struct commit *get_revision(struct rev_info *revs)
|
|||
return c;
|
||||
}
|
||||
|
||||
if (revs->max_count_stage) {
|
||||
c = pop_commit(&revs->commits);
|
||||
if (c) {
|
||||
c->object.flags |= SHOWN;
|
||||
if (!(c->object.flags & BOUNDARY))
|
||||
for (p = c->parents; p; p = p->next)
|
||||
p->item->object.flags |= CHILD_SHOWN;
|
||||
}
|
||||
} else {
|
||||
c = get_revision_internal(revs);
|
||||
}
|
||||
c = next_commit_to_show(revs);
|
||||
|
||||
if (c && revs->graph)
|
||||
graph_update(revs->graph, c);
|
||||
|
|
|
|||
Loading…
Reference in New Issue