Add parameters for a list of refspecs to transport_get_remote_refs and
get_refs_list.  These parameters are presently unused -- soon, we will
use them to implement fetches which only learn about a subset of refs.

Signed-off-by: David Turner <dtur...@twopensource.com>
---
 builtin/clone.c     |  2 +-
 builtin/fetch.c     |  6 ++++--
 builtin/ls-remote.c |  2 +-
 builtin/remote.c    |  2 +-
 transport-helper.c  | 24 ++++++++++++------------
 transport.c         | 14 ++++++++------
 transport.h         |  4 ++--
 7 files changed, 29 insertions(+), 25 deletions(-)

diff --git a/builtin/clone.c b/builtin/clone.c
index 6616392..91f668c 100644
--- a/builtin/clone.c
+++ b/builtin/clone.c
@@ -1010,7 +1010,7 @@ int cmd_clone(int argc, const char **argv, const char 
*prefix)
        if (transport->smart_options && !option_depth)
                transport->smart_options->check_self_contained_and_connected = 
1;
 
-       refs = transport_get_remote_refs(transport);
+       refs = transport_get_remote_refs(transport, NULL, 0);
 
        if (refs) {
                mapped_refs = wanted_peer_refs(refs, refspec);
diff --git a/builtin/fetch.c b/builtin/fetch.c
index e4639d8..cafab37 100644
--- a/builtin/fetch.c
+++ b/builtin/fetch.c
@@ -221,7 +221,8 @@ static void find_non_local_tags(struct transport *transport,
        struct string_list_item *item = NULL;
 
        for_each_ref(add_existing, &existing_refs);
-       for (ref = transport_get_remote_refs(transport); ref; ref = ref->next) {
+       for (ref = transport_get_remote_refs(transport, NULL, 0);
+            ref; ref = ref->next) {
                if (!starts_with(ref->name, "refs/tags/"))
                        continue;
 
@@ -301,8 +302,9 @@ static struct ref *get_ref_map(struct transport *transport,
 
        /* opportunistically-updated references: */
        struct ref *orefs = NULL, **oref_tail = &orefs;
+       const struct ref *remote_refs;
 
-       const struct ref *remote_refs = transport_get_remote_refs(transport);
+       remote_refs = transport_get_remote_refs(transport, NULL, 0);
 
        if (refspec_count) {
                struct refspec *fetch_refspec;
diff --git a/builtin/ls-remote.c b/builtin/ls-remote.c
index 66cdd45..bce706e 100644
--- a/builtin/ls-remote.c
+++ b/builtin/ls-remote.c
@@ -94,7 +94,7 @@ int cmd_ls_remote(int argc, const char **argv, const char 
*prefix)
        if (uploadpack != NULL)
                transport_set_option(transport, TRANS_OPT_UPLOADPACK, 
uploadpack);
 
-       ref = transport_get_remote_refs(transport);
+       ref = transport_get_remote_refs(transport, NULL, 0);
        if (transport_disconnect(transport))
                return 1;
 
diff --git a/builtin/remote.c b/builtin/remote.c
index fda5c2e..5745e8b 100644
--- a/builtin/remote.c
+++ b/builtin/remote.c
@@ -862,7 +862,7 @@ static int get_remote_ref_states(const char *name,
        if (query) {
                transport = transport_get(states->remote, 
states->remote->url_nr > 0 ?
                        states->remote->url[0] : NULL);
-               remote_refs = transport_get_remote_refs(transport);
+               remote_refs = transport_get_remote_refs(transport, NULL, 0);
                transport_disconnect(transport);
 
                states->queried = 1;
diff --git a/transport-helper.c b/transport-helper.c
index b934183..b5c91d2 100644
--- a/transport-helper.c
+++ b/transport-helper.c
@@ -99,7 +99,7 @@ static void do_take_over(struct transport *transport)
 
 static void standard_options(struct transport *t);
 
-static struct child_process *get_helper(struct transport *transport)
+static struct child_process *get_helper(struct transport *transport, const 
struct refspec *req_refspecs, int req_refspec_nr)
 {
        struct helper_data *data = transport->data;
        struct strbuf buf = STRBUF_INIT;
@@ -267,7 +267,7 @@ static int set_helper_option(struct transport *transport,
        struct strbuf buf = STRBUF_INIT;
        int i, ret, is_bool = 0;
 
-       get_helper(transport);
+       get_helper(transport, NULL, 0);
 
        if (!data->option)
                return 1;
@@ -395,7 +395,7 @@ static int fetch_with_fetch(struct transport *transport,
 
 static int get_importer(struct transport *transport, struct child_process 
*fastimport)
 {
-       struct child_process *helper = get_helper(transport);
+       struct child_process *helper = get_helper(transport, NULL, 0);
        struct helper_data *data = transport->data;
        int cat_blob_fd, code;
        child_process_init(fastimport);
@@ -418,7 +418,7 @@ static int get_exporter(struct transport *transport,
                        struct string_list *revlist_args)
 {
        struct helper_data *data = transport->data;
-       struct child_process *helper = get_helper(transport);
+       struct child_process *helper = get_helper(transport, NULL, 0);
        int i;
 
        child_process_init(fastexport);
@@ -451,7 +451,7 @@ static int fetch_with_import(struct transport *transport,
        struct ref *posn;
        struct strbuf buf = STRBUF_INIT;
 
-       get_helper(transport);
+       get_helper(transport, NULL, 0);
 
        if (get_importer(transport, &fastimport))
                die("Couldn't run fast-import");
@@ -523,7 +523,7 @@ static int process_connect_service(struct transport 
*transport,
        int r, duped, ret = 0;
        FILE *input;
 
-       helper = get_helper(transport);
+       helper = get_helper(transport, NULL, 0);
 
        /*
         * Yes, dup the pipe another time, as we need unbuffered version
@@ -599,7 +599,7 @@ static int connect_helper(struct transport *transport, 
const char *name,
        struct helper_data *data = transport->data;
 
        /* Get_helper so connect is inited. */
-       get_helper(transport);
+       get_helper(transport, NULL, 0);
        if (!data->connect)
                die("Operation not supported by protocol.");
 
@@ -805,7 +805,7 @@ static int push_refs_with_push(struct transport *transport,
        struct string_list cas_options = STRING_LIST_INIT_DUP;
        struct string_list_item *cas_option;
 
-       get_helper(transport);
+       get_helper(transport, NULL, 0);
        if (!data->push)
                return 1;
 
@@ -888,7 +888,7 @@ static int push_refs_with_export(struct transport 
*transport,
                        warning("helper %s does not support 'force'", 
data->name);
        }
 
-       helper = get_helper(transport);
+       helper = get_helper(transport, NULL, 0);
 
        write_constant(helper->in, "export\n");
 
@@ -992,7 +992,7 @@ static int has_attribute(const char *attrs, const char 
*attr) {
        }
 }
 
-static struct ref *get_refs_list(struct transport *transport, int for_push)
+static struct ref *get_refs_list(struct transport *transport, const struct 
refspec *refspecs, int refspec_count, int for_push)
 {
        struct helper_data *data = transport->data;
        struct child_process *helper;
@@ -1001,11 +1001,11 @@ static struct ref *get_refs_list(struct transport 
*transport, int for_push)
        struct ref *posn;
        struct strbuf buf = STRBUF_INIT;
 
-       helper = get_helper(transport);
+       helper = get_helper(transport, refspecs, refspec_count);
 
        if (process_connect(transport, for_push)) {
                do_take_over(transport);
-               return transport->get_refs_list(transport, for_push);
+               return transport->get_refs_list(transport, refspecs, 
refspec_count, for_push);
        }
 
        if (data->push && for_push)
diff --git a/transport.c b/transport.c
index 095e61f..e241e42 100644
--- a/transport.c
+++ b/transport.c
@@ -70,7 +70,9 @@ struct bundle_transport_data {
        struct bundle_header header;
 };
 
-static struct ref *get_refs_from_bundle(struct transport *transport, int 
for_push)
+static struct ref *get_refs_from_bundle(struct transport *transport,
+                                       const struct refspec *refspecs,
+                                       int refspec_count, int for_push)
 {
        struct bundle_transport_data *data = transport->data;
        struct ref *result = NULL;
@@ -177,7 +179,7 @@ static int connect_setup(struct transport *transport, int 
for_push)
        return 0;
 }
 
-static struct ref *get_refs_via_connect(struct transport *transport, int 
for_push)
+static struct ref *get_refs_via_connect(struct transport *transport, const 
struct refspec *refspecs, int refspec_count, int for_push)
 {
        struct git_transport_data *data = transport->data;
        struct ref *refs;
@@ -870,7 +872,7 @@ int transport_push(struct transport *transport,
                if (check_push_refs(local_refs, refspec_nr, refspec) < 0)
                        return -1;
 
-               remote_refs = transport->get_refs_list(transport, 1);
+               remote_refs = transport->get_refs_list(transport, NULL, 0, 1);
 
                if (flags & TRANSPORT_PUSH_ALL)
                        match_flags |= MATCH_REFS_ALL;
@@ -949,10 +951,10 @@ int transport_push(struct transport *transport,
        return 1;
 }
 
-const struct ref *transport_get_remote_refs(struct transport *transport)
+const struct ref *transport_get_remote_refs(struct transport *transport, const 
struct refspec *refspecs, int refspec_count)
 {
        if (!transport->got_remote_refs) {
-               transport->remote_refs = transport->get_refs_list(transport, 0);
+               transport->remote_refs = transport->get_refs_list(transport, 
refspecs, refspec_count, 0);
                transport->got_remote_refs = 1;
        }
 
@@ -1099,7 +1101,7 @@ static int refs_from_alternate_cb(struct 
alternate_object_database *e,
        other[len - 8] = '\0';
        remote = remote_get(other);
        transport = transport_get(remote, other);
-       for (extra = transport_get_remote_refs(transport);
+       for (extra = transport_get_remote_refs(transport, NULL, 0);
             extra;
             extra = extra->next)
                cb->fn(extra, cb->data);
diff --git a/transport.h b/transport.h
index c681408..e53d860 100644
--- a/transport.h
+++ b/transport.h
@@ -65,7 +65,7 @@ struct transport {
         * the ref without a huge amount of effort, it should store it
         * in the ref's old_sha1 field; otherwise it should be all 0.
         **/
-       struct ref *(*get_refs_list)(struct transport *transport, int for_push);
+       struct ref *(*get_refs_list)(struct transport *transport, const struct 
refspec *refspecs, int refspec_count, int for_push);
 
        /**
         * Fetch the objects for the given refs. Note that this gets
@@ -207,7 +207,7 @@ int transport_push(struct transport *connection,
                   int refspec_nr, const char **refspec, int flags,
                   unsigned int * reject_reasons);
 
-const struct ref *transport_get_remote_refs(struct transport *transport);
+const struct ref *transport_get_remote_refs(struct transport *transport, const 
struct refspec *refspecs, int refspec_count);
 
 int transport_fetch_refs(struct transport *transport, struct ref *refs);
 void transport_unlock_pack(struct transport *transport);
-- 
2.4.2.767.g62658d5-twtrsrc

--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to