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

[PATCH] Fix tag following

From
Daniel Barkalow <barkalow@iabervon.org>
Date
Mar 18, 2008, 02:15 UTC
Message-ID
<alpine.LNX.1.00.0803172211060.19665@iabervon.org>

Before the second fetch-pack connection in the same process, unmark all of the objects marked in the first connection, in order that we'll list them as things we have instead of thinking we've already mentioned them.

Signed-off-by: Daniel Barkalow <barkalow@iabervon.org>
---
This fixes David Brownell's test case, at least as far as failing to find 
any common commits. There's still some issue I haven't been able to track 
down where it seems to list the same "have" values for refs the second 
time, despite them having been updated, but that's a much much smaller 
issue.
 builtin-fetch-pack.c |   16 ++++++++++++++++
 1 files changed, 16 insertions(+), 0 deletions(-)
diff --git a/builtin-fetch-pack.c b/builtin-fetch-pack.c
index 7b28024..65350ca 100644
--- a/builtin-fetch-pack.c
+++ b/builtin-fetch-pack.c
@@ -26,6 +26,8 @@ static const char fetch_pack_usage[] =
 #define SEEN		(1U << 3)
 #define POPPED		(1U << 4)
 
+static int marked;
+
 /*
  * After sending this many "have"s if we do not get any new ACK , we
  * give up traversing our history.
@@ -61,6 +63,16 @@ static int rev_list_insert_ref(const char *path, const unsigned char *sha1, int
 	return 0;
 }
 
+static int clear_marks(const char *path, const unsigned char *sha1, int flag, void *cb_data)
+{
+	struct object *o = deref_tag(parse_object(sha1), path, 0);
+
+	if (o && o->type == OBJ_COMMIT)
+		clear_commit_marks((struct commit *)o,
+				   COMMON | COMMON_REF | SEEN | POPPED);
+	return 0;
+}
+
 /*
    This function marks a rev and its ancestors as common.
    In some cases, it is desirable to mark only the ancestors (for example
@@ -153,6 +165,10 @@ static int find_common(int fd[2], unsigned char *result_sha1,
 	unsigned in_vain = 0;
 	int got_continue = 0;
 
+	if (marked)
+		for_each_ref(clear_marks, NULL);
+	marked = 1;
+
 	for_each_ref(rev_list_insert_ref, NULL);
 
 	fetching = 0;
-- 
1.5.4.3.610.gea6cd
Next: Johannes Schindelin
Message 1 of 2 in “Fix tag following”
  1. Fix tag followingDaniel Barkalow, Mar 18, 2008
  2. Johannes SchindelinMar 19, 2008

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.