Skip to content

Commit

Permalink
Fix tag following
Browse files Browse the repository at this point in the history
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>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Daniel Barkalow authored and Junio C Hamano committed Mar 19, 2008
1 parent 7d00419 commit 420e9af
Showing 1 changed file with 16 additions and 0 deletions.
16 changes: 16 additions & 0 deletions builtin-fetch-pack.c
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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;
Expand Down

0 comments on commit 420e9af

Please sign in to comment.