transport-helper: check status code of finish_command

Previously the status code of all helpers were ignored, allowing
errors that occur to go unnoticed if the error text output by the
helper is not noticed.

Signed-off-by: Sverre Rabbelier <srabbelier@gmail.com>
Acked-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Sverre Rabbelier 2011-07-16 15:03:35 +02:00 коммит произвёл Junio C Hamano
Родитель d2e73c6f2a
Коммит cc567322ac
1 изменённых файлов: 15 добавлений и 8 удалений

Просмотреть файл

@ -209,6 +209,7 @@ static int disconnect_helper(struct transport *transport)
{ {
struct helper_data *data = transport->data; struct helper_data *data = transport->data;
struct strbuf buf = STRBUF_INIT; struct strbuf buf = STRBUF_INIT;
int res = 0;
if (data->helper) { if (data->helper) {
if (debug) if (debug)
@ -220,13 +221,13 @@ static int disconnect_helper(struct transport *transport)
close(data->helper->in); close(data->helper->in);
close(data->helper->out); close(data->helper->out);
fclose(data->out); fclose(data->out);
finish_command(data->helper); res = finish_command(data->helper);
free((char *)data->helper->argv[0]); free((char *)data->helper->argv[0]);
free(data->helper->argv); free(data->helper->argv);
free(data->helper); free(data->helper);
data->helper = NULL; data->helper = NULL;
} }
return 0; return res;
} }
static const char *unsupported_options[] = { static const char *unsupported_options[] = {
@ -304,12 +305,13 @@ static void standard_options(struct transport *t)
static int release_helper(struct transport *transport) static int release_helper(struct transport *transport)
{ {
int res = 0;
struct helper_data *data = transport->data; struct helper_data *data = transport->data;
free_refspec(data->refspec_nr, data->refspecs); free_refspec(data->refspec_nr, data->refspecs);
data->refspecs = NULL; data->refspecs = NULL;
disconnect_helper(transport); res = disconnect_helper(transport);
free(transport->data); free(transport->data);
return 0; return res;
} }
static int fetch_with_fetch(struct transport *transport, static int fetch_with_fetch(struct transport *transport,
@ -415,8 +417,11 @@ static int fetch_with_import(struct transport *transport,
sendline(data, &buf); sendline(data, &buf);
strbuf_reset(&buf); strbuf_reset(&buf);
} }
disconnect_helper(transport); if (disconnect_helper(transport))
finish_command(&fastimport); die("Error while disconnecting helper");
if (finish_command(&fastimport))
die("Error while running fast-import");
free(fastimport.argv); free(fastimport.argv);
fastimport.argv = NULL; fastimport.argv = NULL;
@ -760,8 +765,10 @@ static int push_refs_with_export(struct transport *transport,
die("Couldn't run fast-export"); die("Couldn't run fast-export");
data->no_disconnect_req = 1; data->no_disconnect_req = 1;
finish_command(&exporter); if (finish_command(&exporter))
disconnect_helper(transport); die("Error while running fast-export");
if (disconnect_helper(transport))
die("Error while disconnecting helper");
return 0; return 0;
} }