transport: convert transport_get_remote_refs to take a list of ref prefixes
Teach transport_get_remote_refs() to accept a list of ref prefixes, which will be sent to the server for use in filtering when using protocol v2. (This list will be ignored when not using protocol v2.) Signed-off-by: Brandon Williams <bmwill@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:

committed by
Junio C Hamano

parent
834cf34b26
commit
1af8ae1cfa
@ -1104,7 +1104,7 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
|
|||||||
if (transport->smart_options && !deepen)
|
if (transport->smart_options && !deepen)
|
||||||
transport->smart_options->check_self_contained_and_connected = 1;
|
transport->smart_options->check_self_contained_and_connected = 1;
|
||||||
|
|
||||||
refs = transport_get_remote_refs(transport);
|
refs = transport_get_remote_refs(transport, NULL);
|
||||||
|
|
||||||
if (refs) {
|
if (refs) {
|
||||||
mapped_refs = wanted_peer_refs(refs, refspec);
|
mapped_refs = wanted_peer_refs(refs, refspec);
|
||||||
|
@ -250,7 +250,7 @@ static void find_non_local_tags(struct transport *transport,
|
|||||||
struct string_list_item *item = NULL;
|
struct string_list_item *item = NULL;
|
||||||
|
|
||||||
for_each_ref(add_existing, &existing_refs);
|
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); ref; ref = ref->next) {
|
||||||
if (!starts_with(ref->name, "refs/tags/"))
|
if (!starts_with(ref->name, "refs/tags/"))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
@ -336,7 +336,7 @@ static struct ref *get_ref_map(struct transport *transport,
|
|||||||
/* opportunistically-updated references: */
|
/* opportunistically-updated references: */
|
||||||
struct ref *orefs = NULL, **oref_tail = &orefs;
|
struct ref *orefs = NULL, **oref_tail = &orefs;
|
||||||
|
|
||||||
const struct ref *remote_refs = transport_get_remote_refs(transport);
|
const struct ref *remote_refs = transport_get_remote_refs(transport, NULL);
|
||||||
|
|
||||||
if (refspec_count) {
|
if (refspec_count) {
|
||||||
struct refspec *fetch_refspec;
|
struct refspec *fetch_refspec;
|
||||||
|
@ -96,7 +96,7 @@ int cmd_ls_remote(int argc, const char **argv, const char *prefix)
|
|||||||
if (uploadpack != NULL)
|
if (uploadpack != NULL)
|
||||||
transport_set_option(transport, TRANS_OPT_UPLOADPACK, uploadpack);
|
transport_set_option(transport, TRANS_OPT_UPLOADPACK, uploadpack);
|
||||||
|
|
||||||
ref = transport_get_remote_refs(transport);
|
ref = transport_get_remote_refs(transport, NULL);
|
||||||
if (transport_disconnect(transport))
|
if (transport_disconnect(transport))
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
|
@ -862,7 +862,7 @@ static int get_remote_ref_states(const char *name,
|
|||||||
if (query) {
|
if (query) {
|
||||||
transport = transport_get(states->remote, states->remote->url_nr > 0 ?
|
transport = transport_get(states->remote, states->remote->url_nr > 0 ?
|
||||||
states->remote->url[0] : NULL);
|
states->remote->url[0] : NULL);
|
||||||
remote_refs = transport_get_remote_refs(transport);
|
remote_refs = transport_get_remote_refs(transport, NULL);
|
||||||
transport_disconnect(transport);
|
transport_disconnect(transport);
|
||||||
|
|
||||||
states->queried = 1;
|
states->queried = 1;
|
||||||
|
@ -1138,10 +1138,13 @@ int transport_push(struct transport *transport,
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
const struct ref *transport_get_remote_refs(struct transport *transport)
|
const struct ref *transport_get_remote_refs(struct transport *transport,
|
||||||
|
const struct argv_array *ref_prefixes)
|
||||||
{
|
{
|
||||||
if (!transport->got_remote_refs) {
|
if (!transport->got_remote_refs) {
|
||||||
transport->remote_refs = transport->vtable->get_refs_list(transport, 0, NULL);
|
transport->remote_refs =
|
||||||
|
transport->vtable->get_refs_list(transport, 0,
|
||||||
|
ref_prefixes);
|
||||||
transport->got_remote_refs = 1;
|
transport->got_remote_refs = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
12
transport.h
12
transport.h
@ -178,7 +178,17 @@ int transport_push(struct transport *connection,
|
|||||||
int refspec_nr, const char **refspec, int flags,
|
int refspec_nr, const char **refspec, int flags,
|
||||||
unsigned int * reject_reasons);
|
unsigned int * reject_reasons);
|
||||||
|
|
||||||
const struct ref *transport_get_remote_refs(struct transport *transport);
|
/*
|
||||||
|
* Retrieve refs from a remote.
|
||||||
|
*
|
||||||
|
* Optionally a list of ref prefixes can be provided which can be sent to the
|
||||||
|
* server (when communicating using protocol v2) to enable it to limit the ref
|
||||||
|
* advertisement. Since ref filtering is done on the server's end (and only
|
||||||
|
* when using protocol v2), this can return refs which don't match the provided
|
||||||
|
* ref_prefixes.
|
||||||
|
*/
|
||||||
|
const struct ref *transport_get_remote_refs(struct transport *transport,
|
||||||
|
const struct argv_array *ref_prefixes);
|
||||||
|
|
||||||
int transport_fetch_refs(struct transport *transport, struct ref *refs);
|
int transport_fetch_refs(struct transport *transport, struct ref *refs);
|
||||||
void transport_unlock_pack(struct transport *transport);
|
void transport_unlock_pack(struct transport *transport);
|
||||||
|
Reference in New Issue
Block a user