зеркало из https://github.com/microsoft/git.git
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:
Родитель
d2e73c6f2a
Коммит
cc567322ac
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче