Thread (25 messages) flat view 25 messages, 7 authors, 2016-08-13

Re: [PATCH/RFC] recv_sideband: Band #2 always goes to stderr

From: Johannes Schindelin <hidden>
Date: 2016-06-15 22:46:22

Possibly related (same subject, not in this thread)

Hi,

On Tue, 10 Mar 2009, Johannes Sixt wrote:
Johannes Schindelin schrieb:
quoted
FWIW GitTorrent may be implemented as part of git-daemon, if Sam's 
ideas become reality.  And then, sideband transport is _the_ means to 
do asyncrounous communication while pushing bytes.
I do not see how recv_sideband() in its current form could be helpful 
here (assuming that you really are thinking of sending binary data over 
band #2).
I think it is a safe bet that the side band would be a good way to 
exchange updates to the mirror list as well as the refs list.
quoted
On Tue, 10 Mar 2009, Johannes Sixt wrote:
quoted
Johannes Sixt schrieb:
quoted
For use-cases that you have in mind in GitTorrent, the *protocol* 
may be a good choice, but the current implementation is definitely a 
special case.
And it really is: Did you notice that stuff that recv_sideband sends 
over the channel named 'err' (before my patch) has "remote: " 
prepended on every line? That's certainly not an implementation that 
you want if you send binary data over that band!
Yes, that is unfortunate, but can be fixed easily.
I don't believe this. Every treatment of "remote: " that you take away
from recv_sideband() you must insert somewhere else. Perhaps easy, but
certainly not as trivial as my patch.
AFAICT it would be a matter of

	unsigned pf = isatty(err) ? strlen(PREFIX) : 0;
Just a reminder: You proposed to override write() on Windows in a 
non-trivial way, and we are discussing the topic above because I think 
that is not a good idea. The reasons are:

- write() is a fundamental operation, and we should not mess with it out 
  of caution.
But we do not mess with it!  We ask explicitely if we are talking about a 
tty.
- Your proposal is not a catch-all. For example, combine-diff.c uses 
  puts() in dump_quoted_path(). If your goal was to not touch code 
  outside of compat/ then you need to override at least puts(), too.
From compat/mingw.h:
-- snip --
/*
 * ANSI emulation wrappers
 */

int winansi_fputs(const char *str, FILE *stream);
[...]
#define fputs winansi_fputs
-- snap --

... added in c09df8a, SOBbed by yourself ;-)
- All code that writes ANSI escapes should use fprintf() anyway.  
  (Currently that is not the case, but all cases I'm aware of can be 
  fixed trivially.)
I disagree that all ANSI escapes have to go through fprintf().  Sometimes 
you have a buffer, and I do not like doing extra work with %.*s there.

BTW I hope that you are not annoyed by the discussion; I think it is 
necessary and important.  I am certainly not married to my current POV; so 
far, I am still in favor of it, though.

Ciao,
Dscho
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help