git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: Nicolas Pitre <nico@fluxnic.net>
To: Junio C Hamano <gitster@pobox.com>
Cc: Lukas Fleischer <lfleischer@lfos.de>,
	git@vger.kernel.org,
	Johannes Schindelin <Johannes.Schindelin@gmx.de>,
	Jeff King <peff@peff.net>
Subject: Re: [PATCH v4] Refactor recv_sideband()
Date: Tue, 28 Jun 2016 14:28:56 -0400 (EDT)	[thread overview]
Message-ID: <alpine.LFD.2.20.1606281422500.24439@knanqh.ubzr> (raw)
In-Reply-To: <xmqqlh1p89mo.fsf@gitster.mtv.corp.google.com>

On Tue, 28 Jun 2016, Junio C Hamano wrote:

> Nicolas Pitre <nico@fluxnic.net> writes:
> 
> >> When we exit the loop because we set retval to a non-zero value,
> >> should we still drain the outbuf?
> >
> > I would think so.  Anything that the remote sent before any error should 
> > be printed nevertheless.  The clue for the error might be in the pending 
> > buffer.
> >
> > However in this case the actual error printout and the pending buffer 
> > will appear reversed.
> >
> > So what I'd suggest is actually something like this:
> >
> >             if (len < 1) {
> >                     strbuf_addf(&outbuf, "\n%s: protocol error: no band designator\n", me);
> >                     retval = SIDEBAND_PROTOCOL_ERROR;
> >                     break;
> >
> > And so on for the other error cases.
> 
> Makes sense.
> 
> Here is what I have as a "SQUASH" on top of Lukas's change to be
> queued on 'pu'.

Looks good to me.

Acked-by: Nicolas Pitre <nico@linaro.org>

> It appears that a few tests get their expectations broken, with or
> without this "SQUASH" change, though X-<.

Without this, the error and remaining buffer would be reversed as 
mentioned previously.  With this, the order is restored, but a newline 
is added to unterminated lines whereas the error was simply appended to 
the output before Lukas' patch.

In any case the new behavior is probably better and I'd simply adjust 
the test expectations.


> 
>  sideband.c | 30 +++++++++++++++---------------
>  1 file changed, 15 insertions(+), 15 deletions(-)
> 
> diff --git a/sideband.c b/sideband.c
> index 226a8c2..082dfc6 100644
> --- a/sideband.c
> +++ b/sideband.c
> @@ -33,13 +33,15 @@ int recv_sideband(const char *me, int in_stream, int out)
>  	else
>  		suffix = DUMB_SUFFIX;
>  
> -	while (retval == 0) {
> +	while (!retval) {
>  		int band, len;
>  		len = packet_read(in_stream, NULL, NULL, buf, LARGE_PACKET_MAX, 0);
>  		if (len == 0)
>  			break;
>  		if (len < 1) {
> -			fprintf(stderr, "%s: protocol error: no band designator\n", me);
> +			strbuf_addf(&outbuf,
> +				    "\n%s: protocol error: no band designator\n",
> +				    me);
>  			retval = SIDEBAND_PROTOCOL_ERROR;
>  			break;
>  		}
> @@ -48,7 +50,7 @@ int recv_sideband(const char *me, int in_stream, int out)
>  		len--;
>  		switch (band) {
>  		case 3:
> -			fprintf(stderr, "%s%s\n", PREFIX, buf + 1);
> +			strbuf_addf(&outbuf, "\n%s%s\n", PREFIX, buf + 1);
>  			retval = SIDEBAND_REMOTE_ERROR;
>  			break;
>  		case 2:
> @@ -58,13 +60,12 @@ int recv_sideband(const char *me, int in_stream, int out)
>  			 * Append a suffix to each nonempty line to clear the
>  			 * end of the screen line.
>  			 *
> -			 * The output is accumulated in a buffer and each line
> -			 * is printed to stderr using fprintf() with a single
> -			 * conversion specifier. This is a "best effort"
> -			 * approach to supporting both inter-process atomicity
> -			 * (single conversion specifiers are likely to end up
> -			 * in single atomic write() system calls) and the ANSI
> -			 * control code emulation under Windows.
> +			 * The output is accumulated in a buffer and
> +			 * each line is printed to stderr using
> +			 * fwrite(3).  This is a "best effort"
> +			 * approach to support inter-process atomicity
> +			 * (single fwrite(3) call is likely to end up
> +			 * in single atomic write() system calls).
>  			 */
>  			while ((brk = strpbrk(b, "\n\r"))) {
>  				int linelen = brk - b;
> @@ -75,8 +76,7 @@ int recv_sideband(const char *me, int in_stream, int out)
>  				} else {
>  					strbuf_addf(&outbuf, "%c", *brk);
>  				}
> -				fprintf(stderr, "%.*s", (int)outbuf.len,
> -					outbuf.buf);
> +				fwrite(outbuf.buf, 1, outbuf.len, stderr);
>  				strbuf_reset(&outbuf);
>  				strbuf_addf(&outbuf, "%s", PREFIX);
>  
> @@ -90,15 +90,15 @@ int recv_sideband(const char *me, int in_stream, int out)
>  			write_or_die(out, buf + 1, len);
>  			break;
>  		default:
> -			fprintf(stderr, "%s: protocol error: bad band #%d\n",
> +			strbuf_addf(&outbuf, "\n%s: protocol error: bad band #%d\n",
>  				me, band);
>  			retval = SIDEBAND_PROTOCOL_ERROR;
>  			break;
>  		}
>  	}
>  
> -	if (outbuf.len > 0)
> -		fprintf(stderr, "%.*s", (int)outbuf.len, outbuf.buf);
> +	if (outbuf.len)
> +		fwrite(outbuf.buf, 1, outbuf.len, stderr);
>  	strbuf_release(&outbuf);
>  	return retval;
>  }
> --
> To unsubscribe from this list: send the line "unsubscribe git" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 

  reply	other threads:[~2016-06-28 18:29 UTC|newest]

Thread overview: 60+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-06-13 19:52 [PATCH] Refactor recv_sideband() Lukas Fleischer
2016-06-13 21:07 ` Nicolas Pitre
2016-06-14 13:44   ` Johannes Schindelin
2016-06-14 15:04     ` Nicolas Pitre
2016-06-14 15:30       ` Johannes Schindelin
     [not found]       ` <Cq7rbYgOpb0CVCq7sbGmpL@videotron.ca>
2016-06-14 16:43         ` Nicolas Pitre
2016-06-14 17:09   ` Nicolas Pitre
     [not found]     ` <CsLdb3qLMBok7CsLebwX38@videotron.ca>
2016-06-14 17:55       ` Nicolas Pitre
2016-06-14 18:11         ` Junio C Hamano
2016-06-14 19:11           ` Lukas Fleischer
2016-06-14 19:16             ` Junio C Hamano
     [not found]         ` <Ct7VbfLfTHEALCt7Wbh8Xs@videotron.ca>
2016-06-14 20:10           ` Nicolas Pitre
2016-06-14 21:00 ` [PATCH v2] " Lukas Fleischer
2016-06-14 21:11   ` Lukas Fleischer
2016-06-14 21:25   ` Junio C Hamano
2016-06-15  3:44     ` Jeff King
     [not found]     ` <146597489449.32143.1327156804178869158@s-8d3a2dc3.on.site.uni-stuttgart.de>
2016-06-19 10:48       ` Lukas Fleischer
2016-06-24 15:31   ` Jeff King
2016-06-24 17:45     ` Johannes Schindelin
2016-06-24 18:14       ` Jeff King
2016-06-24 18:32         ` Junio C Hamano
2016-06-27 10:58           ` Lukas Fleischer
2016-06-27 15:54             ` Junio C Hamano
2016-06-27 16:16               ` Jeff King
2016-06-27 17:50                 ` Junio C Hamano
2016-06-27 20:34                   ` Lukas Fleischer
2016-06-27 20:47                     ` Nicolas Pitre
2016-06-28  4:01                       ` Lukas Fleischer
2016-06-28  5:20                     ` Junio C Hamano
2016-06-28 10:04                 ` Johannes Schindelin
2016-06-28 10:05                   ` Johannes Schindelin
2016-06-28 15:13                     ` Junio C Hamano
2016-06-28 16:21                       ` Johannes Schindelin
2016-06-24 20:07         ` Dennis Kaarsemaker
2016-06-22  5:29 ` [PATCH v3] " Lukas Fleischer
2016-06-22 15:02   ` Nicolas Pitre
2016-06-22 22:47     ` Nicolas Pitre
2016-06-23 17:35       ` Lukas Fleischer
2016-06-23 18:59         ` Nicolas Pitre
2016-06-28  4:35 ` [PATCH v4] " Lukas Fleischer
2016-06-28 16:57   ` Junio C Hamano
2016-06-28 17:24     ` Junio C Hamano
2016-06-28 17:46       ` Nicolas Pitre
2016-06-28 18:13         ` Junio C Hamano
2016-06-28 18:28           ` Nicolas Pitre [this message]
2016-06-28 19:51             ` Junio C Hamano
2016-06-28 20:36               ` Nicolas Pitre
2016-06-28 21:09                 ` Junio C Hamano
2016-06-28 21:44                   ` Nicolas Pitre
2016-06-28 22:33                     ` Junio C Hamano
2016-06-28 22:47                       ` Junio C Hamano
2016-06-29  3:00                         ` Junio C Hamano
2016-06-29  3:41                           ` Nicolas Pitre
2016-06-29  2:02                       ` Nicolas Pitre
2016-06-29 16:40                         ` Junio C Hamano
2016-06-30  6:16                           ` Lukas Fleischer
2016-07-01 20:01                             ` Junio C Hamano
2016-07-05 20:35                           ` Nicolas Pitre
2016-07-06 21:11                             ` Junio C Hamano
2016-07-07  0:56                               ` Nicolas Pitre

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: http://vger.kernel.org/majordomo-info.html

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=alpine.LFD.2.20.1606281422500.24439@knanqh.ubzr \
    --to=nico@fluxnic.net \
    --cc=Johannes.Schindelin@gmx.de \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=lfleischer@lfos.de \
    --cc=peff@peff.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).