[PATCH v6 2/3] revision: add peek functions for lookahead
- From
Pablo Sabater <pabloosabaterr@gmail.com>
- Date
- Jun 20, 2026, 10:11 UTC
- Message-ID
- <20260620-ps-pre-commit-indent-v6-2-cdc6d8fd5fbc@gmail.com>
- In-Reply-To
- <20260620-ps-pre-commit-indent-v6-0-cdc6d8fd5fbc@gmail.com>
The graph code in a subsequent commit needs to be able to look ahead in order to set indentation-related flags.
Using revs->commits is brittle and the data structure that holds the pending commits might change in the future.
Add two functions that abstract this for the graph.
Helped-by: Kristofer Karlsson <stoansen@gmail.com> Signed-off-by: Pablo Sabater <pabloosabaterr@gmail.com> --- revision.c | 38 ++++++++++++++++++++++++++++++++++++++ revision.h | 10 ++++++++++ 2 files changed, 48 insertions(+)
diff --git a/revision.c b/revision.c index e91d7e1f11..a472a28853 100644 --- a/revision.c +++ b/revision.c @@ -3708,6 +3708,44 @@ static unsigned int count_explore_walked; static unsigned int count_indegree_walked; static unsigned int count_topo_walked; +struct commit *revision_peek_next_commit (struct rev_info *revs) +{ + struct topo_walk_info *info = revs->topo_walk_info; + + if (info) + return prio_queue_peek(&info->topo_queue); + if (revs->commits) + return revs->commits->item; + + return NULL; +} + +int revision_has_commits_after (struct rev_info *revs, int n) +{ + struct topo_walk_info *info = revs->topo_walk_info; + + if (info) { + int visible = 0; + for (size_t i = 0; i < info->topo_queue.nr && visible < n; i++) { + struct commit *c = info->topo_queue.array[i].data; + if (get_commit_action(revs, c) == commit_show) + visible++; + } + return visible > n-1; + } + if (revs->commits) { + struct commit_list *cl; + int visible = 0; + for (cl = revs->commits; cl && visible < n; cl = cl->next) { + if (get_commit_action(revs, cl->item) == commit_show) + visible++; + } + return visible > n-1; + } + + return 0; +} + static void trace2_topo_walk_statistics_atexit(void) { struct json_writer jw = JSON_WRITER_INIT; diff --git a/revision.h b/revision.h index 00c392be37..a10c6b0940 100644 --- a/revision.h +++ b/revision.h @@ -572,4 +572,14 @@ int rewrite_parents(struct rev_info *revs, */ struct commit_list *get_saved_parents(struct rev_info *revs, const struct commit *commit); +/* + * Peek into revision's next commit without consuming it. + */ +struct commit *revision_peek_next_commit(struct rev_info *revs); + +/* + * Check if there are n more commits to be shown yet. + */ +int revision_has_commits_after(struct rev_info *revs, int n); + #endif
-- 2.54.0