Re: [RFC/PATCH 5/5] fetch: fix regression with transport helpers
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Jun 4, 2019, 19:17 UTC
- Message-ID
- <xmqqd0jttb1b.fsf@gitster-ct.c.googlers.com>
- In-Reply-To
- <20190604021330.16130-6-felipe.contreras@gmail.com>
Felipe Contreras <felipe.contreras@gmail.com> writes:
Show 46 quoted lines
> Commit e198b3a740 changed the behavior of fetch with regards to tags.
> Before, null oids where not ignored, now they are, regardless of whether
> the refs have been explicitly cleared or not.
>
> e198b3a740 (fetch: replace string-list used as a look-up table with a hashmap)
>
> When using a transport helper the oids can certainly be null. So now
> tags are ignored and fetching them is impossible.
>
> This patch fixes that by having a specific flag that is set only when we
> explicitly want to ignore the refs, restoring the original behavior.
>
> Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
> ---
> builtin/fetch.c | 5 +++--
> t/t5801-remote-helpers.sh | 2 +-
> 2 files changed, 4 insertions(+), 3 deletions(-)
>
> diff --git a/builtin/fetch.c b/builtin/fetch.c
> index 9dc551551e..f2be50a4a3 100644
> --- a/builtin/fetch.c
> +++ b/builtin/fetch.c
> @@ -239,6 +239,7 @@ static int will_fetch(struct ref **head, const unsigned char *sha1)
> struct refname_hash_entry {
> struct hashmap_entry ent; /* must be the first member */
> struct object_id oid;
> + int ignore;
> char refname[FLEX_ARRAY];
> };
>
> @@ -289,7 +290,7 @@ static int refname_hash_exists(struct hashmap *map, const char *refname)
>
> static void clear_item(struct refname_hash_entry *item)
> {
> - oidclr(&item->oid);
> + item->ignore = 1;
> }
>
> static void find_non_local_tags(const struct ref *refs,
> @@ -374,7 +375,7 @@ static void find_non_local_tags(const struct ref *refs,
> BUG("unseen remote ref?");
>
> /* Unless we have already decided to ignore this item... */
> - if (is_null_oid(&item->oid))
> + if (item->ignore)
> continue;Yeah, we should have added a bit like this to preserve the distinction between a NULL pointer for "struct object_id" and oid that has 0{40} in the old code, which was lost in the conversion.
Thanks for spotting and fixing.