fetch-pack: clear marks before re-marking
commitaf008558cc2e16c96ddafc6c7a9453ea3d18957b
authorJonathan Tan <jonathantanmy@google.com>
Wed, 6 Jun 2018 20:47:08 +0000 (6 13:47 -0700)
committerJunio C Hamano <gitster@pobox.com>
Thu, 14 Jun 2018 18:31:24 +0000 (14 11:31 -0700)
tree037af2a90475bd599396667ea27bb7ebe72f9c4d
parent34c2903456046e194b3c3cde23e108a788571ffd
fetch-pack: clear marks before re-marking

If tag following is required when using a transport that does not
support tag following, fetch_pack() will be invoked twice in the same
process, necessitating a clearing of the object flags used by
fetch_pack() sometime during the second invocation. This is currently
done in find_common(), which means that the invocation of
mark_complete_and_common_ref() in do_fetch_pack() is useless.

(This cannot be reproduced with Git alone, because all transports that
come with Git support tag following.)

Therefore, move this clearing from find_common() to its
parent function do_fetch_pack(), right before it calls
mark_complete_and_common_ref().

This has been occurring since the commit that introduced the clearing of
marks, 420e9af498 ("Fix tag following", 2008-03-19).

The corresponding code for protocol v2 in do_fetch_pack_v2() does not
have this problem, as the clearing of flags is done before any marking
(whether by rev_list_insert_ref_oid() or
mark_complete_and_common_ref()).

Signed-off-by: Jonathan Tan <jonathantanmy@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
fetch-pack.c