Mercurial > hg
changeset 41308:26ee61c33dee stable
ui: remove unreachable branches and function calls from write() (issue6059)
This is at least faster than ui.write() of 4.8.2.
$ HGRCPATH=/dev/null hg files -R mozilla-central --time >/dev/null
4.8.2: time: real 2.340 secs (user 2.310+0.000 sys 0.020+0.000)
4.9rc0: time: real 2.580 secs (user 2.550+0.000 sys 0.020+0.000)
this: time: real 2.230 secs (user 2.210+0.000 sys 0.020+0.000)
Maybe the formatter should own a resolved write() function because it will
just call dest.write(msg) most of the time, but that would be too much for
stable.
author | Yuya Nishihara <yuya@tcha.org> |
---|---|
date | Thu, 24 Jan 2019 21:38:02 +0900 |
parents | e8273eaa0726 |
children | 2f54f31c41aa |
files | mercurial/ui.py |
diffstat | 1 files changed, 2 insertions(+), 16 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/ui.py Thu Jan 24 21:35:55 2019 +0900 +++ b/mercurial/ui.py Thu Jan 24 21:38:02 2019 +0900 @@ -1002,7 +1002,7 @@ dest = self._fout # inlined _write() for speed - if self._isbuffered(dest): + if self._buffers: label = opts.get(r'label', '') if label and self._bufferapplylabels: self._buffers[-1].extend(self.label(a, label) for a in args) @@ -1017,13 +1017,7 @@ # opencode timeblockedsection because this is a critical path starttime = util.timer() try: - if dest is self._ferr and not getattr(self._fout, 'closed', False): - self._fout.flush() - if getattr(dest, 'structured', False): - # channel for machine-readable output with metadata, where - # no extra colorization is necessary. - dest.write(msg, **opts) - elif self._colormode == 'win32': + if self._colormode == 'win32': # windows color printing is its own can of crab, defer to # the color module and that is it. color.win32print(self, dest.write, msg, **opts) @@ -1032,15 +1026,7 @@ label = opts.get(r'label', '') msg = self.label(msg, label) dest.write(msg) - # stderr may be buffered under win32 when redirected to files, - # including stdout. - if dest is self._ferr and not getattr(self._ferr, 'closed', False): - dest.flush() except IOError as err: - if (dest is self._ferr - and err.errno in (errno.EPIPE, errno.EIO, errno.EBADF)): - # no way to report the error, so ignore it - return raise error.StdioError(err) finally: self._blockedtimes['stdio_blocked'] += \