summaryrefslogtreecommitdiff
path: root/builtin-archive.c
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2010-01-13 20:30:39 (GMT)
committerJunio C Hamano <gitster@pobox.com>2010-01-13 20:30:39 (GMT)
commitbd33a29283819f1eb1b9ddcb3f1a22c268af8679 (patch)
treef930e9e156b38ceef4ac3bdccb5cc29ff797461f /builtin-archive.c
parentdc96c5ee703fb7265619b1ecb2b5f2c5ab3ef40d (diff)
parent27a557a9ff9273ad47aa29c52e9903cf6405f7f7 (diff)
downloadgit-bd33a29283819f1eb1b9ddcb3f1a22c268af8679.zip
git-bd33a29283819f1eb1b9ddcb3f1a22c268af8679.tar.gz
git-bd33a29283819f1eb1b9ddcb3f1a22c268af8679.tar.bz2
Merge branch 'il/vcs-helper'
* il/vcs-helper: Reset possible helper before reusing remote structure Remove special casing of http, https and ftp Support remote archive from all smart transports Support remote helpers implementing smart transports Support taking over transports Refactor git transport options parsing Pass unknown protocols to external protocol handlers Support mandatory capabilities Add remote helper debug mode Conflicts: Documentation/git-remote-helpers.txt transport-helper.c
Diffstat (limited to 'builtin-archive.c')
-rw-r--r--builtin-archive.c17
1 files changed, 10 insertions, 7 deletions
diff --git a/builtin-archive.c b/builtin-archive.c
index 446d6bf..3fb4136 100644
--- a/builtin-archive.c
+++ b/builtin-archive.c
@@ -5,6 +5,7 @@
#include "cache.h"
#include "builtin.h"
#include "archive.h"
+#include "transport.h"
#include "parse-options.h"
#include "pkt-line.h"
#include "sideband.h"
@@ -25,12 +26,16 @@ static void create_output_file(const char *output_file)
static int run_remote_archiver(int argc, const char **argv,
const char *remote, const char *exec)
{
- char *url, buf[LARGE_PACKET_MAX];
+ char buf[LARGE_PACKET_MAX];
int fd[2], i, len, rv;
- struct child_process *conn;
+ struct transport *transport;
+ struct remote *_remote;
- url = xstrdup(remote);
- conn = git_connect(fd, url, exec, 0);
+ _remote = remote_get(remote);
+ if (!_remote->url[0])
+ die("git archive: Remote with no URL");
+ transport = transport_get(_remote, _remote->url[0]);
+ transport_connect(transport, "git-upload-archive", exec, fd);
for (i = 1; i < argc; i++)
packet_write(fd[1], "argument %s\n", argv[i]);
@@ -53,9 +58,7 @@ static int run_remote_archiver(int argc, const char **argv,
/* Now, start reading from fd[0] and spit it out to stdout */
rv = recv_sideband("archive", fd[0], 1);
- close(fd[0]);
- close(fd[1]);
- rv |= finish_connect(conn);
+ rv |= transport_disconnect(transport);
return !!rv;
}