From: David Turner <dturner@twopensource.com>
To: git@vger.kernel.org
Cc: David Turner <dturner@twopensource.com>
Subject: [PATCH/RFC 4/6] transport: add refspec list parameters to functions
Date: Fri, 15 Apr 2016 15:19:07 -0400 [thread overview]
Message-ID: <1460747949-3514-5-git-send-email-dturner@twopensource.com> (raw)
In-Reply-To: <1460747949-3514-1-git-send-email-dturner@twopensource.com>
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 <dturner@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
next prev parent reply other threads:[~2016-04-15 19:19 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-04-15 19:19 [PATCH/RFC 0/6] fetch with refspec David Turner
2016-04-15 19:19 ` [PATCH/RFC 1/6] http-backend: use argv_array functions David Turner
2016-04-18 18:34 ` Junio C Hamano
2016-04-19 19:11 ` David Turner
2016-04-15 19:19 ` [PATCH/RFC 2/6] remote-curl.c: fix variable shadowing David Turner
2016-04-18 18:35 ` Junio C Hamano
2016-04-19 19:14 ` David Turner
2016-04-15 19:19 ` [PATCH/RFC 3/6] http-backend: handle refspec argument David Turner
2016-04-17 1:51 ` Eric Sunshine
2016-04-19 18:57 ` David Turner
2016-04-15 19:19 ` David Turner [this message]
2016-04-18 18:45 ` [PATCH/RFC 4/6] transport: add refspec list parameters to functions Junio C Hamano
2016-04-19 7:14 ` Jeff King
2016-04-19 18:04 ` Stefan Beller
2016-04-19 20:55 ` Junio C Hamano
2016-04-19 21:40 ` David Turner
2016-04-19 23:22 ` Jeff King
2016-04-19 23:43 ` David Turner
2016-04-20 1:17 ` Jeff King
2016-04-20 20:46 ` David Turner
2016-04-20 20:57 ` Jeff King
2016-04-25 16:44 ` David Turner
2016-04-25 22:10 ` Stefan Beller
2016-04-27 3:59 ` Stefan Beller
2016-04-27 4:11 ` Jeff King
2016-04-27 15:07 ` Junio C Hamano
2016-04-29 23:05 ` David Turner
2016-04-29 23:12 ` Stefan Beller
2016-04-19 19:31 ` David Turner
2016-04-15 19:19 ` [PATCH/RFC 5/6] fetch: pass refspec to http server David Turner
2016-04-17 2:33 ` Eric Sunshine
2016-04-19 21:25 ` David Turner
2016-04-15 19:19 ` [PATCH/RFC 6/6] clone: send refspec for single-branch clones David Turner
2016-04-17 2:36 ` Eric Sunshine
2016-04-19 21:24 ` David Turner
2016-04-15 19:30 ` [PATCH/RFC 0/6] fetch with refspec Stefan Beller
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: http://vger.kernel.org/majordomo-info.html
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1460747949-3514-5-git-send-email-dturner@twopensource.com \
--to=dturner@twopensource.com \
--cc=git@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://80x24.org/mirrors/git.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).