On 04/13/2017 05:56 AM, Gregory Szorc wrote:
On Tue, Apr 11, 2017 at 12:54 PM, Jun Wu <qu...@fb.com <mailto:qu...@fb.com>> wrote: Excerpts from Pierre-Yves David's message of 2017-04-11 20:24:00 +0200: > > On 04/11/2017 07:49 PM, Bryan O'Sullivan wrote: > > > > On Tue, Apr 11, 2017 at 7:15 AM, Augie Fackler <r...@durin42.com <mailto:r...@durin42.com> > > <mailto:r...@durin42.com <mailto:r...@durin42.com>>> wrote: > > > > I'm missing some context. Why do we want timestamps in our output > > like this? > > This is useful to audit the timing of various steps when debugging (eg: > discovery, cache computations, etc…). > > (I'm the one behind who motivated Mathieu to write this patch. I need > this feature on a regular basis) > > > That's what the ts command gives us on Linux. I don't think this needs > > to be integrated into Mercurial proper. > > Yes, `ts` can do this. However, piping to `ts` enable buffered output > for Python (and Mercurial). As a result the timestamp of line has no > relation with the time it was requested in the code. Sure one can > request non-buffered output, but at that point there start to be enough > obstacle than is get in the "complex" territory when requesting a trace > to a random user. That's what `stdbuf` solves. I don't think the "ts" feature should be in core hg, either. > > In addition, `tr` won't handle timestamp for buffered and remote output. > > So I think this patches has value on its own. One thing that stdbuf + ts won't give you is correct handling of some terminal control characters, such as coloring. For example, Clang doesn't reset terminal attributes (sgr0) around newlines. So when piping `clang -fcolor-diagnostics` to ts (you need -fcolor-diagnostics b/c clang will turn off color when not writing to a TTY), the timestamps printed by ts will be using whatever attributes the last output was using. This can result in inconsistently colored and difficult-to-read output.
Actually, the simplest way to get hg to not buffer the pipe is to set PYTHONUNBUFFERED, so stdbuf bugs does not matters to much.
However, this deficiency does not apply to Mercurial, as color.colorlabel() splits by newline and resets terminal attributes during newline. The only real benefit I see to having this feature in core is convenience, built-in support for coloring, and perhaps better integration with forensic logging. I'm -0 on this feature because I don't see a compelling need for it at this time.
Another elements is that windows users (with less performance love) do not have the 'ts' utility handy, so having our own feature would help them.
That changes is not critical to me for now. So I'm fine if we shelve this until we have a more compelling usecase.
Cheers, -- Pierre-Yves David _______________________________________________ Mercurial-devel mailing list Mercurial-devel@mercurial-scm.org https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel