clone: support remote shallow repository
[gitweb.git] / transport.c
index 90453df9c6ffc08b39a49002e31468d4ff6f5b3d..91c466742e160bd2184931f4c4c8fe4f227d95d7 100644 (file)
@@ -456,6 +456,7 @@ struct git_transport_data {
        int fd[2];
        unsigned got_remote_heads : 1;
        struct sha1_array extra_have;
+       struct sha1_array shallow;
 };
 
 static int set_git_option(struct git_transport_options *opts,
@@ -512,7 +513,9 @@ static struct ref *get_refs_via_connect(struct transport *transport, int for_pus
 
        connect_setup(transport, for_push, 0);
        get_remote_heads(data->fd[0], NULL, 0, &refs,
-                        for_push ? REF_NORMAL : 0, &data->extra_have, NULL);
+                        for_push ? REF_NORMAL : 0,
+                        &data->extra_have,
+                        transport->cloning ? &data->shallow : NULL);
        data->got_remote_heads = 1;
 
        return refs;
@@ -539,17 +542,19 @@ static int fetch_refs_via_pack(struct transport *transport,
        args.depth = data->options.depth;
        args.check_self_contained_and_connected =
                data->options.check_self_contained_and_connected;
+       args.cloning = transport->cloning;
 
        if (!data->got_remote_heads) {
                connect_setup(transport, 0, 0);
                get_remote_heads(data->fd[0], NULL, 0, &refs_tmp, 0,
-                                NULL, NULL);
+                                NULL,
+                                transport->cloning ? &data->shallow : NULL);
                data->got_remote_heads = 1;
        }
 
        refs = fetch_pack(&args, data->fd, data->conn,
                          refs_tmp ? refs_tmp : transport->remote_refs,
-                         dest, to_fetch, nr_heads,
+                         dest, to_fetch, nr_heads, &data->shallow,
                          &transport->pack_lockfile);
        close(data->fd[0]);
        close(data->fd[1]);