{"thread":{"id":"64945","subject":"[PATCH] commit: use commit_stack","startedAt":"2026-02-08T11:42:56Z","lastAt":"2026-02-08T11:42:56Z","messageCount":1,"participants":["René Scharfe"],"isPatch":true,"patchVersion":1,"patchTotal":null},"messages":[{"id":"535473","messageId":"db40d132-14ca-4749-937a-9410ecc17dde@web.de","threadId":"64945","inReplyTo":null,"subject":"[PATCH] commit: use commit_stack","fromName":"René Scharfe","fromEmail":"l.s.r@web.de","sentAt":"2026-02-08T11:37:38Z","receivedAt":"2026-02-08T11:42:56Z","isPatch":true,"sender":{"key":"l.s.r@web.de","avatar":"https://avatars.githubusercontent.com/u/26122331?v=4"},"body":"Use commit_stack instead of open-coding it.  Also convert the loop\ncounter i to size_t to match the type of the nr member of struct\ncommit_stack.\n\nSigned-off-by: René Scharfe <l.s.r@web.de>\n---\n commit.c | 29 +++++++++++++----------------\n 1 file changed, 13 insertions(+), 16 deletions(-)\n\ndiff --git a/commit.c b/commit.c\nindex 28bb5ce029..22ef0ea6a3 100644\n--- a/commit.c\n+++ b/commit.c\n@@ -1015,9 +1015,7 @@ void sort_in_topological_order(struct commit_list **list, enum rev_sort_order so\n }\n \n struct rev_collect {\n-\tstruct commit **commit;\n-\tint nr;\n-\tint alloc;\n+\tstruct commit_stack stack;\n \tunsigned int initial : 1;\n };\n \n@@ -1034,8 +1032,7 @@ static void add_one_commit(struct object_id *oid, struct rev_collect *revs)\n \t    repo_parse_commit(the_repository, commit))\n \t\treturn;\n \n-\tALLOC_GROW(revs->commit, revs->nr + 1, revs->alloc);\n-\trevs->commit[revs->nr++] = commit;\n+\tcommit_stack_push(&revs->stack, commit);\n \tcommit->object.flags |= TMP_MARK;\n }\n \n@@ -1060,7 +1057,7 @@ struct commit *get_fork_point(const char *refname, struct commit *commit)\n \tstruct object_id oid;\n \tstruct rev_collect revs;\n \tstruct commit_list *bases = NULL;\n-\tint i;\n+\tsize_t i;\n \tstruct commit *ret = NULL;\n \tchar *full_refname;\n \n@@ -1074,19 +1071,19 @@ struct commit *get_fork_point(const char *refname, struct commit *commit)\n \t\tdie(\"Ambiguous refname: '%s'\", refname);\n \t}\n \n-\tmemset(&revs, 0, sizeof(revs));\n+\tcommit_stack_init(&revs.stack);\n \trevs.initial = 1;\n \trefs_for_each_reflog_ent(get_main_ref_store(the_repository),\n \t\t\t\t full_refname, collect_one_reflog_ent, &revs);\n \n-\tif (!revs.nr)\n+\tif (!revs.stack.nr)\n \t\tadd_one_commit(&oid, &revs);\n \n-\tfor (i = 0; i < revs.nr; i++)\n-\t\trevs.commit[i]->object.flags &= ~TMP_MARK;\n+\tfor (i = 0; i < revs.stack.nr; i++)\n+\t\trevs.stack.items[i]->object.flags &= ~TMP_MARK;\n \n-\tif (repo_get_merge_bases_many(the_repository, commit, revs.nr,\n-\t\t\t\t      revs.commit, &bases) < 0)\n+\tif (repo_get_merge_bases_many(the_repository, commit, revs.stack.nr,\n+\t\t\t\t      revs.stack.items, &bases) < 0)\n \t\texit(128);\n \n \t/*\n@@ -1097,16 +1094,16 @@ struct commit *get_fork_point(const char *refname, struct commit *commit)\n \t\tgoto cleanup_return;\n \n \t/* And the found one must be one of the reflog entries */\n-\tfor (i = 0; i < revs.nr; i++)\n-\t\tif (&bases->item->object == &revs.commit[i]->object)\n+\tfor (i = 0; i < revs.stack.nr; i++)\n+\t\tif (&bases->item->object == &revs.stack.items[i]->object)\n \t\t\tbreak; /* found */\n-\tif (revs.nr <= i)\n+\tif (revs.stack.nr <= i)\n \t\tgoto cleanup_return;\n \n \tret = bases->item;\n \n cleanup_return:\n-\tfree(revs.commit);\n+\tcommit_stack_clear(&revs.stack);\n \tfree_commit_list(bases);\n \tfree(full_refname);\n \treturn ret;\n-- \n2.52.0\n"}]}