]> git.ipfire.org Git - thirdparty/git.git/commitdiff
remote: use commit_stack for local_commits
authorRené Scharfe <l.s.r@web.de>
Wed, 24 Dec 2025 17:03:18 +0000 (18:03 +0100)
committerJunio C Hamano <gitster@pobox.com>
Wed, 24 Dec 2025 23:29:27 +0000 (08:29 +0900)
Replace a commit array implementation with commit_stack.

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

index 59b371512084eb8c7cb56ee7663da2b3f04df779..af888e3f20d9ee2a730a3b8f9561beff5a22dca6 100644 (file)
--- a/remote.c
+++ b/remote.c
@@ -2544,36 +2544,9 @@ static int remote_tracking(struct remote *remote, const char *refname,
        return 0;
 }
 
-/*
- * The struct "reflog_commit_array" and related helper functions
- * are used for collecting commits into an array during reflog
- * traversals in "check_and_collect_until()".
- */
-struct reflog_commit_array {
-       struct commit **item;
-       size_t nr, alloc;
-};
-
-#define REFLOG_COMMIT_ARRAY_INIT { 0 }
-
-/* Append a commit to the array. */
-static void append_commit(struct reflog_commit_array *arr,
-                         struct commit *commit)
-{
-       ALLOC_GROW(arr->item, arr->nr + 1, arr->alloc);
-       arr->item[arr->nr++] = commit;
-}
-
-/* Free and reset the array. */
-static void free_commit_array(struct reflog_commit_array *arr)
-{
-       FREE_AND_NULL(arr->item);
-       arr->nr = arr->alloc = 0;
-}
-
 struct check_and_collect_until_cb_data {
        struct commit *remote_commit;
-       struct reflog_commit_array *local_commits;
+       struct commit_stack *local_commits;
        timestamp_t remote_reflog_timestamp;
 };
 
@@ -2605,7 +2578,7 @@ static int check_and_collect_until(const char *refname UNUSED,
                return 1;
 
        if ((commit = lookup_commit_reference(the_repository, n_oid)))
-               append_commit(cb->local_commits, commit);
+               commit_stack_push(cb->local_commits, commit);
 
        /*
         * If the reflog entry timestamp is older than the remote ref's
@@ -2633,7 +2606,7 @@ static int is_reachable_in_reflog(const char *local, const struct ref *remote)
        struct commit *commit;
        struct commit **chunk;
        struct check_and_collect_until_cb_data cb;
-       struct reflog_commit_array arr = REFLOG_COMMIT_ARRAY_INIT;
+       struct commit_stack arr = COMMIT_STACK_INIT;
        size_t size = 0;
        int ret = 0;
 
@@ -2664,8 +2637,8 @@ static int is_reachable_in_reflog(const char *local, const struct ref *remote)
         * Check if the remote commit is reachable from any
         * of the commits in the collected array, in batches.
         */
-       for (chunk = arr.item; chunk < arr.item + arr.nr; chunk += size) {
-               size = arr.item + arr.nr - chunk;
+       for (chunk = arr.items; chunk < arr.items + arr.nr; chunk += size) {
+               size = arr.items + arr.nr - chunk;
                if (MERGE_BASES_BATCH_SIZE < size)
                        size = MERGE_BASES_BATCH_SIZE;
 
@@ -2674,7 +2647,7 @@ static int is_reachable_in_reflog(const char *local, const struct ref *remote)
        }
 
 cleanup_return:
-       free_commit_array(&arr);
+       commit_stack_clear(&arr);
        return ret;
 }