Merge three separate "fetch refs" functions
It really just boils down to one "get_remote_heads()" function, and a common "struct ref" structure definition.
This commit is contained in:
35
connect.c
35
connect.c
@ -7,6 +7,41 @@
|
||||
#include <arpa/inet.h>
|
||||
#include <netdb.h>
|
||||
|
||||
/*
|
||||
* Read all the refs from the other end
|
||||
*/
|
||||
struct ref **get_remote_heads(int in, struct ref **list, int nr_match, char **match)
|
||||
{
|
||||
*list = NULL;
|
||||
for (;;) {
|
||||
struct ref *ref;
|
||||
unsigned char old_sha1[20];
|
||||
static char buffer[1000];
|
||||
char *name;
|
||||
int len;
|
||||
|
||||
len = packet_read_line(in, buffer, sizeof(buffer));
|
||||
if (!len)
|
||||
break;
|
||||
if (buffer[len-1] == '\n')
|
||||
buffer[--len] = 0;
|
||||
|
||||
if (len < 42 || get_sha1_hex(buffer, old_sha1) || buffer[40] != ' ')
|
||||
die("protocol error: expected sha/ref, got '%s'", buffer);
|
||||
name = buffer + 41;
|
||||
if (nr_match && !path_match(name, nr_match, match))
|
||||
continue;
|
||||
ref = xmalloc(sizeof(*ref) + len - 40);
|
||||
memcpy(ref->old_sha1, old_sha1, 20);
|
||||
memset(ref->new_sha1, 0, 20);
|
||||
memcpy(ref->name, buffer + 41, len - 40);
|
||||
ref->next = NULL;
|
||||
*list = ref;
|
||||
list = &ref->next;
|
||||
}
|
||||
return list;
|
||||
}
|
||||
|
||||
int get_ack(int fd, unsigned char *result_sha1)
|
||||
{
|
||||
static char line[1000];
|
||||
|
Reference in New Issue
Block a user