]> git.ipfire.org Git - thirdparty/git.git/commitdiff
commit: use commit_stack
authorRené Scharfe <l.s.r@web.de>
Sun, 8 Feb 2026 11:37:38 +0000 (12:37 +0100)
committerJunio C Hamano <gitster@pobox.com>
Sun, 8 Feb 2026 23:02:09 +0000 (15:02 -0800)
Use commit_stack instead of open-coding it.  Also convert the loop
counter i to size_t to match the type of the nr member of struct
commit_stack.

Signed-off-by: René Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
commit.c

index 28bb5ce029f3c521f0e2cc670a9667989a84f580..22ef0ea6a3191ccd4cc5a27874fd17bddc7eeaa7 100644 (file)
--- a/commit.c
+++ b/commit.c
@@ -1015,9 +1015,7 @@ void sort_in_topological_order(struct commit_list **list, enum rev_sort_order so
 }
 
 struct rev_collect {
-       struct commit **commit;
-       int nr;
-       int alloc;
+       struct commit_stack stack;
        unsigned int initial : 1;
 };
 
@@ -1034,8 +1032,7 @@ static void add_one_commit(struct object_id *oid, struct rev_collect *revs)
            repo_parse_commit(the_repository, commit))
                return;
 
-       ALLOC_GROW(revs->commit, revs->nr + 1, revs->alloc);
-       revs->commit[revs->nr++] = commit;
+       commit_stack_push(&revs->stack, commit);
        commit->object.flags |= TMP_MARK;
 }
 
@@ -1060,7 +1057,7 @@ struct commit *get_fork_point(const char *refname, struct commit *commit)
        struct object_id oid;
        struct rev_collect revs;
        struct commit_list *bases = NULL;
-       int i;
+       size_t i;
        struct commit *ret = NULL;
        char *full_refname;
 
@@ -1074,19 +1071,19 @@ struct commit *get_fork_point(const char *refname, struct commit *commit)
                die("Ambiguous refname: '%s'", refname);
        }
 
-       memset(&revs, 0, sizeof(revs));
+       commit_stack_init(&revs.stack);
        revs.initial = 1;
        refs_for_each_reflog_ent(get_main_ref_store(the_repository),
                                 full_refname, collect_one_reflog_ent, &revs);
 
-       if (!revs.nr)
+       if (!revs.stack.nr)
                add_one_commit(&oid, &revs);
 
-       for (i = 0; i < revs.nr; i++)
-               revs.commit[i]->object.flags &= ~TMP_MARK;
+       for (i = 0; i < revs.stack.nr; i++)
+               revs.stack.items[i]->object.flags &= ~TMP_MARK;
 
-       if (repo_get_merge_bases_many(the_repository, commit, revs.nr,
-                                     revs.commit, &bases) < 0)
+       if (repo_get_merge_bases_many(the_repository, commit, revs.stack.nr,
+                                     revs.stack.items, &bases) < 0)
                exit(128);
 
        /*
@@ -1097,16 +1094,16 @@ struct commit *get_fork_point(const char *refname, struct commit *commit)
                goto cleanup_return;
 
        /* And the found one must be one of the reflog entries */
-       for (i = 0; i < revs.nr; i++)
-               if (&bases->item->object == &revs.commit[i]->object)
+       for (i = 0; i < revs.stack.nr; i++)
+               if (&bases->item->object == &revs.stack.items[i]->object)
                        break; /* found */
-       if (revs.nr <= i)
+       if (revs.stack.nr <= i)
                goto cleanup_return;
 
        ret = bases->item;
 
 cleanup_return:
-       free(revs.commit);
+       commit_stack_clear(&revs.stack);
        free_commit_list(bases);
        free(full_refname);
        return ret;