send-pack: report signal death of pack-objects
If our pack-objects sub-process dies of a signal, then it likely didn't have a chance to write anything useful to stderr. The user may be left scratching their head why the push failed. Let's detect this situation and write something to stderr. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>maint
parent
ba69f92db6
commit
d1a13d3fcb
15
send-pack.c
15
send-pack.c
|
@ -72,6 +72,7 @@ static int pack_objects(int fd, struct ref *refs, struct sha1_array *extra, stru
|
||||||
struct child_process po = CHILD_PROCESS_INIT;
|
struct child_process po = CHILD_PROCESS_INIT;
|
||||||
FILE *po_in;
|
FILE *po_in;
|
||||||
int i;
|
int i;
|
||||||
|
int rc;
|
||||||
|
|
||||||
i = 4;
|
i = 4;
|
||||||
if (args->use_thin_pack)
|
if (args->use_thin_pack)
|
||||||
|
@ -125,8 +126,20 @@ static int pack_objects(int fd, struct ref *refs, struct sha1_array *extra, stru
|
||||||
po.out = -1;
|
po.out = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (finish_command(&po))
|
rc = finish_command(&po);
|
||||||
|
if (rc) {
|
||||||
|
/*
|
||||||
|
* For a normal non-zero exit, we assume pack-objects wrote
|
||||||
|
* something useful to stderr. For death by signal, though,
|
||||||
|
* we should mention it to the user. The exception is SIGPIPE
|
||||||
|
* (141), because that's a normal occurence if the remote end
|
||||||
|
* hangs up (and we'll report that by trying to read the unpack
|
||||||
|
* status).
|
||||||
|
*/
|
||||||
|
if (rc > 128 && rc != 141)
|
||||||
|
error("pack-objects died of signal %d", rc - 128);
|
||||||
return -1;
|
return -1;
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue