fetch: refactor code that fetches leftover tags
authorJunio C Hamano <gitster@pobox.com>
Wed, 7 Aug 2013 22:14:45 +0000 (15:14 -0700)
committerJunio C Hamano <gitster@pobox.com>
Wed, 7 Aug 2013 23:24:30 +0000 (16:24 -0700)
Usually the upload-pack process running on the other side will give
us all the reachable tags we need during the primary object transfer
in do_fetch(). If that does not happen (e.g. the other side may be
running a third-party implementation of upload-pack), we will run
another fetch to pick up leftover tags that we know point at the
commits reachable from our updated tips.

Separate out the code to run this second fetch into a helper
function.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/fetch.c
index 39a3fc8dea3172cb430eef4a242f0e526fb89f06..0b21f071b37831b77c404549628ec118ec8ad45e 100644 (file)
@@ -745,6 +745,13 @@ struct transport *prepare_transport(struct remote *remote)
        return transport;
 }
 
+static void backfill_tags(struct transport *transport, struct ref *ref_map)
+{
+       transport_set_option(transport, TRANS_OPT_FOLLOWTAGS, NULL);
+       transport_set_option(transport, TRANS_OPT_DEPTH, "0");
+       fetch_refs(transport, ref_map);
+}
+
 static int do_fetch(struct transport *transport,
                    struct refspec *refs, int ref_count)
 {
@@ -828,11 +835,8 @@ static int do_fetch(struct transport *transport,
                struct ref **tail = &ref_map;
                ref_map = NULL;
                find_non_local_tags(transport, &ref_map, &tail);
-               if (ref_map) {
-                       transport_set_option(transport, TRANS_OPT_FOLLOWTAGS, NULL);
-                       transport_set_option(transport, TRANS_OPT_DEPTH, "0");
-                       fetch_refs(transport, ref_map);
-               }
+               if (ref_map)
+                       backfill_tags(transport, ref_map);
                free_refs(ref_map);
        }