git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH 05/14] remote: use commit_stack for local_commits

From
René Scharfe <l.s.r@web.de>
Date
Dec 24, 2025, 17:03 UTC
Message-ID
<20251224170327.68049-6-l.s.r@web.de>
In-Reply-To
<20251224170327.68049-1-l.s.r@web.de>
Replace a commit array implementation with commit_stack.
Signed-off-by: René Scharfe <l.s.r@web.de>
---
 remote.c | 39 ++++++---------------------------------
 1 file changed, 6 insertions(+), 33 deletions(-)
diff --git a/remote.c b/remote.c
index 59b3715120..af888e3f20 100644
--- 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;
 }
 
-- 
2.52.0
Previous: René ScharfeNext: René Scharfe
Message 3 of 15 in “export and use commit_stack”
  1. 00/14 export and use commit_stackRené Scharfe, Dec 24, 2025
  2. 01/14 revision: export commit_stackRené Scharfe, Dec 24, 2025
  3. 05/14 remote: use commit_stack for local_commitsRené Scharfe, Dec 24, 2025
  4. 08/14 test-reach: use commit_stackRené Scharfe, Dec 24, 2025
  5. 04/14 name-rev: use commit_stackRené Scharfe, Dec 24, 2025
  6. 02/14 log: use commit_stackRené Scharfe, Dec 24, 2025
  7. 07/14 remote: use commit_stack for src_commitsRené Scharfe, Dec 24, 2025
  8. 03/14 midx: use commit_stackRené Scharfe, Dec 24, 2025
  9. 06/14 remote: use commit_stack for sent_tipsRené Scharfe, Dec 24, 2025
  10. 11/14 shallow: use commit_stackRené Scharfe, Dec 24, 2025
  11. 10/14 pack-bitmap-write: use commit_stackRené Scharfe, Dec 24, 2025
  12. 09/14 commit: add commit_stack_init()René Scharfe, Dec 24, 2025
  13. 13/14 commit-graph: use commit_stackRené Scharfe, Dec 24, 2025
  14. 14/14 commit-reach: use commit_stackRené Scharfe, Dec 24, 2025
  15. 12/14 commit: add commit_stack_grow()René Scharfe, Dec 24, 2025

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.