fetch: fix regression with transport helpers
authorFelipe Contreras <felipe.contreras@gmail.com>
Tue, 4 Jun 2019 02:13:30 +0000 (21:13 -0500)
committerJunio C Hamano <gitster@pobox.com>
Tue, 4 Jun 2019 18:28:58 +0000 (11:28 -0700)
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>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/fetch.c
t/t5801-remote-helpers.sh
index 0bf8fa7030fec46984503f80c9046b73f57fe648..e485d429c9e7f580010a4ee6a011106954d17ad5 100644 (file)
@@ -237,6 +237,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];
 };
 
@@ -287,7 +288,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,
@@ -373,7 +374,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;
 
                rm = alloc_ref(item->refname);
index 4138354e00668f824bc39ce6198a74667d0476a9..1829ef29c75b2224c61081ee8c57c091cd2e1451 100755 (executable)
@@ -301,7 +301,7 @@ test_expect_success 'fetch url' '
        compare_refs server HEAD local FETCH_HEAD
 '
 
-test_expect_failure 'fetch tag' '
+test_expect_success 'fetch tag' '
        (cd server &&
         git tag v1.0
        ) &&