зеркало из https://github.com/microsoft/git.git
Merge branch 'jk/send-pack-stdio'
Code clean-up. * jk/send-pack-stdio: write_or_die: remove the unused write_or_whine() function send-pack: use buffered I/O to talk to pack-objects
This commit is contained in:
Коммит
7e58b8166e
1
cache.h
1
cache.h
|
@ -1721,7 +1721,6 @@ extern int copy_file(const char *dst, const char *src, int mode);
|
||||||
extern int copy_file_with_time(const char *dst, const char *src, int mode);
|
extern int copy_file_with_time(const char *dst, const char *src, int mode);
|
||||||
|
|
||||||
extern void write_or_die(int fd, const void *buf, size_t count);
|
extern void write_or_die(int fd, const void *buf, size_t count);
|
||||||
extern int write_or_whine(int fd, const void *buf, size_t count, const char *msg);
|
|
||||||
extern int write_or_whine_pipe(int fd, const void *buf, size_t count, const char *msg);
|
extern int write_or_whine_pipe(int fd, const void *buf, size_t count, const char *msg);
|
||||||
extern void fsync_or_die(int fd, const char *);
|
extern void fsync_or_die(int fd, const char *);
|
||||||
|
|
||||||
|
|
33
send-pack.c
33
send-pack.c
|
@ -36,18 +36,15 @@ int option_parse_push_signed(const struct option *opt,
|
||||||
die("bad %s argument: %s", opt->long_name, arg);
|
die("bad %s argument: %s", opt->long_name, arg);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int feed_object(const unsigned char *sha1, int fd, int negative)
|
static void feed_object(const unsigned char *sha1, FILE *fh, int negative)
|
||||||
{
|
{
|
||||||
char buf[42];
|
|
||||||
|
|
||||||
if (negative && !has_sha1_file(sha1))
|
if (negative && !has_sha1_file(sha1))
|
||||||
return 1;
|
return;
|
||||||
|
|
||||||
memcpy(buf + negative, sha1_to_hex(sha1), 40);
|
|
||||||
if (negative)
|
if (negative)
|
||||||
buf[0] = '^';
|
putc('^', fh);
|
||||||
buf[40 + negative] = '\n';
|
fputs(sha1_to_hex(sha1), fh);
|
||||||
return write_or_whine(fd, buf, 41 + negative, "send-pack: send refs");
|
putc('\n', fh);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -73,6 +70,7 @@ static int pack_objects(int fd, struct ref *refs, struct sha1_array *extra, stru
|
||||||
NULL,
|
NULL,
|
||||||
};
|
};
|
||||||
struct child_process po = CHILD_PROCESS_INIT;
|
struct child_process po = CHILD_PROCESS_INIT;
|
||||||
|
FILE *po_in;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
i = 4;
|
i = 4;
|
||||||
|
@ -97,21 +95,22 @@ static int pack_objects(int fd, struct ref *refs, struct sha1_array *extra, stru
|
||||||
* We feed the pack-objects we just spawned with revision
|
* We feed the pack-objects we just spawned with revision
|
||||||
* parameters by writing to the pipe.
|
* parameters by writing to the pipe.
|
||||||
*/
|
*/
|
||||||
|
po_in = xfdopen(po.in, "w");
|
||||||
for (i = 0; i < extra->nr; i++)
|
for (i = 0; i < extra->nr; i++)
|
||||||
if (!feed_object(extra->sha1[i], po.in, 1))
|
feed_object(extra->sha1[i], po_in, 1);
|
||||||
break;
|
|
||||||
|
|
||||||
while (refs) {
|
while (refs) {
|
||||||
if (!is_null_oid(&refs->old_oid) &&
|
if (!is_null_oid(&refs->old_oid))
|
||||||
!feed_object(refs->old_oid.hash, po.in, 1))
|
feed_object(refs->old_oid.hash, po_in, 1);
|
||||||
break;
|
if (!is_null_oid(&refs->new_oid))
|
||||||
if (!is_null_oid(&refs->new_oid) &&
|
feed_object(refs->new_oid.hash, po_in, 0);
|
||||||
!feed_object(refs->new_oid.hash, po.in, 0))
|
|
||||||
break;
|
|
||||||
refs = refs->next;
|
refs = refs->next;
|
||||||
}
|
}
|
||||||
|
|
||||||
close(po.in);
|
fflush(po_in);
|
||||||
|
if (ferror(po_in))
|
||||||
|
die_errno("error writing to pack-objects");
|
||||||
|
fclose(po_in);
|
||||||
|
|
||||||
if (args->stateless_rpc) {
|
if (args->stateless_rpc) {
|
||||||
char *buf = xmalloc(LARGE_PACKET_MAX);
|
char *buf = xmalloc(LARGE_PACKET_MAX);
|
||||||
|
|
|
@ -94,14 +94,3 @@ int write_or_whine_pipe(int fd, const void *buf, size_t count, const char *msg)
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
int write_or_whine(int fd, const void *buf, size_t count, const char *msg)
|
|
||||||
{
|
|
||||||
if (write_in_full(fd, buf, count) < 0) {
|
|
||||||
fprintf(stderr, "%s: write error (%s)\n",
|
|
||||||
msg, strerror(errno));
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче