remote-curl: pass buffer straight to get_remote_heads
Until recently, get_remote_heads only knew how to read refs from a file descriptor. To hack around this, we spawned a thread (or forked a process) to write the buffer back to us. Now that we can just pass it our buffer directly, we don't have to use this hack anymore. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
85edf4f58b
commit
5dbf43602d
@ -170,33 +170,11 @@ static struct discovery* discover_refs(const char *service)
|
||||
return last;
|
||||
}
|
||||
|
||||
static int write_discovery(int in, int out, void *data)
|
||||
{
|
||||
struct discovery *heads = data;
|
||||
int err = 0;
|
||||
if (write_in_full(out, heads->buf, heads->len) != heads->len)
|
||||
err = 1;
|
||||
close(out);
|
||||
return err;
|
||||
}
|
||||
|
||||
static struct ref *parse_git_refs(struct discovery *heads, int for_push)
|
||||
{
|
||||
struct ref *list = NULL;
|
||||
struct async async;
|
||||
|
||||
memset(&async, 0, sizeof(async));
|
||||
async.proc = write_discovery;
|
||||
async.data = heads;
|
||||
async.out = -1;
|
||||
|
||||
if (start_async(&async))
|
||||
die("cannot start thread to parse advertised refs");
|
||||
get_remote_heads(async.out, NULL, 0, &list,
|
||||
for_push ? REF_NORMAL : 0, NULL);
|
||||
close(async.out);
|
||||
if (finish_async(&async))
|
||||
die("ref parsing thread failed");
|
||||
get_remote_heads(-1, heads->buf, heads->len, &list,
|
||||
for_push ? REF_NORMAL : 0, NULL);
|
||||
return list;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user