check_connected: relay errors to alternate descriptor

Unless the "quiet" flag is given, check_connected sends any
errors to the stderr of the caller (because the child
rev-list inherits that descriptor). However, server-side
callers may want to send these over a sideband channel
instead.  Let's make that possible.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Jeff King 2016-07-15 06:32:03 -04:00 committed by Junio C Hamano
parent 7043c7071c
commit e0331849a0
2 changed files with 16 additions and 2 deletions

View File

@ -31,8 +31,11 @@ int check_connected(sha1_iterate_fn fn, void *cb_data,
opt = &defaults; opt = &defaults;
transport = opt->transport; transport = opt->transport;
if (fn(cb_data, sha1)) if (fn(cb_data, sha1)) {
if (opt->err_fd)
close(opt->err_fd);
return err; return err;
}
if (transport && transport->smart_options && if (transport && transport->smart_options &&
transport->smart_options->self_contained_and_connected && transport->smart_options->self_contained_and_connected &&
@ -59,7 +62,11 @@ int check_connected(sha1_iterate_fn fn, void *cb_data,
rev_list.git_cmd = 1; rev_list.git_cmd = 1;
rev_list.in = -1; rev_list.in = -1;
rev_list.no_stdout = 1; rev_list.no_stdout = 1;
rev_list.no_stderr = opt->quiet; if (opt->err_fd)
rev_list.err = opt->err_fd;
else
rev_list.no_stderr = opt->quiet;
if (start_command(&rev_list)) if (start_command(&rev_list))
return error(_("Could not run 'git rev-list'")); return error(_("Could not run 'git rev-list'"));

View File

@ -23,6 +23,13 @@ struct check_connected_options {
/* Transport whose objects we are checking, if available. */ /* Transport whose objects we are checking, if available. */
struct transport *transport; struct transport *transport;
/*
* If non-zero, send error messages to this descriptor rather
* than stderr. The descriptor is closed before check_connected
* returns.
*/
int err_fd;
}; };
#define CHECK_CONNECTED_INIT { 0 } #define CHECK_CONNECTED_INIT { 0 }