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

[PATCH v2 11/17] filter_refs(): do not leave gaps in return_refs

From
mhagger@alum.mit.edu <mhagger@alum.mit.edu>
Date
Aug 25, 2012, 06:44 UTC
Message-ID
<1345877067-11841-12-git-send-email-mhagger@alum.mit.edu>
In-Reply-To
<1345877067-11841-1-git-send-email-mhagger@alum.mit.edu>
From: Michael Haggerty <mhagger@alum.mit.edu>

It used to be that this function processed refnames in some arbitrary order but wanted to return them in the order that they were requested, not the order that they were processed. Now, the refnames are processed in sorted order, so there is no reason to go to the extra effort.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
---
 builtin/fetch-pack.c | 15 ++++++---------
 1 file changed, 6 insertions(+), 9 deletions(-)
diff --git a/builtin/fetch-pack.c b/builtin/fetch-pack.c
index ca1ddd9..a995357 100644
--- a/builtin/fetch-pack.c
+++ b/builtin/fetch-pack.c
@@ -527,14 +527,13 @@ static void filter_refs(struct ref **refs, int *nr_heads, char **heads)
 	struct ref *newlist = NULL;
 	struct ref **newtail = &newlist;
 	struct ref *ref, *next;
-	int head_pos;
+	int head_pos = 0, matched = 0;
 
 	if (*nr_heads && !args.fetch_all)
 		return_refs = xcalloc(*nr_heads, sizeof(struct ref *));
 	else
 		return_refs = NULL;
 
-	head_pos = 0;
 	for (ref = *refs; ref; ref = next) {
 		next = ref->next;
 		if (!memcmp(ref->name, "refs/", 5) &&
@@ -554,7 +553,7 @@ static void filter_refs(struct ref **refs, int *nr_heads, char **heads)
 				if (cmp < 0) /* definitely do not have it */
 					break;
 				else if (cmp == 0) { /* definitely have it */
-					return_refs[head_pos] = ref;
+					return_refs[matched++] = ref;
 					heads[head_pos++][0] = '\0';
 					break;
 				}
@@ -569,13 +568,11 @@ static void filter_refs(struct ref **refs, int *nr_heads, char **heads)
 
 	if (!args.fetch_all) {
 		int i;
-		for (i = 0; i < *nr_heads; i++) {
+		for (i = 0; i < matched; i++) {
 			ref = return_refs[i];
-			if (ref) {
-				*newtail = ref;
-				ref->next = NULL;
-				newtail = &ref->next;
-			}
+			*newtail = ref;
+			ref->next = NULL;
+			newtail = &ref->next;
 		}
 		free(return_refs);
 	}
-- 
1.7.11.3
Previous: mhagger@alum.mit.eduNext: mhagger@alum.mit.edu
Message 12 of 19 in “Clean up how fetch_pack() handles the heads list”
  1. 00/17 Clean up how fetch_pack() handles the heads listmhagger@alum.mit.edu, Aug 25, 2012
  2. 01/17 t5500: add tests of error output for missing refsmhagger@alum.mit.edu, Aug 25, 2012
  3. 02/17 Rename static function fetch_pack() to http_fetch_pack()mhagger@alum.mit.edu, Aug 25, 2012
  4. 03/17 Fix formatting.mhagger@alum.mit.edu, Aug 25, 2012
  5. 04/17 Name local variables more consistentlymhagger@alum.mit.edu, Aug 25, 2012
  6. 05/17 Do not check the same head_pos twicemhagger@alum.mit.edu, Aug 25, 2012
  7. 06/17 Let fetch_pack() inform caller about number of unique headsmhagger@alum.mit.edu, Aug 25, 2012
  8. 07/17 Pass nr_heads to do_pack_ref() by referencemhagger@alum.mit.edu, Aug 25, 2012
  9. 08/17 Pass nr_heads to everything_local() by referencemhagger@alum.mit.edu, Aug 25, 2012
  10. 09/17 Pass nr_heads to filter_refs() by referencemhagger@alum.mit.edu, Aug 25, 2012
  11. 10/17 Remove ineffective optimizationmhagger@alum.mit.edu, Aug 25, 2012
  12. 11/17 filter_refs(): do not leave gaps in return_refsmhagger@alum.mit.edu, Aug 25, 2012
  13. 12/17 filter_refs(): compress unmatched refs in heads arraymhagger@alum.mit.edu, Aug 25, 2012
  14. 13/17 cmd_fetch_pack: return early if finish_connect() returns an errormhagger@alum.mit.edu, Aug 25, 2012
  15. 14/17 Report missing refs even if no existing refs were receivedmhagger@alum.mit.edu, Aug 25, 2012
  16. 15/17 cmd_fetch_pack(): simplify computation of return valuemhagger@alum.mit.edu, Aug 25, 2012
  17. 16/17 fetch_pack(): free matching headsmhagger@alum.mit.edu, Aug 25, 2012
  18. 17/17 filter_refs(): simplify logicmhagger@alum.mit.edu, Aug 25, 2012
  19. Junio C HamanoAug 26, 2012

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.