]> git.ipfire.org Git - thirdparty/git.git/commitdiff
commit-reach: use commit_stack
authorRené Scharfe <l.s.r@web.de>
Wed, 24 Dec 2025 17:03:27 +0000 (18:03 +0100)
committerJunio C Hamano <gitster@pobox.com>
Wed, 24 Dec 2025 23:29:29 +0000 (08:29 +0900)
Use commit_stack instead of open-coding it.

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

index cc18c86d3bb315ed2a206174fbbcdebf86ca873f..e7d9b3208fabc456d8ccfa0442417bb8b782401e 100644 (file)
@@ -283,8 +283,8 @@ static int remove_redundant_with_gen(struct repository *r,
 {
        size_t i, count_non_stale = 0, count_still_independent = cnt;
        timestamp_t min_generation = GENERATION_NUMBER_INFINITY;
-       struct commit **walk_start, **sorted;
-       size_t walk_start_nr = 0, walk_start_alloc = cnt;
+       struct commit **sorted;
+       struct commit_stack walk_start = COMMIT_STACK_INIT;
        size_t min_gen_pos = 0;
 
        /*
@@ -298,7 +298,7 @@ static int remove_redundant_with_gen(struct repository *r,
        QSORT(sorted, cnt, compare_commits_by_gen);
        min_generation = commit_graph_generation(sorted[0]);
 
-       ALLOC_ARRAY(walk_start, walk_start_alloc);
+       commit_stack_grow(&walk_start, cnt);
 
        /* Mark all parents of the input as STALE */
        for (i = 0; i < cnt; i++) {
@@ -312,18 +312,17 @@ static int remove_redundant_with_gen(struct repository *r,
                        repo_parse_commit(r, parents->item);
                        if (!(parents->item->object.flags & STALE)) {
                                parents->item->object.flags |= STALE;
-                               ALLOC_GROW(walk_start, walk_start_nr + 1, walk_start_alloc);
-                               walk_start[walk_start_nr++] = parents->item;
+                               commit_stack_push(&walk_start, parents->item);
                        }
                        parents = parents->next;
                }
        }
 
-       QSORT(walk_start, walk_start_nr, compare_commits_by_gen);
+       QSORT(walk_start.items, walk_start.nr, compare_commits_by_gen);
 
        /* remove STALE bit for now to allow walking through parents */
-       for (i = 0; i < walk_start_nr; i++)
-               walk_start[i]->object.flags &= ~STALE;
+       for (i = 0; i < walk_start.nr; i++)
+               walk_start.items[i]->object.flags &= ~STALE;
 
        /*
         * Start walking from the highest generation. Hopefully, it will
@@ -331,12 +330,12 @@ static int remove_redundant_with_gen(struct repository *r,
         * terminate early. Otherwise, we will do the same amount of work
         * as before.
         */
-       for (i = walk_start_nr; i && count_still_independent > 1; i--) {
+       for (i = walk_start.nr; i && count_still_independent > 1; i--) {
                /* push the STALE bits up to min generation */
                struct commit_list *stack = NULL;
 
-               commit_list_insert(walk_start[i - 1], &stack);
-               walk_start[i - 1]->object.flags |= STALE;
+               commit_list_insert(walk_start.items[i - 1], &stack);
+               walk_start.items[i - 1]->object.flags |= STALE;
 
                while (stack) {
                        struct commit_list *parents;
@@ -390,8 +389,8 @@ static int remove_redundant_with_gen(struct repository *r,
        }
 
        /* clear marks */
-       clear_commit_marks_many(walk_start_nr, walk_start, STALE);
-       free(walk_start);
+       clear_commit_marks_many(walk_start.nr, walk_start.items, STALE);
+       commit_stack_clear(&walk_start);
 
        *dedup_cnt = count_non_stale;
        return 0;