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)
- 2016-06-15 · Re: [PATCH/RFC] recv_sideband: Band #2 always goes to stderr · Junio C Hamano <hidden>
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