diff options
author | Ilari Liusvaara <ilari.liusvaara@elisanet.fi> | 2009-12-09 17:26:33 +0200 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2009-12-28 00:24:15 -0800 |
commit | b236752a8722c77b5a9b4ed488a992ee05252843 (patch) | |
tree | 4035f35d52c4e5a24c0dd3ddddcac76bcae6dc04 /transport-helper.c | |
parent | fa8c097cc9b416283ae4c1c1507909ff207b7f60 (diff) | |
download | git-b236752a8722c77b5a9b4ed488a992ee05252843.tar.gz git-b236752a8722c77b5a9b4ed488a992ee05252843.tar.xz |
Support remote archive from all smart transports
Previously, remote archive required internal (non remote-helper)
smart transport. Extend the remote archive to also support smart
transports implemented by remote helpers.
Signed-off-by: Ilari Liusvaara <ilari.liusvaara@elisanet.fi>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'transport-helper.c')
-rw-r--r-- | transport-helper.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/transport-helper.c b/transport-helper.c index 50b3bac0c..6ece0d987 100644 --- a/transport-helper.c +++ b/transport-helper.c @@ -467,6 +467,24 @@ static int process_connect(struct transport *transport, return process_connect_service(transport, name, exec); } +static int connect_helper(struct transport *transport, const char *name, + const char *exec, int fd[2]) +{ + struct helper_data *data = transport->data; + + /* Get_helper so connect is inited. */ + get_helper(transport); + if (!data->connect) + die("Operation not supported by protocol."); + + if (!process_connect_service(transport, name, exec)) + die("Can't connect to subservice %s.", name); + + fd[0] = data->helper->out; + fd[1] = data->helper->in; + return 0; +} + static int fetch(struct transport *transport, int nr_heads, struct ref **to_fetch) { @@ -711,6 +729,7 @@ int transport_helper_init(struct transport *transport, const char *name) transport->fetch = fetch; transport->push_refs = push_refs; transport->disconnect = release_helper; + transport->connect = connect_helper; transport->smart_options = &(data->transport_options); return 0; } |