Skip to content

Commit

Permalink
remote-curl: pass buffer straight to get_remote_heads
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Jeff King authored and Junio C Hamano committed Feb 24, 2013
1 parent 85edf4f commit 5dbf436
Showing 1 changed file with 2 additions and 24 deletions.
26 changes: 2 additions & 24 deletions remote-curl.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}

Expand Down

0 comments on commit 5dbf436

Please sign in to comment.